5.2. GstElement 만들기

엘리먼트를 만드는 가장 쉬운 방법은 gst_element_factory_make()를 사용하는 것입니다. 이 함수는 새로 생성될 엘리먼트의 팩토리 이름과 엘리먼트 이름을 인수로 받습니다. 엘리먼트의 이름은 예를 들자면 엘리먼트 생성 이후, 빈에서 엘리먼트를 찾아 사용하기 위해 설정하는 이름입니다. 또한, 디버그 용도로 사용할 수도 있습니다. NULL로 엘리먼트 이름을 설정하면, 고유의 기본 이름을 설정하게 됩니다.

엘리먼트가 다시는 필요 없을 경우, gst_object_unref() 함수를 사용하여 언레퍼런스를 해주어야 합니다. 이 함수는 엘리먼트의 레퍼런스 카운트를 1을 내립니다. 엘리먼트가 생성될 때, 레퍼런스 카운트는 1로 설정됩니다. 엘리먼트 레퍼런스 카운터가 0이 되면, 엘리먼트는 파괴됩니다.

상기의 예제는 fakesrc란 이름을 가진 엘리먼트 팩토리로 source란 이름을 가진 엘리먼트를 생성하는 방법을 보여줍니다. 엘리먼트 생성이 성공하였는지 확인을 하고, 확인 후 엘리먼트를 언레프합니다.

gst_element_factory_make는 두 개의 함수를 하나로 짧게 만든 함수입니다. GstElement 오브젝트는 팩토리로 만들어집니다. 엘리먼트를 만들기 위해, 고유한 팩토리 이름을 이용해 GstElementFactory에 접근해야 합니다. 이를 위해 gst_element_factory_find()를 사용합니다.

상기의 코드는 가짜 데이터 소스를 만드는 fakesrc 엘리먼트를 만드는데 사용할 팩토리를 가져옵니다.  gst_element_factory_create() 함수는 인수로 넘어 온 엘리먼트 팩토리를 이용하여, 주어진 이름으로 엘리먼트를 만듭니다.

 

5.3. GObject처럼 엘리먼트 사용하기

GstElement의 몇몇 프로퍼티는 GstObject의 프로퍼티를 이용해서 구현되었습니다. 일반적인 GObject는 GParamSpecs에 따르는 프로퍼티 값을 질의하거나, 가져오고, 설정하는 메소드가 있습니다.

모든 GstElement는 최소한 부모 오브젝트인 GstObject로부터 name 프로퍼티는 상속합니다. 이 이름은 gst_element_factory_make()나 gst_element_factory_create() 함수를 사용하여 제공한 이름입니다. 프로그래머는 name 프로퍼티를 gst_object_set_name과 gst_object_get_name을 이용해 설정하거나 가져올 수 있습니다. 아니면, 하기의 코드와 같이 GObject 프로퍼티 메커니즘을 이용해 가져오거나 설정할 수도 있습니다.

많은 플러그인이 자세한 환경 설정 정보를 제공하거나, 엘리먼트를 설정하기 위한 추가 프로퍼티를 제공합니다. gst-inspect는 특정한 엘리먼트의 프로퍼티를 질의하기 위한 유용한 도구입니다. gst-inspect는 프로퍼티의 기능과 파라미터의 타입과 범위를 알아내기 위해 사용할 수도 있습니다.

GObject에 대한 더 자세한 사항을 알고 싶으시면, GObject 매뉴얼과 Glib Object 시스템에 대한 문서를 읽어 보시는 것을 추천합니다.

Posted by _유부남J군_