본문 바로가기
MultiMedia Framework/GStreamer

Bin

by 유주원 2013. 7. 25.

Bin은 콘테이너 element라고도 할 수 있다.

새롭게 생성된 element를 Bin에 추가할 수 있으며, Bin 그 자체는 속해 있는 element들에 대한 처리가 가능하다.

Bin에 대해 조금 더 자세히 설명하자면, 연결되어 있는 element들이 논리적으로 결합된 형태로 나타나는 것이 Bin이다.

각각의 element들을 처리할 필요 없이 하나의 element, 즉 Bin을 통해 처리가 가능하다.



Bin의 생성

- Bin은 다른 element들을 생성할 때와 동일한 방식으로 생성된다.

- element factory를 사용한다면, gst_bin_new(), gst_pipeline_new() 등과 같은 함수 사용이 더 편리할 것이다.

- element를 bin에 추가하고 삭제하기 위해서는 gst_bin_add(), gst_bin_remove() 함수를 사용한다.

- Bin에 포함되어 있는 모든 element의 목록을 알고 싶을 때는 gst_bin_get_list()라는 함수를 이용한다.



Custom bins

- 특정 업무를 수행하기 위한 용도로 Custom bin을 생성할 수도 있다.

- 예를 들어 사용자가 Ogg나 vorbis decoder를 만들려고 한다면, 이는 상당히 어리석을 수 있다.

- 이미 playbin2 element라는 강력하고 편한 Custom bin element가 있기 때문이다.

- Custom bin은 플러그인 또는 XML description을 통해 생성될 수도 있다. 

- 더 많은 정보는 http://gstreamer.freedesktop.org/data/doc/gstreamer/head/pwg/html/index.html

http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/index.html 을 통해 확인이 가능하다.


Bins manage states of their children

- Bin은 자신에 포함되어 있는 모든 element들을 관리한다고 말했다. 

- 만약에 특정 상태를 만들기 위해 gst_element_set_state()라는 함수를 Bin 또는 pipeline에 사용한다면, 이는 Bin에 포함되어 있는 모든 element들에게 적용될 것이다. 

- 이 말인 즉, 가장 상위의 pipeline의 상태만 start 하거나 stop 할 수 있다면 나머지 element들의 관리가 가능하다란 말이다.

- 하지만 element가 동작 중인 Bin 또는 pipeline에 추가가 되었을 때는 고려가 필요하다. 새롭게 추가된 element는 자동적으로 pipeline이나 Bin의 현재 상태로 전환되지 않기 때문이다. 

대신에 직접 gst_element_set_state() 혹은 gst_element_sync_state_with_parent() 함수를 사용하여 현재 동작 중인 pipeline에 추가로 element의 상태를 설정해주어야 한다.