시작하기
GStreamer 속성은 일반적으로 g_object_set()을 사용하여 설정되지만, 이러한 호출의 타이밍을 안정적으로 조정하여 변경 사항이 특정 스트림 시간에 영향을 미치도록 하는 것은 거의 불가능합니다. 컨트롤러 하위 시스템은 스트림 시간에 걸쳐 GObject 속성을 조정하는 가벼운 방법을 제공합니다.
컨트롤러는 시간을 고려합니다. Control-bindings을 사용하여 GstControlSources를 속성에 연결하여 동작합니다. Control-sources는 일반적으로 0.0~1.0 범위에 있는 지정된 타임스탬프에 대한 값을 제공합니다. Control-bindings은 control-value를 바인딩된 GObject 속성에 매핑하여 유형을 변환하고 대상 속성의 값 범위로 조정합니다. 런타임에 element는 현재 스트림 시간에 대한 값 변경 사항을 지속적으로 가져와 GObject 속성을 업데이트합니다. GStreamer에는 이미 몇 가지 다른 GstControlSources와 Control-bindings이 포함되어 있지만 애플리케이션은 해당 기본 클래스를 하위 클래스화하여 자체 바인딩을 정의할 수 있습니다.
컨트롤러 메커니즘의 대부분은 GstObject에서 구현됩니다. GstControlSources와 control-bindings의 기본 클래스도 코어 라이브러리에 포함되어 있지만 기존 구현은 gstcontroller 라이브러리에 포함되어 있으므로 필요에 따라 애플리케이션의 소스 파일에 다음 헤더를 포함해야 합니다.
#include <gst/gst.h>
#include <gst/controller/gstinterpolationcontrolsource.h>
#include <gst/controller/gstdirectcontrolbinding.h>
...
적절한 헤더를 포함하는 것 외에도 애플리케이션은 gstreamer-controller 공유 라이브러리에 링크해야 합니다. 필요한 컴파일러 및 링커 플래그를 얻으려면 다음을 사용할 수 있습니다.
pkg-config --libs --cflags gstreamer-controller-1.0
Setting up parameter control
파이프라인을 설정하고 일부 매개변수를 제어하려면 먼저 GstControlSource를 만들어야 합니다. Interpolation GstControlSource를 사용해 보겠습니다.
csource = gst_interpolation_control_source_new ();
g_object_set (csource, "mode", GST_INTERPOLATION_MODE_LINEAR, NULL);
이제 GstControlSource를 gobject 속성에 연결해야 합니다. 이는 control-binding으로 수행됩니다. 하나의 컨트롤 source는 별도의 control-bindings을 사용하여 여러 객체 속성 (다른 객체에서도)에 연결될 수 있습니다.
gst_object_add_control_binding (object, gst_direct_control_binding_new (object, "prop1", csource));
이 유형의 GstControlSource는 타임스탬프가 있는 매개변수 변경 목록에서 새 속성 값을 가져옵니다. Source는 예를 들어 매개변수 변경을 부드럽게 하여 간격을 채울 수 있습니다. 이 동작은 GstControlSource의 모드 속성을 설정하여 구성할 수 있습니다. 다른 컨트롤 sources는 예를 들어 sin() 함수를 호출하여 값의 스트림을 생성합니다. 여기에는 주파수 등을 제어할 매개변수가 있습니다. GstControlSource는 GstObject이기도 하므로 이러한 속성에도 GstControlSource를 연결할 수 있습니다.
이제 몇 가지 제어점을 설정할 수 있습니다. 이것들은 타임스탬프가 있는 gdouble 값이며 일반적으로 0.0~1.0 범위에 있습니다. 1.0의 값은 나중에 대상 속성 값 범위의 최대값에 매핑됩니다. 타임스탬프에 도달하면 값이 활성화됩니다. 여전히 목록에 남아 있습니다. 예를 들어 파이프라인이 루프 (세그먼트화된 탐색 사용)를 실행하면 control-curve도 반복됩니다.
GstTimedValueControlSource *tv_csource = (GstTimedValueControlSource *)csource;
gst_timed_value_control_source_set (tv_csource, 0 * GST_SECOND, 0.0);
gst_timed_value_control_source_set (tv_csource, 1 * GST_SECOND, 1.0);
이제 모든 것이 재생될 준비가 되었습니다. GstControlSource를 볼륨 속성에 바인딩하면 1초 fade-in이 들립니다.
주의 사항: GStreamer의 기본 볼륨 요소에는 0.0~10.0 범위의 volume 속성이 있습니다. 위의 GstControlSource를 이 속성에 연결하면 볼륨이 400%까지 증가합니다!
마지막으로, 컨트롤러 하위 시스템에는 live-mode가 내장되어 있습니다. 속성에 GstControlSource가 할당되어 있어도 g_object_set()으로 GObject 속성을 설정할 수 있습니다. 이는 GObject 속성을 GUI 위젯에 바인딩할 때 매우 유용합니다. 사용자가 위젯으로 값을 조정하면 GObject 속성을 설정할 수 있으며, 이는 다음에 프로그래밍된 GstControlSource 값이 이를 재정의할 때까지 활성 상태로 유지됩니다. 이는 평활화된 매개변수에도 작동하지만 GstLFOControlSource와 같이 속성을 지속적으로 업데이트하는 GstControlSource에는 작동하지 않습니다.
원문: Dynamic Controllable Parameters (gstreamer.freedesktop.org)
Dynamic Controllable Parameters
Dynamic Controllable Parameters Getting Started GStreamer properties are normally set using g_object_set(), but timing these calls reliably so that the changes affect certain stream times is close to impossible. The controller subsystem offers a lightweigh
gstreamer.freedesktop.org
'IT와 개발 > GStreamer Study' 카테고리의 다른 글
Autoplugging (2) | 2024.07.05 |
---|---|
Threads (1) | 2024.06.28 |
Buffering (1) | 2024.06.14 |
Clocks and synchronization in GStreamer (3) | 2024.06.07 |
Interfaces (3) | 2024.05.31 |