2012-01-13 4 views
5

カメラデバイスから画像を受け取り、GTKウィンドウに表示するアプリケーションを開発しています。C、GTK:60fps以下のRGB画像の表示ストリーム

カメラはさまざまなフレームレート(1〜50 fps)で生のRGB画像(ピクセルあたり3バイト、アルファチャンネルなし、固定サイズ)を配信します。

私はすでにそのハードウェアをすべて完了しており、カメラでキャプチャされたすべての新しい画像で呼び出されるコールバック関数を持っています。

これらの画像を私のウィンドウに表示するには、最も簡単で高速ですが、どのような方法がありますか?

は、ここで私はすでに試したものです:

  • 描画領域GTKにgdk_draw_rgb_image()を使用して:基本的には、働いていたが、描画処理が重なったことをとても遅いレンダリングされ、アプリケーションは最初の数フレーム後に墜落しました1 fpsのキャプチャレートでさえも。

  • それぞれの新しいフレームのためGdkPixbufのを割り当てるとGTKの画像ウィジェットにgtk_image_set_from_pixbuf()を呼び出すには:最初のフレームのみを表示し、その後、私は、ウィンドウに変化は見られません。私のコードのバグかもしれませんが、それが十分に速いかどうかはわかりません。 カイロcairo_set_source_surface()、その後、cairo_paint())を使用して

  • は:画像フォーマットに対応している場合はかなり速いように見えたが、画像が縞模様に見えた、分かりません。

現在、私はgstreamerのような何かをしようとすると、ビデオストリームのようにこれらの画像を処理することを考えているが、私は、これは私の単純なメカニズムのためにやり過ぎのようなものであるかどうかはわかりません。

アドバイスを事前にいただきありがとうございます!

+0

カイロは、32ビットワードでCAIRO_FORMAT_RGB24イメージサーフェスピクセルを定義しているため、リトルエンディアンマシンのメモリでは、ピクセルはBGR0BGR0になります。おそらく逆を使用しているか、0バイトを入れていません。ストリッピング。 – ergosys

+0

@lynix同じことをコード化する必要があります。ウェブカメラのフィードを取得する方法をカイロに教えてもらえますか? – inckka

+0

@inckka:それ以来4年経ちましたが、あなたの質問は誰もあなたに正確な答えを与えるにはあまりにも一般的です。私の具体的な問題は解決されました(この方法ではhttp://pastebin.com/QMCgaaUT)。 – lynix

答えて

4

GdkRGB API全体が廃止されているようですので、これを解決するには推奨されない方法でしょう。

render a pixbufと同じです。ドキュメンテーションはカイロを指しているので、カイロによってレンダリングされたときにイメージが正しく表示されなかった理由を調べ続けることが解決策のようです。

+0

ありがとう、これはなぜGdkRGB用の完全なチュートリアルを見つけることができなかったのかを説明するものです。 カイロと一緒に行くつもりですが、50fpsで十分に速いかどうか疑問に思っています – lynix

1

あなたがGTK2とGTK3で動作するものを望むなら、カイロは行く方法です。あなたのサンプルはアルファなしのRGBですので、CAIRO_FORMAT_RGB24フォーマットを使用してください。ペイントする面がその形式になっていることを確認してください。また、入力イメージが同じサイズを保持している場合は、サーフェスバッファを常に割り当て/破棄していないことを確認してください。

+0

ありがとう、私はカイロで実装を開始しました。 – lynix

+0

私はstackoverflowを初めて使ったので、ここでカイロに出会った問題や新しいスレッドで発生した問題を解決する方法について質問しますか? :) – lynix

+0

@lynix新しい質問がある場合は、新しい質問を投稿してください。スタックオーバーフローは「スレッド」ではなく* questions *に基づいています。ディスカッションフォーラムではありません。 – unwind

関連する問題