[Из песочницы] Знакомство с GStreamer: инициализация

imageЧуть больше года назад пользователь POPSuL опубликовал серию статей (1, 2 и 3) о мультимедийном фреймворке GStreamer (за что ему огромное спасибо). Я бы хотел продолжить его начинание, сделав больший упор на кодовую составляющую, нежели на инструменты командной строки, входящие в состав GStreamer.

В данной статье я расскажу о самой первой операции при работе с фреймворком — инициализации. А в качестве закрепления материала мы напечатаем версию GStreamer.

Среда разработкиПример из статьи выполнен в Ubuntu 14.04 c установленным GStreamer версии 1.2.4. Компиляция выполняется следующим образом: $ gcc -Wall -o source source.c $(pkg-config --cflags --libs gstreamer-1.0) Также в исходном файле должен быть подключен заголовочный файл: #include Инициализация Перед использованием библиотек GStreamer их нужно инициализировать. Для этого существуют две функции: void gst_init (int *argc, char **argv[]) gboolean gst_init_check (int *argc, char **argv[], GError **err) Обе они подготавливают внутреннюю структуру библиотек к использованию и подгружают стандартные плагины. Разница лишь в том, что при невозможности инициализации gst_init () прервет выполнение вашей программы, а gst_init_check () вернет FALSE и отправит отчет в структуру GError.Деинициализация Вообще процесс деинициализации (т.е. освобождения ресурсов) происходит автоматически, когда программа завершает свою работу. Однако нелишним будет знать, что можно сделать это и вручную, с помощью функции: void gst_deinit (void) Это может понадобиться при отладке приложения, например для поиска утечек.Важно! После деинициализации никаких обращений к библиотеке GStreamer быть не должно (кроме, разумеется, повторной инициализации).

Практика Для закрепления теоретического материала напишем приложение, которое выводит версию библиотеки GStreamer. В данном контексте существует два понятия версии: версия GStreamer, с которой приложение слинковано в данный момент (runtime-версия) версия GStreamer, использованного при компиляции приложения (compile-time-версия) Для первого варианта используются функции: void gst_version (guint *major, guint *minor, guint *micro, guint *nano) gchar * gst_version_string (void) Для второго варианта используются следующие макросы: GST_VERSION_MAJOR GST_VERSION_MINOR GST_VERSION_MICRO GST_VERSION_NANO Насчет nano: 0 — это релизы, 1 — GIT-версии, 2 -… — пререлизы.Все вышесказанное сведено в следующий пример:

#include int main (int argc, char * argv[]) { const gchar *nano; guint major, minor, micro, nano_int;

/* Инициализация GStreamer, игнорируя любые аргументы */ gst_init (NULL, NULL); if (gst_is_initialized ()) g_print («GStreamer library successfully initialized\n»);

/* Выводим версию при компиляции */ if (GST_VERSION_NANO == 0) nano = »; else if (GST_VERSION_NANO == 1) nano = »(GIT)»; else nano = »(Prerelease)»; g_print («Compile time version: %d.%d.%d %s\n», GST_VERSION_MAJOR, GST_VERSION_MINOR, GST_VERSION_MICRO, nano);

/* Выводим runtime-версию */ gst_version (&major, &minor, &micro, &nano_int);

if (nano_int == 0) nano = »; else if (nano_int == 1) nano = »(GIT)»; else nano = »(Prerelease)»; g_print («Runtime version: %d.%d.%d %s\n», major, minor, micro, nano);

/* Выводим runtime-версию в виде готовой строки */ g_print («String runtime version: %s\n», gst_version_string ()); return 0; } Компилируем и запускаем: $ gcc -Wall -o source source.c $(pkg-config --cflags --libs gstreamer-1.0) $ ./source Результат: GStreamer library successfully initialized Compile time version: 1.2.4 Runtime version: 1.2.4 String runtime version: GStreamer 1.2.4 Заключение В следующей статье постараюсь подробно описать процесс создания элементов и компоновки из них конвейера (pipeline), а в практическом разделе попробуем создать что-нибудь поинтереснее.Материалы по теме GStreamer Application Development ManualGStreamer 1.0 Core Reference Manual

© Habrahabr.ru