Библиотека сайта rus-linux.net
Фреймворк GStreamer. Руководство разработчика приложений. Динамически изменяемые значения параметров объектов
Оригинал: GStreamer Application Development ManualАвторы: Wim Taymans, Steve Baker, Andy Wingo, Ronald S. Bultje, Stefan Kost
Дата публикации: 21 мая 2014 г.
Перевод: А.Панин
Дата перевода: 21 июня 2014 г.
Глава 16. Динамически изменяемые значения параметров объектов
16.1. Начало работы
В рамках подсистемы изменения значений параметров объектов реализован легковесный, использующий метки времени механизм установки значений свойств объектов системы gobject в процессе обработки мультимедийного потока. В обычных условиях значения свойств изменяются с помощью функции g_object_set()
. Изменение этих значений свойств с высокой скоростью, сопоставимой со скоростью обработки мультимедийного потока, для оказания непосредственного воздействия на его параметры практически невозможно. Контроллер учитывает время. Он функционирует, соединяя источники значений со свойствами с помощью привязок управления. Источники значений предоставляют значения для заданной метки времени, обычно находящиеся в диапазоне от 0.0 до 1.0. Привязки управления ставят в соответствие управляющим значениям свойства системы gobject, с которыми они связаны - выполняется преобразование типов и масштабирование целевого значения до диапазона значений свойства. В процессе работы все элементы постоянно передают данные об изменениях значений для заданного времени потока с целью обновления значений свойств системы gobject. Фреймворк GStreamer уже содержит несколько различных источников значений и привязок управления, но приложения могут объявлять свои собственные источники значений, создавая подклассы для соответствующих базовых классов.
gstcontroller
. Для их использования вам придется подключить следующие заголовочные файлы к исходному коду вашего приложения:
... #include <gst/gst.h> #include <gst/controller/gstinterpolationcontrolsource.h> #include <gst/controller/gstdirectcontrolbinding.h> ...
При этом ваше приложение должно связываться с разделяемой библиотекой gstreamer-controller
. Требуемые для компилятора и линковщика флаги могут быть получены с помощью инструмента pkg-config после передачи названия пакета gstreamer-controller-1.0.
16.2. Настройка механизма изменения значений параметров объектов
csource = gst_interpolation_control_source_new (); g_object_set (csource, "mode", GST_INTERPOLATION_MODE_LINEAR, NULL);
gst_object_add_control_binding (object, gst_direct_control_binding_new (object, "prop1", csource));
Источник значений данного типа получает новые значения свойств из списка изменений параметров с метками времени. Источник может, к примеру, убрать тишину при воспроизведении звука, сгладив изменения параметров. Данное поведение может быть настроено путем установки значения свойства режима источника значений. Другие источники значений, к примеру, могут формировать поток значений, вызывая функцию sin()
для получения значений. Так как источники значений сами являются объектами типа GstObject, другие источники значений также могут быть связаны с описанными свойствами.
GstTimedValueControlSource *tv_csource = (GstTimedValueControlSource *)csource; gst_timed_value_control_source_set (tv_csource, 0 * GST_SECOND, 0.0); gst_timed_value_control_source_set (tv_csource, 1 * GST_SECOND, 1.0);
Теперь все готово для начала проигрывания мультимедийного потока. В том случае, если источник значений, к примеру, связан со свойством, задающим уровень звука, мы услышим эффект постоянного повышения звука в течение 1 секунды. Небольшое предупреждение: элемент изменения уровня звука, поставляемый в составе фреймворка GStreamer, имеет диапазон значений свойства, задающего уровень звука, от 0.0 до 4.0. В том случае, если описанный выше источник значений связывается с этим свойством, уровень звука будет повышен до 400 %.
Одно заключительное замечание: подсистема изменения значений параметров объектов может работать в режиме реального времени. Несмотря на это, значение свойства системы GObject, с которым связан источник значений, может быть изменено и с помощью функции g_object_set()
. Это очень полезно в случае связывания свойств системы GObject с виджетами графического интерфейса. В момент, когда пользователь изменяет значение свойства с помощью виджета, может быть установлено значение свойства системы GObject, которое будет активно до того момента, когда следующий запрограммированный источник значений изменит его. Этот подход также работает при использовании нормализованных параметров. Он не работает с источниками значений, которые постоянно изменяют значение свойства (например, lfo_control_source).
Следующий раздел : Программные потоки