我有一个带有两个输入的gstreamer插件,只有一个函数可以处理它们。其中一个输入是char *,另一个是struct
有没有办法测试输入缓冲区的数据类型?
类似的东西:
chain_function(GstBuffer)
{
if(GST_BUFFER_DATA(buffer) is mystruct)
do something...
elseif(GST_BUFFER_DATA(buffer) is char*)
do something else
}
答案 0 :(得分:0)
如果是c ++,如果他们共享一个共同的层次结构,你可以使用 dynamic_cast 。
答案 1 :(得分:0)
我从未真正使用过gstreamer;但是从documentation of GstBuffer开始,我想要使用的函数是gst_buffer_set_qdata()
和gst_buffer_get_qdata()
来设置和获取GstBuffer上的元数据。
然后,您将在表示类型的每个相应GstBuffer上分配元数据,然后在您的函数中检索元数据并将它们与其各自的数据类型进行匹配。
答案 2 :(得分:0)
您为插件提供了哪些数据?无论如何,正如已经指出的那样,您将在输入(焊盘)上接收GstBuffer对象。每个GstBuffer都有实际数据+元数据。元数据是例如时间戳和持续时间,还有大写字母。大写字母描述了数据格式。您可以检查大写以了解如何处理已发送的数据。
如果您想发送的内容不是已定义的格式(如音频/视频/文字),则需要设置自己的上限,例如“应用程序/ X-”。描述你想做什么可能是一个好主意,因为这很少需要。