我正在按照 GStreamer Plugin Writer's Guide 开发一个 GStreamer 插件,并使用 gst-plugins-bad 存储库中的 gst-element-maker 并将基类设置为 basetransform。作为起点,我开发了一个名为 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 !扑通扑通!音频转换!音频重采样!我的过滤器!阿尔萨西克
从由 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, "
"有符号 = (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-element-maker 在 gst_myfilter_base_init() 中创建的默认代码设置焊盘帽,使用:
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。