LINUX.ORG.RU

GStreamer создание плагинов. Проблема с интерфейсами.

 


1

2

Коллеги у меня возникла проблема при написании плагина для GStreamer. Проблема следующего характера. Я создал шаблон плагина, взяв его отсюда http://anongit.freedesktop.org/git/gstreamer/gst-template.git. Собрал это дело, и начал править. После исправлений пере собираю и смотрю на него gst-inspect:

$gst-inspect-1.0 --gst-plugin-path=$PWD watersign

(gst-plugin-scanner:3048): GStreamer-WARNING **: Failed to load plugin '/home/kozev/workspace/gst-template/gst-plugin/src/.libs/libgstplugin.so': /home/kozev/workspace/gst-template/gst-plugin/src/.libs/libgstplugin.so: undefined symbol: gst_watersign_get_type
No such element or plugin 'watersign'
Начинаю реализовать функцию gst_watersign_get_type и тут начинается самое интересное. Открываю документацию http://gstreamer.freedesktop.org/data/doc/gstreamer/head/pwg/html/chapter-adv... и смотрю:
static void	gst_my_filter_some_interface_init	(GstSomeInterface *iface);

GType
gst_my_filter_get_type (void)
{
  static GType my_filter_type = 0;
                                                                                
  if (!my_filter_type) {
    static const GTypeInfo my_filter_info = {
      sizeof (GstMyFilterClass),
      NULL,
      NULL,
      (GClassInitFunc) gst_my_filter_class_init,
      NULL,
      NULL,
      sizeof (GstMyFilter),
      0,
      (GInstanceInitFunc) gst_my_filter_init
    };
    static const GInterfaceInfo some_interface_info = {
      (GInterfaceInitFunc) gst_my_filter_some_interface_init,
      NULL,
      NULL
    };

    my_filter_type =
	g_type_register_static (GST_TYPE_ELEMENT,
				"GstMyFilter",
				&my_filter_info, 0);
    g_type_add_interface_static (my_filter_type,
				 GST_TYPE_SOME_INTERFACE,
                                 &some_interface_info);
  }

  return my_filter_type;
}

static void
gst_my_filter_some_interface_init (GstSomeInterface *iface)
{
  /* here, you would set virtual function pointers in the interface */
}
И тут уже начинаются не стыковки. Прототип для указателя GClassInitFunc. typedef void (*GClassInitFunc) (gpointer g_class, gpointer class_data); Что собственно уже не стыкуется. Хотя на это можно и забить. Но вот то, что такое GstSomeInterface и GST_TYPE_SOME_INTERFACE я просто не понимаю.

Кто может помочь и разъяснить концепцию интерфейсов для GStreamer? Желательно с примером.

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.