アドベントカレンダー1日目 ~ 3日目までは、私が GStreamer 1.10 で実装された
新APIのハンズオン?使ってみた?をやろうと思います。
1日目はリリースノート先頭に書かれている、こちら(↓)の機能
Receive property change notifications via bus messages
New API was added to receive element ... (長いので省略)
Bus message経由でプロパティの変更通知を受け取るというものです。
今まではプロパティの値が変わったことを知るために、GObject APIのsignal
を使ったcallbackを書く必要があったわけです。
しかし、この方法はGStreamerとしてはあまりきれいではないものでした。
それは、Pipeline(Element)→Applicationの通知は、Elementの状態遷移(GST_STATE)を伝える時のように、「ElementがBusにMessageを流し、Applicationがこれをフックする」というの流れが基本だからです。
新しく実装されたこのAPIによって Element -> Bus -> Application の正しい?(理想的な?)流れで通知を渡せるようになりました。
サンプルコード
そこで、gst-element-add-property-notify-watch を使ったサンプルを書いてみました。
Ctrl-C
のSIGINTにより、videorate
のmax-rate
を10<->30と切り替えるものです。
アプリケーションスレッドからプロパティを書き換えと、Bus経由で変わったことが伝わってくるのが見えます。
ソースコードは Gist に貼ってます。
https://gist.github.com/shocrunch/a764b64adb52c47751b1c1114c503e15b