본문 바로가기
MultiMedia Framework/GStreamer

Pads

by 유주원 2013. 7. 28.

Pad 타입은 'direction'과 'availability'. 두 가지 프로퍼티에 의해 정의된다.

이 전에도 설명한 것과 같이 GStreamer에서는 'source pad'와 'sink pad'라는 두 개의 pad direction을 정의한다.

source pad와 sink pad는 이전에도 설명한 적이 있으니 skip~

또한 pad는 세 개의 availability를 가진다.

바로 always, sometimes 그리고 on request.

always pad는 항상 존재하는 pad를 말하고, sometimes pad는 어떤 특정 경우에는 존재하는 pad를 말한다.

on request pad는 application에 의해 요청이 들어왔을 때만 존재하는 pad를 말한다.


Dynamic(or sometimes) pads

- 모든 element들이 생성되었을 때부터 모든 pad를 지니고 있는 것은 아니다. 예를 들어 Ogg demuxer element는 Stream이 검출될 때만 dynamic pads를 생성하며, Stream이 종료될 때는 해당 pad를 제거하는 특징을 가진다.

- 아래의 코드는 dynamic pad의 생성 방식을 나타내고 있다.



- 위와 같은 코드 방식대로 코딩 시 잊지 말아야 할 것이 있다. 바로 gst_element_set_state() 또는 gst_element_sync_state_with_parent() 함수에 대한 사용이다.


Request pads

- Request pads는 element가 생성할 때 자동적으로 생성되는 것이 아니라, 요청이 있을 때만 pads가 생성된다.

- 예를 들어 하나의 input stream을 request로 생성된 여러 개의 output pads에게 복사해주는 element가 존재한다고 가정하자.

- application 입장에서는 stream의 복사가 필요할 때마다 단순히 element로부터 새로운 output pad만 요청하면 되는 것이다. 

- gst_element_get_request_pad()라는 함수는 element로부터 pad를 가져오는데 사용된다. 이렇게 request로 요청하여 pad를 가져오게 되면 다른 pad들과의 호환성을 유지시킬 수 있다.

- gst_element_get_compatible_pad() 함수 역시 호환되는 pad를 요청할 때 사용되는 함수이다. gst_element_get_request_pad()와 gst_element_get_compatible_pad()의 차이는 서서히 알아가는 것으로...