2012-08-02 65 views
0

我有一個gstreamer插件有兩個輸入,只有一個函數來處理它們。其中一個輸入是char *,另一個是結構我可以測試它的數據類型的指針嗎?

有沒有辦法測試輸入緩衝區的數據類型?

喜歡的東西:

chain_function(GstBuffer) 
{ 
    if(GST_BUFFER_DATA(buffer) is mystruct) 
     do something... 
    elseif(GST_BUFFER_DATA(buffer) is char*) 
     do something else 
} 
+0

什麼語言? – 2012-08-02 19:45:05

回答

0

如果是c。如果他們都有一個共同的層次++,你可以使用dynamic_cast

0

我從來沒有真正使用gstreamer;但從documentation of GstBuffer,我想要使用的函數是gst_buffer_set_qdata()gst_buffer_get_qdata()來設置和獲取GstBuffer上的元數據。 然後,您可以在代表該類型的每個相應GstBuffer上分配元數據,然後在您的函數中檢索元數據並將它們匹配爲其各自的數據類型。

0

你給這個插件提供了什麼樣的數據?無論如何,正如已經指出的那樣,您將在輸入(焊盤)上接收到GstBuffer對象。每個GstBuffer都有實際的數據+元數據。元數據是例如時間戳和持續時間,還有上限。大寫字母描述數據格式。您可以檢查上限以瞭解如何處理髮送的數據。

如果你想發送的東西不是已經定義的格式之一(如音頻/視頻/文本),你需要設置自己的大小寫,例如: 「應用程序/ X-」。描述你想要做什麼可能是一個好主意,因爲這很少需要。