5

GStreamer Plugin Writer's Guide に従って GStreamer プラグインを開発しており、基本クラスが basetransform に設定された gst-plugins-bad リポジトリの gst-element-maker を使用しています。出発点として、チェーンに沿ってデータを単純に渡す MyFilter という名前のプラグインを開発しました。プラグインは機能していますが、デバッグ レベルを 2 に設定して gst-launch を実行すると、次のエラーが発生します。

alsa gstalsa.c:124:gst_alsa_detect_formats: int 以外の形式をスキップしています。

私はコマンドを実行しています:

gst-launch --gst-debug-level=2 --gst-plugin-load=./src/libgstmyfilter.la filesrc location=./song.mp3 ! flmp3dec ! オーディオ変換!オーディオリサンプル!マイフィルター!アルザシンク

gst-element-maker によって作成された基本クラスから、gst_pad_new_from_static_template() への呼び出しを削除しました。これは、シンクとソース パッドが既に作成されていることを報告するエラーが返されたためです。gst_pad_set_chain_function() を使用してチェーン関数を設定しました。関数 gst_myfilter_transform_caps() を実装し、GST_EVENT_NEWSEGMENT イベントを処理するコードを追加しました。ソースとシンクに使用している STATIC_CAPS 文字列は次のとおりです。

"audio/x-raw-int, "
"rate = (int) { 16000, 32000, 44100, 48000 }, "
"channels = (int) [ 1, 2 ], "
"endianness = (int) BYTE_ORDER, "
" signed = (boolean) true, "
"width = (int) 16, "
"depth = (int) 16"

gst_pad_get_fixed_caps_func(GST_BASE_TRANSFORM_SRC[[/SINK]]_PAD(trans)) を使用して、gst_myfilter_transform_caps() からキャップを返します。パッド キャップは、以下を使用して gst_myfilter_base_init() で gst-element-maker によって作成されたデフォルト コードを使用して設定されます。

gst_element_class_add_pad_template(element_class, gst_static_pad_template_get(&gst_myfilter_sink_template));

GstBaseTransform クラスに問題はありますか? GstBaseTransform クラスを使用せず、この問題がない別のカスタム フィルターがあります。Ubuntu 12.04 で GStreamer v0.10.36 を使用しています。

4

0 に答える 0