QT video frame viewer 관련 질문.
글쓴이: ar / 작성시간: 화, 2009/08/04 - 2:12오후
캠으로부터 704 x 576, raw(rgb24, 10fps) 데이터를 받아들여 이를 픽셀에 직접뿌리고자 합니다.
현재 구조로는
aucBuf에 프레임 데이터를 받아들여
memcpy(image->bits(), aucBuf, BUF_SIZE); QPixmap pmap = QPixmap::fromImage(*image, Qt::AutoColor) ; label1->setPixmap(pmap); label1->show(); label1->repaint() ;
이런 구조로 뿌려주는데.. 생각보다 딜레이가 심해서 7-8 fps 밖에 못뿌리고 있습니다. -_-;;
ubuntu 가 설치되어 있는 상태이고, X윈도(Gnome) 역시 설치되어 있습니다.
질문 1. fromImage, repaint 메소드에서 100ms 이상의 딜레이가 발생하고 있습니다.
cpu 부하 역시 50%를 넘기고 있고요.. 보다 빠른 방법이 없을까요?
질문 2. frame buffer에 관련한 자료를 찾아보니 qt/embedded 에서만 사용가능하다고 하는 것 같은데..
현 시스템에서 사용이 가능한 것인지요?
레퍼런스 자료나 사이트 알려주시면 감사하겠습니다. ㅡ.ㅜ
Forums:
Xv같은 별도의
Xv같은 별도의 라이브러리를 쓰지 않고, Qt만으로 직접 동영상을 뿌려줄려면 OpenGL(QGLWidget)을 이용하는수밖에없습니다.
라벨을 이용하지 마시고 직접 QGLWidget에 그려보세요.
그리고 repaint는 웬만해서는...이라기보다는 절대로 이용하지 않는게 좋습니다. update를 쓰세요.
사실 적으신 코드의 경우는 픽스맵을 지정하면 자동으로 갱신되므로 애시당초 repaint가 필요없지만요.
이미지를 받아와서 update를 호출하고 paintGL혹은 paintEvent에서 이미지를 그리면됩니다.
그리고 이미지를 버퍼로부터 복사해오는 과정이 있는데, 만약 버퍼에 할당된 메모리 해제가 이쪽에서 조절할 수 있다면, QImage의 생성자에 직접 버퍼를 넘겨주어서 복사에 드는 시간도 벌수 있습니다.
repaint 메쏘드를
repaint 메쏘드를 사용하지 않으면.. fps는 최대값에 근접하나..
정상적으로 frame을 화면에 뿌리지 못하는데요.. OpenGL에 대해서
잘 몰라서 질문드립니다. 제가 아는바로는 OpenGL은 3D를 뿌릴때
최적화하여 뿌릴 수 있는 라이브러리가 아닌지요? 단순 frame를 뿌릴때는
2D인데.. 어떠한 효과가 있나요?
하드웨어에서
하드웨어에서 지원한다면 3D도 2D도 모두 가속됩니다.
repaint는 이벤트루프를 거치지 않고 직접 paintEvent를 호출합니다.
동영상 나가는 동안에 GUI관련 컨트롤이 정상적으로 작동하나요?
fps가 낮아서 그럴지도 모르겠습니다만, 일반적인 30fps정도의 동영상을 repaint로 했을때 거의 바로 죽어버린 기억이 납니다.
-
-
댓글 달기