gstreamer,gstbasetransform,从连接的SinkPad派生SrcPad Caps

时间:2016-01-26 12:44:57

标签: gstreamer

用例

  • 就地视频转换,源自 GstBaseTransformClass
  • 修正了Src / Sink模板(“video / x-raw,fourcc =(string){YV12,I420}”)
  • SrcPad分辨率应该在连接时从SinkPad分辨率导出,并且与SrcPad分辨率不同

预期行为

  • 在连接之前调用accept_caps(SinkPad)
    • accept_caps(sink衬垫)
      • 验证传入连接GstCaps
      • 使用'gst_pad_set_caps(SinkPad,modifiedCaps)'更新Sink大写字母
      • 返回true以批准Caps
    • accept_caps(sink衬垫)
      • 验证传入连接GstCaps
      • 返回true以批准Caps

观察到的行为

  • 调用accept_caps(SinkPad)
    • accept_caps(sink衬垫)
      • gst_pad_is_linked(SinkPad)返回true,即 SinkPad已经链接所以没有任何意义改变它的上限......

手头有问题

W /我的用例,只有在连接SinkPad后才能得出SrcPad分辨率,如上所示,'accept_caps'仅在接收器已经连接之后被称为,具有该说法,根据连接的SrcPad Caps动态设置SinkPad Caps的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

您的打击垫已根据您的模板video/x-raw, fourcc=(string){ YV12, I420 }进行关联,该模板不包含任何解析信息。

您应该覆盖transform_caps虚拟方法。它在accept_caps之前被调用,其目的是在[1]方向给定垫片和给定的帽子,在这个元素的另一个垫子上允许有什么帽子?&#34 ;所以在这里你可以改变你的分辨率。