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
}
4

3 回答 3

0

如果它是 c++,如果它们共享一个共同的层次结构,你可以使用dynamic_cast 。

于 2012-08-02T19:47:16.657 回答
0

我从未真正使用过 gstreamer;但是从GstBuffer 的文档中,我猜想使用的功能是设置gst_buffer_set_qdata()gst_buffer_get_qdata()获取 GstBuffer 上的元数据。然后,您将在表示该类型的每个相应 GstBuffer 上分配元数据,然后在您的函数中检索元数据并将它们匹配为各自的数据类型。

于 2012-08-02T20:57:59.743 回答
0

您向插件提供什么样的数据?无论如何,正如已经指出的那样,您将在输入(焊盘)上收到 GstBuffer 对象。每个 GstBuffer 都有实际的数据 + 元数据。元数据是时间戳和持续时间,还有上限。大写字母描述了数据格式。您可以检查上限以了解如何处理发送的数据。

如果您想发送不是已定义格式之一的内容(如音频/视频/文本),则需要设置自己的大写字母,例如“application/x-”。描述您想要做什么可能是一个好主意,因为这很少需要。

于 2012-08-03T20:02:24.280 回答