본문 바로가기
MultiMedia Framework/GStreamer

Element

by 유주원 2013. 7. 16.

GStreamer에 있어서 가장 중요한 객체라고 할 수 있다.


Source element

- 오직 파이프라인을 사용해서 데이터를 생성해 내는 역할.

- 디스크로부터 데이터를 읽는다는지, 사운드 카드로부터 데이터를 읽는 것 등을 예로 들 수 있다.

- source element 내부엔 오직 source pad만 존재하며 데이터를 생성해 내는 역할만 한다.


Filters, convertors, demuxers, muxers and codecs

- Filter와 관련된 element 들은 input과 output pad 모두 가지고 있다.

- input (Sink) pad를 통하여 데이터를 전송받고 output (Source) pad 를 통해 데이터를 내보낸다.

- 1개 이상의 source pad와 sink pad를 가질 수가 있다.

- video demuxer의 경우 1개의 sink pad와 여러 개의 source 패드를 가지고 있는 반면에 decoder의 경우 1개의 sink pad와 source pad만 가진다.


Sink element

- Sink element는 pipeline의 end point를 지칭한다.

- 데이터를 받을 수는 있지만 따로 생성하지는 못한다.

- disk writing, soundcard playback, video output 등이 sink element에 의해 구현된 예이다.


Creating a GstElement

- element를 생성하는 가장 쉬운 방법은 gst_element_factory_make() 함수를 이용하는 것이다.

- gst_element_factory_make()는 factory name과 생성하고자 하는 element 이름을 매개변수로 받고 있다.

- element 이름은 후에 debug 용도로 표시될 수도 있다. 이름을 NULL로 입력할 경우엔 default 이름이 붙는다.

- gst_object_unref() 를 통해 element의 삭제를 진행한다. 해당 함수는 reference count를 줄이는 함수로, 현재 reference 하고 있는 객체의 개수를 1 줄이는 역할을 하고 있다.

- 아래 코드는 fakesrc라는 이름을 가진 element factory로부터 source라는 element를 생성하는 과정을 보여주고 있다. 

- 모든 과정 종료 후에는 반드시 element unref를 해야 한다.


- gst_element_factory_make() 함수는 실제로는 두 개의 기능이 숨겨져 있다. GstElement는 factory에 의해 생성되고, element를 생성하기 위해서는 우선 해당 factory name을 사용하고 있는 GstElementFactory에 접근해서 가져와야 한다. 

factory를 찾을 수 있도록 제공하는 함수가 gst_element_factory_find() 함수이고 해당 factory로부터 element를 가져오는 함수가 gst_element_factory_create() 함수이다.

이 두가지 기능이 한꺼번에 들어 있는 게 바로 gst_element_factory_make() 함수이다.


Using an element as a GObject

- GstElement는 표준 GObject 프로퍼티를 사용하여 구현된 다양한 프로퍼티들을 가질 수 있다.

- 모든 GstElement들은 부모 객체로부터 적어도 하나의 프로퍼티를 가지는데, 바로 "name" 프로퍼티이다.

- 이 name은 gst_element_factory_create() 혹은 gst_element_factory_make() 함수를 통하여 설정할 수 있다.

- gst_object_set_name() 과 gst_object_get_name() 함수를 통해서도 name 프로퍼티를 수정할 수 있다.