Qt 동영상(이미지) 관련하여 질문 드립니다.

alwaysrainy의 이미지

아래의 질문에 답변으로 참고로 rgb 원형 프레임을 초당 25 frames OpenGL 위젯에
출력하고자 합니다. 질문을 정리하면 아래와 같습니다.

1. V4L을 사용하여 순차적으로 프레임을 얻고자 합니다. getFrame_thr(프레임 읽어오기 쓰레드)만 돌렸을 때,
최대 15 frames를 읽어오고 있고, CPU 부하는 7% 언더입니다. 물론 화상 카메라는 그 이상의(30 frames/sec)
스펙을 가지고 있습니다. 보다 많이 얻어올 수는 없을런지요?

2. 15 프레임을 출력하고자 할 때 300 x 200 해상도에서는 모두 출력이 가능하고 부하는 CPU 30% 전후입니다.
700 x 600 해상도에서는 60% 전후 입니다. 프로그래밍 상의 문제 일까요? 접근이 잘못된 것인지요?
getFrame_thr 쓰레드에서 매 프레임마다 signal을 OpenGL 위젯에 날려 QImage.bit()에 복사해주는 구조 입니다.
질문 1의 내용을 차치하고서라도 CPU 부하가 너무 큰 것 같습니다.

3. Qt/X11 환경에서 개발중입니다. 기본적으로 X11 환경에서는 C/S 구조로 GUI 응용이 돌아가는 것으로
알고 있습니다. QT OpenGL을 보다보니 FrameBuffer나 pBuffer에 관련한 기능도 지원하는 것 같습니다.
이것이 이러한 환경에서 활용 가능한 기능이며, 가능하다 하였을 때 성능 개선에 도움이 될런지요?

* 추가적으로 Windows에서 개발한 응용에 비해 그 성능이 현저히 낮은 것 같습니다. 우선 제 개발 실력에 의한 것이
대부분일 것이라 시인하며, 그래픽 관련 Windows 응용과 QT 응용 비교 자료에 대해서 답변 부탁 드리겠습니다.

미리 답변에 감사드리며, 아주 사소한 지적이나 링크라도 감사하겠습니다.

klara의 이미지

동영상 재생이나 OpenGL자체에 대해서는 자세히는 모르지만, 제 경험으로 볼때는 너무 느리네요.
저는 QGLWidget으로 30fps이상의 동영상을 재생하고 있지만, CPU점유율은 10%전후입니다.
참고로 전 RGB가 아니라 YV12입니다. RGB포맷이 원래 느리긴 하지만, 그만큼의 차이가 날만큼인지는 모르겠네요...
혹시 개발환경 문제는 아니신가요? 하드웨어의 성능이 안좋거나, 드라이버의 성능이 안좋거나...
참고로 전 Core 2 Duo E6600, nVidia GeForce 7600 GS로, 드라이버는 nVidia에서 제공하는 드라이버를 이용하고 있습니다.
성능이 문제가 되는 경우는 Xv를 이용하는 쪽이 좋을듯합니다.

fbo나 pbuffer를 활용할 방법은 딱히 떠오르는게 없네요. off-screen 그리기가 필요한 경우는 아닌듯하구요.

valentis의 이미지

15 프레임이라고 하셨는데 읽어오는 영상의 크기에 따라서 카메라가 지원할 수 있는 것의 제한이 있을 수 있습니다.
특히 하드웨어에 따라서 다를 수 있는데 USB 1.0 지원이나 CPU에서 영상 처리시 지연이 발생해서 그럴 수 있을 것 같습니다.
영상 처리시 원래 CPU 부하를 많이 차지합니다. 영상이 커지면 커질수록 어쩔 수 없겠죠.
이를 위해서 CPU의 MMX 가속기능을 사용하시던지 아니면 어셈블러로 직접 코딩하시는 방식이 있을 것 같습니다.
Framebuffer를 사용하실 수 있겠지만 X 윈도우를 사용하신다면 프레임버퍼로 직접 출력하시는 프로그램을 만드시는 것은 별 의미가 없을 것 같습니다.
콘솔이나 임베디드에서 X 윈도우가 없기 때문에 프레임버퍼를 직접 사용하는 것이지 X 윈도우에서 프레임버퍼를 직접 사용하시면 X 윈도우와 충동일 발샐할 수 있습니다.

영상처리시 윈도우와 X 윈도우와 비교해서 큰 차이는 없을 것 같습니다. 다만 윈도우가 좀더 API가 정리가 잘 되어있기 때문에 편하게 느끼지 않으실까 생각됩니다.
Qt를 이용해서 출력하신다면 camstream과 같은 open source를 참고해보시는 것도 좋을 것 같습니다.

-------------------------------------

서영진 입니다.
Homepage : http://valentis.pe.kr
blog : http://www.lifeholic.com

-------------------------------------

서영진 입니다.
Homepage : http://valentis.pe.kr
blog : http://www.lifeholic.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 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 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>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 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>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 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>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.