投稿を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);
出典
2016-05-16 16:36:25
mpr