Библиотека сайта rus-linux.net
Фреймворк GStreamer. Руководство разработчика плагинов. Поддержка динамических параметров
Оригинал: 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 г.
Перевод: А.Панин
Дата перевода: 29 июля 2014 г.
Внимание, в данной главе описывается методика работы с версией 0.10 фреймворка GStreamer, которая на данный момент является устаревшей.
В некоторых случаях механизм свойств объектов не является достаточно мощным механизмом для управления параметрами, влияющими на поведение вашего элемента. В таких ситуациях вы можете объявить необходимые параметры как динамические. После этого разработанные специальным образом приложения смогут использовать подсистему динамических параметров для динамического изменения значений свойств вашего элемента с течением времени.
20.1. Начало работы
gstcontroller
. Вам придется подключить следующие заголовочные файлы к исходному коду вашего элемента:
... #include <gst/gst.h> #include <gst/controller/gstcontroller.h> ...
gstcontroller
и должна быть связана с результирующим приложением, вам в любом случае придется убедиться в том, что она инициализируется в рамках функции инициализации вашего плагина plugin_init
аналогичным образом:
static gboolean plugin_init (GstPlugin *plugin) { ... /* Инициализация библиотеки подсистемы динамических параметров */ gst_controller_init (NULL, NULL); ... }
GST_PARAM_CONTROLLABLE
при инициализации свойств объектной модели GObject в рамках метода инициализации класса _class_init
.
g_object_class_install_property (gobject_class, PROP_FREQ, g_param_spec_double ("freq", "Частота", "Частота тестового сигнала", 0.0, 20000.0, 440.0, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
20.2. Цикл обработки данных
gst_object_sync_values(element,timestamp);
Этот вызов выполняет все изменения значений параметров для заданной метки времени, изменяя значения свойств объектной модели GObject элемента. Установка частоты синхронизации изменений значений свойств выполняется самим элементом.
20.2.1. Цикл обработки данных для элементов, работающих с видеопотоками
При разработке элементов, работающих с видеопотоками, лучшее решение заключается в синхронизации изменений значений параметров элемента при обработке каждого из кадров. Это значит, что вызов описанной в предыдущем разделе функции синхронизации изменений значений параметров gst_object_sync_values()
должен быть добавлен в функцию обработки данных элемента.
20.2.2. Цикл обработки данных для элементов, работающих с аудиопотоками
В случае разработки элементов, работающих с аудиопотоками, дела обстоят не так просто, с элементами, работающими с видеопотоками. Проблема состоит в том, что интенсивность передачи сэмплов аудиопотока значительно выше. Например, в случае работы с видеопотоком формата PAL приходится обрабатывать 25 полных кадров в течение секунды, но за это же время в случае работы со стандартным аудиопотоком придется обработать 44100 сэмплов. Такая частая синхронизация изменений значений динамических параметров является эффективной лишь в некоторых редких случаях. Простейшим решением является однократная синхронизация изменений значений динамических параметров для каждого обрабатываемого буфера данных. В этом случае интенсивность операций синхронизации изменений значений динамических параметров будет напрямую зависеть от размера буфера данных.
При реализации элементов, для работы которых требуется осуществление синхронизации изменений значений динамических параметров с определенной интенсивностью, придется разделить цикл обработки данных на этапы и осуществлять синхронизацию изменений значений динамических параметров после обработки каждых n сэмплов.
Следующий раздел : Интерфейсы.