Multimedia/GStreamer

GStreamer pwg: ch 13 part 2

Roien 2021. 12. 22.
반응형

 

13.3.     Providing random access

Ÿ   pull mode on sink pad

    n  이전 section에서 sink pad 상에서 pull mode로 동작 시 task를 만들어 data flow의 제어를 수행하는 것을 봤음

    n   pad link되는 모든 pad들은 pull mode (앞단은 pull slave mode)로 동작해야 함

    n  pull mode로 동작하는 source pad는 반드시 _get_range 함수를 구현해야 함

        s   이는 gst_pad_set_getrange_function으로 설정됨

        s    get_range 함수는 peer pad gst_pad_pull_range data를 요청하면 호출됨

        s   여기서 right offset seek 하고 data를 제공

 

random access를 구현해야 하는 elements

    Ÿ   data sources

        n  ex. file source w/ reasonable low latency

    Ÿ   filters

        n  전체 pipeline에 대해 pull mode scheduling을 제공하고자 하는 filters

    Ÿ   parsers

        n  추가 연산 없이 getrange 요청을 forwarding 하는 parser

        n  ex.

            s   tag reader (e.g., ID3)

            s   single output parser such as a WAVE parser

 

_get_range 함수 example 

#include "filter.h"
static GstFlowReturn
        gst_my_filter_get_range (GstPad     * pad,
                     GstObject  * parent,
                     guint64      offset,
                     guint        length,
                     GstBuffer ** buf);
 
G_DEFINE_TYPE (GstMyFilter, gst_my_filter, GST_TYPE_ELEMENT);
GST_ELEMENT_REGISTER_DEFINE(my_filter, "my-filter", GST_RANK_NONE, GST_TYPE_MY_FILTER);
 
 
static void
gst_my_filter_init (GstMyFilter * filter) {
[..]
  gst_pad_set_getrange_function (filter->srcpad,
      gst_my_filter_get_range);
[..]
}
 
static GstFlowReturn
gst_my_filter_get_range (GstPad     * pad,
             GstObject  * parent,
             guint64      offset,
             guint        length,
             GstBuffer ** buf) {
 
  GstMyFilter *filter = GST_MY_FILTER (parent);
 
  [.. here, you would fill *buf ..]
 
  return GST_FLOW_OK;
}

 

실제로 많은 random access를 수행하는 element들은 push-mode로 활성화 됨

왜냐하면, downstream task를 시작하는 element가 없기 때문임

 

, 실제로 element들은 둘 다 구현해야 함

    Ÿ   _get_range

    Ÿ   _chain

        n  for filters and parsers

    Ÿ   혹은  _get_range _activate_를 통해 task를 시작하는 구현

 

반응형

'Multimedia > GStreamer' 카테고리의 다른 글

GStreamer pwg: ch 13  (0) 2021.12.22
GStreamer pwg: ch. 13 part 1  (0) 2021.12.22
GStreamer pwg: ch. 14  (0) 2021.12.22
GStreamer pwg: ch. 15  (0) 2021.12.22
GStreamer pwg: ch. 16  (0) 2021.12.22

댓글