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进行交集就可以了。

Gstreamer中caps的intersect相关推荐

  1. Gstreamer中pad的链接

    Gstreamer中的pad根据输入输出方向,有src和sink两种.根据pad创建的时机,有always pad.sometimes pad.request pad,这样不同的pad,链接方式就不同 ...

  2. Gstreamer中的视频处理与硬件加速

     点击上方"LiveVideoStack"关注我们 ▲扫描图中二维码或点击阅读原文▲了解音视频技术大会更多信息 // 编者按:Gstreamer作为一个比较流行的开源多媒体框架,其 ...

  3. gstreamer 中link步骤

    最近在看gstreamer中的link,下面是应用代码中的一段: if (gst_element_link_many(data.source, data.h264parse, data.omx264d ...

  4. gstreamer中h264对齐方式au和nal

    在gstreamer中,h264的格式有: static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src&q ...

  5. Gstreamer中一些gst-launch常用命令

    Gstreamer中一些gst-launch常用命令 用Linux系统中使用gstreamer架构做对媒体开发时,gst-inspect和gst-launch是两个非常使用的小工具,gst-inspe ...

  6. linux gst-launch 播放视频旋转,【视频开发】Gstreamer中一些gst-launch常用命令

    GStreamer是著名的开源多媒体框架,功能强大,其命令行程序 gst-launch 可以实现很多常规测试.播放等,作为系统调试等是非常方便的. 1.摄像头测试 gst-launch v4l2src ...

  7. 【gstreamer中appsink和appsrc操作数据转换cv::Mat】参考文献

    文章目录 参考文献 gstreamer知识入门 重点推荐 其他参考 参考文献 gstreamer知识入门 通用的gstremer知识入门 GStreamer流媒体知识介绍 详细的GStreamer开发 ...

  8. Gstreamer 中的playback插件

    1. PLAYBACK插件基本介绍 在早期的版本中同时存在playbin和playbin2,但是在最新的版本中,playbin2已经稳定,取代了playbin, playbin不再进行维护.下面是官网 ...

  9. mac 中 caps lock和control键交换,以及alt键替换option方法

    第一次使用mac,发现键盘都不会使用 一.习惯使用emacs编辑器,control键和caps lock键必须交换位置 1.首先进入"系统偏好设置" 2.点击"键盘&qu ...

最新文章

  1. django基础(一)
  2. 20165219王彦博《基于Cortex-M4的虚拟机制作与测试》课程设计个人报告
  3. 【转】MySQL实现Oracle里的 rank()over(ORDER BY) 功能
  4. 20162330 刘伟康_预备作业03
  5. 计算机专业合成词,大学计算机论文范文大全.docx
  6. android studio gradle下载
  7. 判断一个数是不是质数(素数)
  8. CentOS 出现 No packages marked for update
  9. 计算机任务管理器设置软件启动,电脑软件开机自动启动,教你一招禁止启动,能够有效提升开机速度...
  10. 毕业/课程设计——基于STM32的智能灯光控制系统(物联网、智能家居、手机APP控制、语音控制)
  11. .Net Core 使用UDP协议实现即时通讯
  12. 【MySQL】这是我见过最有用的MySQL数据类型面试题,面了无数家总结的
  13. php登陆网页版微信代码,几行php代码实现微信自动注册登陆 (微信PC扫码受权登陆注册)...
  14. 成功解决WIN系统如何更改默认放在C盘的【我的文档】/【图片】位置的存储路径(修改到其它非系统的盘符)
  15. python多线程url采集器 + github_利用Python3.5多线程抓取妹子图
  16. C语言小游戏之五子棋
  17. 非上市公司的期权激励方案
  18. 如何设置关注微信公众号送红包功能?
  19. 数组2——查找第k小元素
  20. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java基于的牧场管理系统6ui1j

热门文章

  1. npm WARN tarball tarball data for xxxx@^0.25... npm项目依赖安装卡住,报错,尝试多次无果的解决方法
  2. AttitudeFactor.h/AttitudeFactor.cpp
  3. 学习vb知识的方法总结
  4. 【8.8】代码源 - 【不降子数组游戏】【最长上升子序列计数(Bonus)】【子串(数据加强版)】
  5. Random随机生成几位数字和UUID随机生成几位字母加数字组合
  6. SQL 获取 weekday
  7. 微信公众平台推数据统计功能 商业价值可量化
  8. LV.5 进程、线程和进程间通信
  9. jpa 托管_jpa深入
  10. Java工程师成神之路:进阶架构师的学习路线规划以及书籍推荐