GStreamer - своп цветовых каналов RGB-видео
Я новичок в GStreamer и пытаюсь поменять цветовые каналы RGB-видео. (например, красный на синий). Как я могу сделать это с gst-launch?
Я перехожу этот список, но не могу найти элемент для этого: http://gstreamer.freedesktop.org/documentation/plugins.html
1 ответ
Я написал теперь свой собственный элемент. Я использовал "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);
Вы можете обмануть GStreamer, заменив заглавные буквы:
gst-launch-1.0 -v videotestsrc! видео /x-raw, формат =RGBx! capssetter replace=true caps="video/x-raw, format=(string)BGRx, width=(int)320, height=(int)240, framerate=(дробь)30/1, multiview-mode=(string)" моно, соотношение сторон пикселя = (дробная часть)1/1, режим чересстрочной развертки = (строка) прогрессивная "! видеоконвертировать! ximagesink
Обратите внимание:
"ширина = (целое) 320, высота = (целое) 240, частота кадров = (дробная часть) 30/1, многовидовый режим = (строка) моно, соотношение сторон пикселя = (дробная часть)1/1, чересстрочный режим = (строка) прогрессивный "
являются настройками по умолчанию для videotestsrc
. Если вы, например, хотите другое разрешение, вам нужно объявить его дважды:
gst-launch-1.0 -v videotestsrc! видео /x-raw, формат =RGBx, ширина =640, высота =480! capssetter replace=true caps="video/x-raw, format=(string)BGRx, width=(int)640, height=(int)480, framerate=(дробь)30/1, multiview-mode=(string)" моно, соотношение сторон пикселя = (дробь)1/1, режим чересстрочной развертки = (строка) прогрессивный "! видеоконвертировать! ximagesink
Но, конечно, наличие специального элемента - лучшее решение для поддержки правильного согласования динамических ограничений.