我是GStreamer的新手,我尝试交换RGB视频的颜色通道。 (例如红色到蓝色)。我怎么能用gst-launch做到这一点?
我通过此列表但我无法找到要执行此操作的元素:http://gstreamer.freedesktop.org/documentation/plugins.html
答案 0 :(得分:1)
您实际上可以通过替换帽子来欺骗GStreamer:
gst-launch-1.0 -v videotestsrc! video / x-raw,格式= RGBx! capssetter replace = true caps =“ video / x-raw,format =(string)BGRx,width =(int)320,height =(int)240,framerate =(fraction)30/1,multiview-mode =(string) mono,pixel-aspect-ratio =(fraction)1/1,interlace-mode =(string)progressive“!视频转换! ximagesink
请注意:
“宽度=(整数)320,高度=(整数)240,帧频=(分数)30/1,多视图模式=(字符串)单声道,像素长宽比=(分数)1/1,隔行扫描-mode =(string)progressive“
是videotestsrc
的默认设置。例如,如果您想要另一个解决方案,则需要声明两次:
gst-launch-1.0 -v videotestsrc! video / x-raw,format = RGBx,width = 640,height = 480! capssetter replace = true caps =“ video / x-raw,format =(string)BGRx,width =(int)640,height =(int)480,framerate =(fraction)30/1,multiview-mode =(string) mono,pixel-aspect-ratio =(fraction)1/1,interlace-mode =(string)progressive“!视频转换! ximagesink
但是,为了支持适当的动态上限谈判,当然有专用的元素是更好的解决方案。
答案 1 :(得分:0)
我现在写了自己的元素。我使用“Colorflip”作为我的基本元素,将名称更改为“ChannelFlip”(您必须将所有方法从gst_video_flip_bla重命名为gst_channel_flip_bla并重命名结构)。 然后我就能用以下内容注册我的元素:
gst_element_register(NULL, "channelflip", GST_RANK_NONE, GST_TYPE_CHANNEL_FLIP);
然后我将我的枚举添加到GstChannelFlipMethod
,将我的属性添加到_GstChannelFlip
。将大写字母更改为“RGB”并将我的代码添加到gst_channel_flip_packed_simple
并在gst_channel_flip_transform_frame
而不是videoflip->process (videoflip, out_frame, in_frame);
中将其调用为:
GST_OBJECT_LOCK (videoflip);
//videoflip->process (videoflip, out_frame, in_frame);
gst_channel_flip_packed_simple(videoflip, out_frame, in_frame);
GST_OBJECT_UNLOCK (videoflip);