Vala Gstreamer BusFunc - PullRequest
       16

Vala Gstreamer BusFunc

1 голос
/ 26 марта 2020

Я пытаюсь переписать этот кусок кода на Vala:

Пример gstreamer

Я застрял в этой строке:

 watch_id = gst_bus_add_watch (bus, message_handler, NULL);

Мой эквивалент вала:

    var watch_id = bus.add_watch (Priority.DEFAULT, message_handler);

Я не имею понятия, как отформатировать BusFun c, и его предполагаемые аргументы

BusFun c

Полный код на данный момент:

using Gst;

bool Gst.BusFunc message_handler ()
{
  return false;
}

void main (string[] args) {
// Initializing GStreamer
Gst.init (ref args);

var caps = Caps.from_string("audio/x-raw,channels=2");

// Creating pipeline and elements
var pipeline = new Pipeline ("my_pipeline");
var bin = new Bin ("my_bin");
var bus = new Bus ();

var src = ElementFactory.make ("autoaudiosrc", "my_src");
var sink = ElementFactory.make ("autoaudiosink", "my_sink");

var convert = ElementFactory.make ("audioconvert", "my_convert");
var level = ElementFactory.make ("level", "my_level");
var fakesink = ElementFactory.make ("fakesink", "my_fakesink");

// Adding elements to pipeline
//pipeline.add_many (src, sink);

bin.add_many (pipeline, src, convert, level, fakesink);

src.link(convert);
convert.link_filtered (level, caps);
level.link(fakesink);

level.set ("post-messages", true);
fakesink.set ("sync", true);

bus = pipeline.get_bus ();

var watch_id = bus.add_watch (Priority.DEFAULT, message_handler);

// Linking source to sink
src.link (sink);


// Set pipeline state to PLAYING
pipeline.set_state (State.PLAYING);

Заранее спасибо!

1 Ответ

1 голос
/ 26 марта 2020

Ты почти у цели. Делегат идентифицирует сигнатуру функции: ее типы параметров и тип возвращаемого значения. Тип BusFun c имеет подпись: public delegate bool BusFunc (Bus bus, Message message), поэтому ваш обработчик будет выглядеть примерно так:

bool message_handler (Bus my_bus, Message my_message)
{
  print (@"Message type: $(my_message.type.get_name ())\n");
  return true;
}

В этом примере он возвращает true, чтобы сохранить обработчик.

Этот пример не проверен, но должен дать вам правильную идею для продвижения вперед.

...