Raspberry-Pi コードには、s5p-jpeg
コーデック ドライバーがあります。
drivers/media/platform/s5p-jpeg/jpeg-core.c
誰かがそれを使用する方法の例をどこで見つけることができるか教えてもらえますか? または、他の v4l2 コーデック ドライバーはありますか?
私はそれをグーグルで検索しましたが、v4l2 コーデック ドライバーを使用する例を見つけることができません。
Raspberry-Pi コードには、s5p-jpeg
コーデック ドライバーがあります。
drivers/media/platform/s5p-jpeg/jpeg-core.c
誰かがそれを使用する方法の例をどこで見つけることができるか教えてもらえますか? または、他の v4l2 コーデック ドライバーはありますか?
私はそれをグーグルで検索しましたが、v4l2 コーデック ドライバーを使用する例を見つけることができません。
(完全に異なるため、別の回答を追加します:-))
V4L2 仕様の「コーデック」API は、ハードウェア コーデックを指します。このようなコーデックは、次の機能を持つデバイスです。
ハードウェア コーデックが/dev/videoX
デバイスとして表示される
ユーザーランドアプリケーションがビデオストリーム(たとえば、JPEGでエンコードされたビデオフレームを含む)を送信できるビデオ入力があるため、V4L2_CAP_VIDEO_OUTPUT
機能があり、
ユーザーランドアプリケーションがビデオストリームを読み取ることができるビデオ出力があります-たとえば、圧縮されていないフレームを含む-から、それにもV4L2_CAP_VIDEO_CAPTURE
機能があります。
ビデオを v4l2 OUTPUT デバイスに書き込むことができるアプリケーションは数多くあります。私が知っているいくつかを次に示します。
私の知る限り、これらのアプリケーションには「v4l2 コーデック デバイス」を処理するための特定のコードはありませんが、v4l2 デバイスに対して書き込み/読み取りを行うことができます。必要なのはこれだけです。
v4l-utils.gitも確認してください: utils/v4l2-ctl/v4l2-ctl-streaming.cpp を見てください。
v4l2 は、フォーマットに関して非常に自由度が高いです。たとえば、キャプチャ デバイスは、事実上あらゆるフォーマットでフレームを配信できます。
したがって、ユーザーランド ツール (アプリケーション、ライブラリなど、カーネル ドライバーではなく) を作成している場合は、コーデックをいじってはいけません(回避できる場合)。世界中のすべてのアプリケーションが v4l2-stream を読み込もうとしていると想像してみてください。フレームをデコードするためのコードを追加して、コーデックSQ905C
やMJPEG
その他のコーデックを使用する必要があります (各アプリケーションは独自のバグのある実装セットを追加しています)。
代わりに、賢明な人々が、キャプチャ デバイスによって配信されたフレームを解凍し、これらのフレームを標準的な方法で提供するライブラリ libv4l2を作成しました。
ちなみに、独自のコードを書くことにこだわる場合libv4l2
は、良いリファレンス実装です。
ああ、カーネル空間のエンコーディング/デコーディングにモジュールを単純にロードすることを考えていた場合(たとえば、「XYZ」形式で画像を配信するウェブカメラ「foo」がありますが、「ABC」形式で画像を配信したいカーネルモジュールを追加する手段)、運が悪い。
Linus T. は、コーデック変換コードがカーネル空間内で実行されるべきではないことを非常に明確にしています [参照がありません]。