Qt 동영상 관련하여..

alwaysrainy의 이미지

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 부하를 줄여야 하는데, 사소한 자료라도 답변 부탁드리겠습니다.

klara의 이미지

OpenGL 가속이 되는 환경인가요?

alwaysrainy의 이미지

glxinfo 쳤을때 direct rendering: Yes로 되어 있는거 봐서는 되는 것 같은데요..
다르게 확인하는 방법이 또 있나요?

---------------------------------------
세계는 넓고, 할일은 많다.

---------------------------------------
세계는 넓고, 할일은 많다.

la9527의 이미지

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

alwaysrainy의 이미지

Quote:
간단한 소스가 필요하시다면 올려드리도록 하겠습니다.

ㄴ ㅔ ~ 공개 가능한 범위에서 부탁 좀 드리겠습니다 ^^;
메일로 주셔도 감사하겠습니다. ( alwaysshiny _닷_ gmail.com )

---------------------------------------
세계는 넓고, 할일은 많다.

---------------------------------------
세계는 넓고, 할일은 많다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.