Can';t转换自定义gstreamer插件中的大写字母

Can';t转换自定义gstreamer插件中的大写字母,c,gstreamer,C,Gstreamer,我正在编写一个gstreamer(1.x)插件,它将自动增益应用于视频帧。它将转换为灰色16_LE->灰色8 我首先在gst-plugins-bad-1.3.2/tools中运行gst元素生成器工具,并使用videofilter模板 如果我将src和sink pad caps设置为“{GRAY8,GRAY16_LE}”,我可以运行以下管道: gst-launch-1.0 videotestsrc ! video/x-raw,format=GRAY16_LE ! videoautogain ! v

我正在编写一个gstreamer(1.x)插件,它将自动增益应用于视频帧。它将转换为灰色16_LE->灰色8

我首先在gst-plugins-bad-1.3.2/tools中运行gst元素生成器工具,并使用videofilter模板

如果我将src和sink pad caps设置为“{GRAY8,GRAY16_LE}”,我可以运行以下管道:

gst-launch-1.0 videotestsrc ! video/x-raw,format=GRAY16_LE ! videoautogain ! videoconvert ! autovideosink

但是,它在src和接收器上使用相同的封盖(在本例中为灰色)。如果将sink caps更改为“{GRAY16_LE}”,将src caps更改为“{GRAY8}”,则连接管道时会出现错误。我想我可能需要实现GstBaseTransform->transform\u caps函数,但我不确定,也不知道应该如何实现它,以便在两个焊盘上强制使用静态但不同的caps。有人能给我指出正确的方向吗?

我能在gst-plugins-bad-1.3.2/ext/opencv/gstcvsobel.c插件中找到一个简单的例子,说明我需要做什么(尽管是在GRAY8->GRAY16\u LE方向,而不是GRAY16\u LE->GRAY8方向)。现在效果很好