2015-01-05 6 views
0

Я пытаюсь разработать собственный собственный пользовательский плагин с N-образными приемными подкладками и M иногда src-пэдами. Накладные площадки добавляются в объект GstCollectPads. Мне удалось запустить плагин &, он получает буферы и обрабатывает их правильно в обратном вызове gst_my_plugin_collected (GstCollectPads * pads), чем я нажимаю буферы на одноранговый узел выбранного src.Как обрабатывать EOS в пользовательском плагине gstreamer?

Это последние строки в моей реализации * _collected (...).

281  GSList *it = pads->data; 
282  for(it; it != NULL; it=it->next) { 
283   cdata = (GstCollectData*)(it->data); 
284   outbuf = gst_collect_pads_peek(pads, cdata); 
295   gst_pad_push(elem->srcpads[i++], outbuf);    
298 } 
299 return GST_FLOW_OK; 

Пример трубопровода: GST-NDL-запуск filesrc место = in.log! myplugin! filesink location = out.log работает в бесконечном цикле, обрабатывая все те же данные из файла in.log, записывая его в файл out.log, точно так же, как он не знает, когда он достигнет конечного файла.

Я предполагаю, что мне как-то нужно сообщить моему плагину, что обработка должна прекратиться, может быть, отправив сообщение EOS каким-то образом, однако я понятия не имею, как это сделать. Таким образом, мой вопрос: Что я должен делать в своем плагине, чтобы прекратить обработку, когда происходит Конец файла?

// UPDATE: Похоже, что мои процессы трубопроводные только первый буфер в бесконечном цикле. Так что моя предыдущая идея об отправке сообщения EOS была недействительной, вместо этого я должен как-то удалить обработанный буфер, чтобы получить следующий. Все еще не знаю, как это сделать, поэтому любая помощь будет оценена.

Что мне делать после обработки буфера из GstCollectData, чтобы он не обрабатывал один и тот же буфер снова и снова?

ответ

1

ОК может быть проще ответ:

gst_collect_pads_pop() вместо gst_collect_pads_peek()?

Обязательно проверьте наличие null.

http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstCollectPads.html#gst-collect-pads-pop

+0

Я пробовал это, в любом случае я уже решить мою проблему, однако благодаря за то, чтобы помочь, я знаю, что мое объяснение было немного грязным и трудно следовать, так как я не был» я уверен, в чем проблема, и попытался объяснить проблему, описывающую ситуацию. – Buyuk

0

Оказывается, это было именно то, что я подозревал, в начале, не обрабатывает событие EOS. Чтобы исправить мою проблему, мне пришлось реализовать функцию gst_collect_pads_event, ее странно, хотя в справочной странице GstCollectPads нет ни одного слова об этом.

(проблема решена)

Смежные вопросы