2010-06-18 43 views
11

Tôi muốn hiển thị video có độ phân giải rất cao trực tiếp với OpenGL.Hiển thị video với openGL

Dữ liệu hình ảnh sẽ được xử lý trên GPU và tôi muốn tránh một chuyến đi khứ hồi trở lại PC để hiển thị video trong cửa sổ dựa trên bitmap chuẩn.
Nền tảng chéo đẹp, Windows chỉ có thể là OK (chỉ có ở nvidia)

Bất kỳ ai có bất kỳ liên kết nào để thực hiện việc này?

Có hướng dẫn NeHe kém và một vài ví dụ về tiện ích mở rộng OpenGL được nhúng trong Qt nhưng tôi cần hiệu suất tốt hơn và hình ảnh lớn hơn nhiều.

Trả lời

10

Giả sử OpenGL 2.1, sử dụng đối tượng đệm loại GL_PIXEL_UNPACK_BUFFER để truyền dữ liệu pixel tới kết cấu. Nó nhanh hơn việc tải lên dữ liệu mỗi khung hình khi việc triển khai có thể sử dụng DMA để sao chép khi bạn sử dụng glMapBuffer, glMapBufferRange (OpenGL 3.2) hoặc gọi trực tiếp glBufferData. Bạn cũng có thể sao chép nhiều khung hình trong mỗi lô để có được sự cân bằng giữa chi phí sao chép và chi phí bản đồ. Cuối cùng, tạo một shader để chuyển đổi YUV hoặc YCbCr thành RGB và hiển thị texture với một dải tam giác.

+0

Bất kỳ lý do nào cho hình tam giác trên quad toàn màn hình? –

+3

Có, quads hút trong mọi tôn trọng và không nên được sử dụng, Chỉ cần quên họ đã từng tồn tại. –

2

Điều rõ ràng để làm với OpenGL là hiển thị bitmap dưới dạng kết cấu.

+0

Có - Tôi chỉ tự hỏi nếu có một số thủ thuật hiệu suất video cụ thể, thay vì chỉ sao chép từng khung hình thành toàn màn hình quad –

+0

@Martin: Không thường - miễn là bạn giữ tất cả bộ nhớ xáo trộn trên thẻ chính nó, hầu như bất kỳ card video hợp lý nào cũng có thể dễ dàng cung cấp băng thông để viết lại mọi bit trên màn hình ở tốc độ làm mới tối đa (đặc biệt là bây giờ, vì màn hình LCD hầu như không bao giờ làm mới nhanh hơn 60 Hz - nó khó hơn với CRT cao cấp đã làm 100 + Làm mới Hz). –

+0

Thats vấn đề - Tôi cần phải làm 1080p ở 120Hz (và lý tưởng là hai trong số họ!) –

1

Vì vậy, bạn muốn gửi video của mình lên kết cấu và xử lý nó bằng trình đổ bóng phân đoạn? Here's một hướng dẫn ngắn về cách thực hiện điều gì đó tương tự. Nó chỉ là một ví dụ đơn giản OpenGL 2.0 tạo ra 2 kết cấu kích thước cửa sổ và trộn chúng vào trong phần đổ bóng. Không có video liên quan nhưng không khó để sửa đổi nếu bạn đã có phương tiện để giải mã nó.

0

Nếu bạn muốn, tôi đã tạo một API rất đơn giản, trong nhiều thứ, cũng có thể hiển thị video dưới dạng kết cấu mờ. Bạn cũng có thể tạo bản đồ độ cao động bằng cách sử dụng nguồn cấp dữ liệu video trực tiếp.

Bạn có thể kiểm tra các API tại http://www.barbato.us/category/programming-labs/

Rất dễ dàng để sử dụng và làm cho mã rất dễ đọc.

Chúc may mắn !!!

Các vấn đề liên quan