본문 바로가기
MultiMedia Framework/GStreamer

Capabilities of a pad

by 유주원 2013. 7. 29.

Pad의 capabilities를 사용함으로써 어떤 data type이 pad를 통해 흘러들어가고 나가는지를 확인할 수 있다.

Pad의 capabilities는 GstCaps 객체에 의해 기술된다. 내부적으로 GstCaps는 하나 이상의 GstStructure를 포함하고 있으며, 이 GstStructure는 하나의 미디어 타입에 대해 기술해 놓고 있다.

간단히 "vorbisdec" element를 예로 들자면, 해당 element에 대해 gst-inspect로 분석해 보면, source pad와 sink pad가 각각 한개씩 존재하는 것을 알 수 있다. 

source pad는 raw audio mime 타입의 데이터("audio/x-raw-float")를 다음 element로 전송하고 있고 sink pad는 vorbis-encoded audio data 타입 ("audio/x-vorbis")을 수신하는 것을 알 수 있다.

또한 source pad에서는 audio samplerate와 channel의 수, 그리고 audio와 관련된 기타 property들을 가지고 있는 것을 알 수 있다.


pad Templates:

SRC template: 'src'

Availability: Always

Capabilities:

audio/x-raw-float

rate : [ 8000, 50000 ]

channels : [1, 2]

endianness : 1234

width : 32

buffer-frames : 0


SINK template: 'sink'

Availability: Always

Capabilities:

audio/x-vorbis


property는 또 머지??

property란 해당 element의 특징이라고도 할 수 있으며, 주로 capability에 대한 추가 정보를 설명하기 위해 사용되곤 한다.

위의 사항과 적용해 보자면, rate, channel, endianness 등등?

property는 [key, value] 형태로 되어 있는데 value의 type은 그 종류에 따라 다양하다.


Basic type

- G_TYPE_INT : 정수 값

- G_TYPE_BOOLEAN : TRUE 또는 FALSE 값

- G_TYPE_FLOAT : 부동 소수점 값

- G_TYPE_STRING : UTF-8 기반의 문자열 

- GST_TYPE_FRACTION : 분수 값


Range type

- GST_TYPE_INT_RANGE : 정수 가능 형태의 범위 값. "vorbisdec" element의 경우 rate property가 8000 ~ 50000으로 property 값이 정해진다.

- GST_TYPE_FLOAT_RANGE :  부동 소수점 가능 형태의 범위 값.

- GST_TYPE_FRACTION_RANGE : 분수 가능 형태의 범위 값.


List type

- GST_TYPE_LIST : 리스트 형태의 값. 예를 들어 주파수 대역이 44100 Hz와 48000 Hz 를 지원하는 capabilities의 경우 해당 값을 리스트 형태로 사용하면, 해당 값이 44100 Hz가 될 수도 있고 48000 Hz가 될 수도 있다.


Array type

- GST_TYPE_ARRAY : 배열 형태의 값. 배열 안에 있는 모든 item의 값들은 동일한 데이터 타입을 유지해야 한다. 

GST_TYPE_LIST와는 다르게 배열 내의 값들은 전체로써 해석된다. 이 말인 즉, 44100 Hz와 48000 Hz 값을 리스트에 넣으면 44100 Hz 또는 48000 Hz 둘 중 하나로 인식하지만, 배열에 넣게 되면 44100 Hz 와 48000 Hz 둘 다 인식한다는 말의 뜻인 것 같다.