2016-05-16 7 views
0

gstreamerの要素のシンクパッドがデータを取得しているかどうかを確認する方法を知りたいと思います。要素のシンクパッドがデータを受信して​​いるかどうかをチェックする方法は?

いつでもデータを取得していない場合は、パイプラインをリセットまたは再起動します。

誰でも私にパイプラインをリセットまたは再起動する方法を教えてもらえますか?パイプラインを再起動するとどうなりますか?パッドの受信データについて知る方法は?

答えて

0

投稿を2つの別々の質問に分割したい場合があります。パイプラインを再起動する限り、状態をNULLに設定してPLAYINGに戻すことができますが、多くの要素が正しくクリーンアップできないため、プロセス全体を再起動することをお勧めします。

バッファが入っているかどうかを検出するには、パイプラインの目的地にidentity要素を追加し、そのようにコールバックを登録します。その後、メインスレッドで、更新時間が希望の範囲内にあることを確認します。おそらくg_timeout_add()を使用しています。

void ir_data_received(GstElement* identity, GstBuffer* buf, gpointer user_data) { 
    my_object *some_useful_pointer = (my_object*)user_data; 

    //data is coming in, reset the necessary flag 
} 

void setup(GstElement * pipeline, my_object *some_useful_pointer) {  
    GstElement* identity = gst_bin_get_by_name(GST_BIN(pipeline), "identity"); 
    if(identity == NULL) { 
     //error handling 
    } 

    g_signal_connect(G_OBJECT(identity), "handoff", (GCallback)data_received, some_useful_pointer); 
} 

タイムアウト秒ごとにチェックしてください。

gboolean check_status(gpointer user_data) { 
    //check if data is coming in and exit system if it's not 
} 

g_timeout_add(1000, check_status, some_useful_pointer); 
関連する問題