Наши партнеры

UnixForum





Библиотека сайта 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. Приложения.