2013-07-31 1 views
2

내 코드가 비디오를 원시 YCbCr 프레임으로 디코딩하는 곳의 비디오 플레이어를 작성하고 있습니다. Qt 프레임 워크를 통해 이들을 출력하는 가장 빠른 방법은 무엇입니까? 이미지를 HD 형식으로 너무 많이 복사하지 않도록하고 싶습니다.Qt로 고성능 비디오 출력

QImage 로의 소프트웨어 색상 변환 속도가 느리고 나중에 GUI로 그릴 때 QImage가 다시 복사됩니다.

내가 QAbstractVideoSurface 살펴했고 심지어 을 실행하는 코드를 가지고 있지만, VideoWidget 예 (http://idlebox.net/2010/apidocs/qt-everywhere-opensource-4.7.0.zip/multimedia-videowidget.html)에서이 같은 때문에 빠른 방법을 이해 할 수없는 한 렌더링은 여전히 ​​QImage 와 QPainter를 ::의 drawImage를 호출하여 수행됩니다 , RGB에 있어야합니다.

선호하는 솔루션은 직접 하드웨어 표면에 액세스 할 수있는 것으로 보입니다. 으로 YCbCr을 디코딩하거나 적어도 RGB 변환 (libswscale 사용)을 직접 수행 할 수 있습니다. 그러나 나는 이것을 할 수있는 방법을 알지 못한다. (그래도 OpenGL을 사용하지 않으면 무료 크기 조절 을 얻을 수있다.)

+0

나는 이것에 또한 흥미있다. 지금까지 내가 찾은 최선의 방법이 있지만, 더 좋은 방법이 있는지 알고 싶습니다. http://stackoverflow.com/questions/1242005/what-is-the-most-efficient-way-to-display-decoded-video-frames-in-qt –

+0

어떤 플랫폼입니까? GPU에서 해독합니까? –

+0

Phonon? - https://qt-project.org/doc/qt-4.8/phonon-overview.html –

답변

0

하나의 일반적인 솔루션은 텍스처 매핑과 함께 QGL 위젯을 사용하는 것입니다. 응용 프로그램은 첫 번째 프레임에 텍스처 버퍼를 할당 한 다음 나머지 프레임에서 텍스처를 업데이트합니다. 이것은 순수 GL 호출입니다. Qt는 아직 텍스처 조작을 지원하지 않습니다. 그러나 QGLwidget은 컨테이너로 사용할 수 있습니다.

디코딩은 SSE2를 사용하여 수행되었습니다. 희망이 도움이됩니다.