Qt 동영상 관련하여..
글쓴이: alwaysrainy / 작성시간: 화, 2009/08/25 - 5:22오후
QImage t ; myViewer::myViewer(QWidget *parent, int w, int h) : QGLWidget(parent) { setFormat(QGLFormat(QGL::DepthBuffer|QGL::DoubleBuffer|QGL::DirectRendering)) ; img = new QImage(w, h, QImage::Format_RGB555) ; resize(img->size()) ; } myViewer::~myViewer() { } void myViewer::resizeGL(int w, int h) { glViewport(0, 0, (GLint)w, (GLint)h ); glMatrixMode(GL_PROJECTION) ; glLoadIdentity(); glOrtho(0, w, 0, h, -1, 1); glMatrixMode(GL_MODELVIEW) ; } void myViewer::paintGL() // 쓰레드에서 프레임 수신 시 Signal/Slot 으로 호출. { glDrawPixels(img->width(), img->height(), GL_RGBA, GL_UNSIGNED_BYTE, t.bits()) ; } void myViewer::cpByteArr(unsigned char *aucFrameBuf, int nLen) // 쓰레드에서 프레임 수신 시 수신 데이터를 복사 { memcpy(img->bits(), aucFrameBuf, nLen) ; t = QGLWidget::convertToGLFormat(*img) ; }
화상 카메라로부터 16bit rgb Raw 데이터를 30 frames/sec를 수신하여 출력하는 프로그램입니다.
이전에 받은 답변을 따라 QOpenGL 위젯에 출력하여 개발하고 있으나, Cpu Overhead는 여전히 60% 정도 나옵니다.
위 코드는 프레임을 화면에 출력하는 부분입니다. 도무지 해결책이 보이지 않습니다.
프레임 수신 쓰레드에서 Signal/Slot로 update()를 호출하여 paintGL() 루틴까지 실행되며,
Signal/Slog 연결을 없애면 부하는 5% Under입니다.
Cpu 부하를 줄여야 하는데, 사소한 자료라도 답변 부탁드리겠습니다.
Forums:
OpenGL 가속이 되는
OpenGL 가속이 되는 환경인가요?
glxinfo 쳤을때 direct
glxinfo 쳤을때 direct rendering: Yes로 되어 있는거 봐서는 되는 것 같은데요..
다르게 확인하는 방법이 또 있나요?
---------------------------------------
세계는 넓고, 할일은 많다.
---------------------------------------
세계는 넓고, 할일은 많다.
QT를 쓴다면,
QT를 쓴다면, 임베디드 환경이 아닌, X11 환경에서라면
QtOpenGL보다는 X11의 Xv 라이브러리를 활용하는 것이 더 나은 방법이라고 생각됩니다.
저도 USB에서 캠 데이터를 OpenGL로 보긴했는데,
VIA C7 1.5Ghz에서 CPU를 많이(50~60%) 차지하게 되더군요.
3D 성능이 그렇게 좋지 않았기 때문이라고 생각해서 다른방법을 찾은 결과,
하드웨어 드라이버만 X11에 올려주고, Xv 라이브러리를 이용하니, 10% 미만으로
낮춰지더군요. 문제는 Xv를 Qt 자체에서는 바로 이용하기가 까다로웠습니다.
좀 트릭이 존재해야 했구요. 이래저래 찾은 결과 KDE 쪽 movie Player 인 KPlayer (KDE3용)에서
좋은 부분을 찾았습니다. Xine 라이브러리를 KDE 와 연동하는 부분에서 좋은것을 찾아 내었는데요.
(KXineWidget class가 해당될 것입니다.)
Qt4 및 Qt3가 조금 달라서 좀 애를 먹긴 했습니다. ^^; (저는 Qt4를 이용했음)
이번에 KDE4를 들어서는 아직 베타버전이긴 하지만, QtOpenGL로 쓴 부분도 있었습니다.
님도 그 부분을 좀 참고 하시는 것도 방법일 것 같습니다.
간단한 소스가 필요하시다면 올려드리도록 하겠습니다.
참고가 되었는지 모르겠네요. ^^
------------------------------
http://www.linm.org
https://github.com/la9527
인용:간단한 소스가
ㄴ ㅔ ~ 공개 가능한 범위에서 부탁 좀 드리겠습니다 ^^;
메일로 주셔도 감사하겠습니다. ( alwaysshiny _닷_ gmail.com )
---------------------------------------
세계는 넓고, 할일은 많다.
---------------------------------------
세계는 넓고, 할일은 많다.
댓글 달기