Gstreamer中caps的intersect

Gstreamer中caps的交集比较特殊,有一个函数是:gst_caps_intersect_full()

GstCaps *
gst_caps_intersect_full(GstCaps *caps1, GstCaps *caps2,
                        GstCapsIntersectMode mode)
{
  switch (mode)
  {
  case GST_CAPS_INTERSECT_FIRST:
    retCaps = gst_caps_intersect_first(caps1, caps2);
  case GST_CAPS_INTERSECT_ZIG_ZAG:
    retCaps = gst_caps_intersect_zig_zag(caps1, caps2);
  }
  return retCaps;
}

有两种模式,但是结果都一样,下面看一个案例:
caps1:

video/x-raw, \
format=(string){ NV16_10LE32, NV12_10LE32, NV16, YUY2, YVYU, UABGR, ARGB, GRAY8 }, \
width=(int)[ 1, 2147483647 ], \
height=(int)[ 1, 2147483647 ], \
framerate=(fraction)[ 0/1, 2147483647/1 ]

caps2:

video/x-raw, \
format=(string){ ABGR64_LE,  GRAY16_BE, GRAY10_LE32, GRAY8, NV16 }, \
width=(int)[ 1, 32767 ], \
height=(int)[ 1, 32767 ], \
framerate=(fraction)[ 0/1, 2147483647/1 ]; 

video/x-raw(ANY), \
format=(string){ ABGR64},\
 width=(int)[ 1, 32767 ], \
 height=(int)[ 1, 32767 ], \
 framerate=(fraction)[ 0/1, 2147483647/1 ]

它们俩的交集是:

video/x-raw, \
format=(string){ ABGR64_LE}, 
width=(int)[ 1, 32767 ], \
height=(int)[ 1, 32767 ], \
framerate=(fraction)[ 0/1, 2147483647/1 ]

从上面案例可以看出,交集首先是对每个caps中的gst_struct名称进行对比,名称一样的才进行 ,比如上面video/x-raw,,caps2中的video/x-raw(ANY)在caps1中没有同名称的gst_struct,所以直接就忽略了,然后只对caps1和caps2中的video/x-raw进行交集,交集的时候对内部相同的key进行交集,比如format交集以后就只有ABGR64_LE了,

要继续往下看,重点在后面
接着再看一个:
caps1:

video/x-h264, \
width=(int)[ 1, 2147483647 ], \
height=(int)[ 1, 2147483647 ], \
framerate=(fraction)[ 0/1, 2147483647/1 ]

caps2:

video/x-h264, \
alignment=(string)au, \
stream-format=(string)byte-stream, \
width=(int)[ 1, 2147483647 ], \
height=(int)[ 1, 2147483647 ]

它俩交集:

video/x-h264, \
width=(int)[ 1, 2147483647 ], \
height=(int)[ 1, 2147483647 ], \
framerate=(fraction)[ 0/1, 2147483647/1 ], \
alignment=(string)au, \
stream-format=(string)byte-stream

从结果看到两个video/x-h264的key进行了并集,就是说gst_caps_intersect_full(caps1,caps2,GST_CAPS_INTERSECT_FIRST)后交集是对同名称的key中的value进行交集,但是对于caps1和caps2中的key进行并集。

其实想想也是可以明白的,key多一点也没事,大不了不用,那就把caps1和caps2包含的所有key都包含进来,只对两个caps中的同key进行交集就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值