問題タブ [openmax]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - RTP 経由の H.264 ストリーミング (Raspberry Pi)
H.264 ビデオをストリーミングするための RTP プロトコルの使用についてサポートが必要です。Raspberry PI(B+) とカメラ モジュールがあります。Raspberry PI には、H.264 用のハードウェア エンコーダーがあります。
ただし、プレーヤーは RTP ストリームを再生できません: ビデオに遅延があり、画像が非常に悪いです:

この問題が理解できません。
ストリーム H.264 があります:
このストリームを別の RTP パケットに配置します。プレイ中の VLC のログ:
ハードウェア エンコーダーへのアクセスには、OpenMax を使用します。エンコーダーのコードの一部:
関数に送信するエンコーダーからの結果データ、以前は開始コード (00 00 00 01) を削除しました。
RTP への記述関数パッキング:
android - Mediabuffer によって保存された yuv サイズのサイズを取得します
私は OpenMax を使用してビデオ フレームをデコードしています。私のサンプルは次のようなものです。
出力は次のようになります。
私の質問は、1280 x 736 (ストライドは 32 だと思います) x 1.5 = 1413120 であるため、MediaBuffer によって格納されている yuv の実際のサイズを知る方法ですが、mVideoBuffer の range_length() は 1417216 です。yuv サイズを取得できる正規のものはありません。 、助けてください、ありがとう!
android - stagefright メディア プレーヤーで OpenMAX ソフトウェア ビデオ デコーダ コンポーネントを作成して移植する方法は?
このリンクと他のいくつかのリンクも確認しましたが、
- クロノス
- OpenMax_Development_Guide
- bellagio_openmax_il_open_source_implementation_enables_developers_to_create
しかし、それらはすべて、呼び出しシーケンスがどのようになっているのか、ブロック図の写真などを説明しているだけで、openmax コンポーネントを作成して構築し、それを Android にプラグインする方法については説明していません。Android のビルドと移植のリンクでさえ複雑であり、openmax プラグインまたは Android ソース コードの一部を記述およびビルドするにはソース コード全体が必要になるか、Android ソース コードがなくても作成できることは説明されていません。
hevc ハードウェア デコーダをサポートするホタル K3288 ボードを使用しandroid OS Kitkat 4.4ていますが、hevc ソフトウェア デコーダを追加したいと考えています。
openmax hevc ビデオ デコーダ コンポーネントを記述してビルドし、それを Android にプラグインする方法を知っている人がいる場合は、指示を出してください。
video - gst-omx と gst-openmax の違いは何ですか?
Google で と を検索gst-omxしgstopenmaxていますが、2 つのプラグインの機能は同じように思えます。gst-omxとの関係がわかりませんgstopenmax。個々のドキュメントによると:
gst-openmax は、OpenMAX IL コンポーネントとの通信を可能にする GStreamer プラグインです。
gst-omx は、利用可能な OpenMAX IL コンポーネントをラップし、標準の GStreamer 要素として利用できるようにするプラグインを含むモジュールです。
以上の2点で、OpenMAX ILラッパーの実装だと思います。OpenMAX IL の同じラッパーであるのに、なぜ 2 つの方法で実装するのですか? 誰でも私に何か考えがあります。この問題を説明していただきありがとうございます。
c++ - RPi2、OpenMAX、デッドロック
環境
- ラズベリーパイ2B+
- Debian Linux
- OpenMAX IL
使用事例
- OpenMAX カメラ ビデオ キャプチャ
- カメラ ポートが無効になっています
- Renderer / Camera Tunnel を設定
- すべてのコンポーネントの状態が Idle に設定されています
- ポートが有効になっています
問題の説明
最初のポートはカメラ入力ポート (ポート #73) に対して有効になっています。このポートは、「OMX_CommandPortEnable」コマンドを使用して有効にされています。「OMX_CommandPortDisable」コマンドと同様に、カメラ コンポーネントが「OMX_CALLBACKTYPE::」を起動することが期待されます。 「eEvent == OMX_EventCmdComplete」および「nData1 == OMX_CommandPortEnable」を持つ EventHandler」イベント ハンドラーの場合、これは発生せず、アプリケーションはポートが有効になるまで無限に待機します。
問題分析
std::mutex と組み合わせて std::condition_variable を使用して、状態の変更が完了するのを待ちます。したがって、OMX_CALLBACKTYPE::EventHandler は条件変数を更新し、呼び出し側スレッドが std::mutex をロックしている間に「notify_one()」を呼び出します。このアプローチを使用して、条件変数が設定されるのを待ちます。「OMX_CALLBACKTYPE::EventHandler」は (引数を指定して) 呼び出されることはなく、プログラムは永久にロックされます。
注: ミューテックスが所有されていないことが検証される条件変数を待機する場合、これは (0 == std::mutex::__owner) を検証することによって行われます。
ただし、 usleepと OMX_GetParameter(OMX_IndexParamPortDefinition) を繰り返し呼び出してポートのステータスをポーリングすると、すべて正常に動作します。
手元にある質問
「OMX_CALLBACKTYPE::EventHandler」が値のポーリング時にトリガーされ、条件変数の使用時にトリガーされないのはなぜですか? Windows には APC & Alertable スレッドの概念がありますが、Linux に同等のものはありますか? 上記を説明できる人はいますか?
android - Androidのopenmax、OMX_BUFFERHEADERTYPEからyuvデータを取得する方法
「OMX_BUFFERHEADERTYPE」の構造体がデータバッファを運ぶことは誰もが知っています。フィールド「pBuffer」はデータ バッファを指し、「nFilledLen」は現在バッファ内にあるバイト数を意味します。"OMX.cpp" の "OnFillBufferDone()" から yuvdata をダンプしようとしましたが、ダンプされたデータは壊れていて不完全でした。コードは次のとおりです。
メソッドがyuvデータをダンプするのは間違っていますか?
yuv をダンプする方法を教えてください。ありがとう!!!!
c - OpenMax の uuid が 128 バイトなのはなぜですか?
OMX_Types.h には
すべてのビットを char に格納する必要がありますか? その場合、実際の数値 0,1 を使用するか、ASCII 文字 '0','1' を使用しますか?