Библиотека сайта rus-linux.net
Фреймворк GStreamer. Руководство разработчика плагинов. Разработка работающего по схеме N-к-1 элемента или мультиплексора
Оригинал: GStreamer Plugin Writer's GuideАвторы: Richard John Boulton, Erik Walthinsen, Steve Baker, Leif Johnson, Ronald S. Bultje, Stefan Kost, Tim-Philipp Muller, Wim Taymans
Дата публикации: 19 июля 2014 г.
Перевод: А.Панин
Дата перевода: 30 июля 2014 г.
Глава 25. Разработка работающего по схеме N-к-1 элемента или мультиплексора
Элементы, работающие по схеме N-к-1, упоминались и обсуждались ранее как в Главе 12, "Создаваемые по запросу и не постоянно доступные точки соединения", так и в главе под названием "Различные режимы планирования работы точек соединения элементов". Наиболее примечательная особенность работающих по схеме N-к-1 элементов заключается в том, что каждая точка соединения таких элементов работает в режиме передачи данных в отдельном программном потоке, причем работающий по схеме N-к-1 элемент синхронизирует потоки данных, пользуясь логикой ожидаемых меток времени. Это означает, что элемент позволяет в ходе передачи буферов с данными из всех потоков данных ожидать завершения передачи данных из того потока, который предоставляет значение ранней ожидаемой метки времени. После передачи буфера с данными из этого потока, производится расчет следующего значения ранней ожидаемой метки времени и начинается новый этап передачи данных, причем сам процесс передачи данных продолжается до того момента, когда будут достигнуты окончания всех потоков данных. Существует вспомогательный базовый класс, носящий имя GstCollectPads
, который может помочь вам в реализации описанного механизма работы элемента.
Однако, следует учесть тот факт, что данный вспомогательный класс поможет вам исключительно в захвате буфера из каждой входной точки соединения и передаст вам буфер данных с самым ранним значением метки времени. Если вам необходим какой-либо более сложный механизм, такой, как механизм захвата буферов данных начиная заданного значения метки времени и отбрасывания всех остальных буферов данных или какой-либо аналогичный механизм, вам придется реализовать его в полной мере самостоятельно.
Глава 26. Разработка элемента управления
GstBin
, с одной или несколькими виртуальными точками соединения. Внутри этих элементов размещаются элементы, выполняющие реальную работу. В некоторых ситуациях подобные элементы являются полезными. Например:
- При добавлении поддержки специальных событий со специальными функциями их обработки в другой элемент.
- При добавлении поддержки специальных обработчиков для объектов точек соединения
_query ()
или_convert ()
в другой элемент. - При добавлении специальной функции обработки данных перед функцией или после функции обработки данных другого элемента (как правило, для обработки данных элемент использует функцию цепочки
_chain ()
). - При встраивании элемента или наборов элементов во что-либо, выглядящее со стороны внешнего мира и работающее аналогично простому элементу. Это особенно полезно при реализации элементов для ввода или вывода данных с множеством точек соединения.
Реализация элемента управления настолько же проста, насколько выглядит на первый взгляд. Вы можете унаследовать класс элемента от класса контейнера GstBin
, после чего в большинстве случаев вы сможете произвести интеграцию необходимых элементов уже на уровне функции инициализации элемента _init ()
, включая функции настройки виртуальных точек соединения. Если вам необходимы какие-либо специальные обработчики данных, вы можете установить обработчики сигналов или интегрировать второй элемент, работу которого вы также сможете контролировать.
Следующий раздел : Часть V. Приложения.