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

Но, конечно, наличие специального элемента - лучшее решение для поддержки правильного согласования динамических ограничений.

Другие вопросы по тегам