插件的多个文件上的 Gstreamer 调试输出

San*_*ndy 2 c++ gstreamer

我正在尝试弄清楚如何在我正在编写的插件中设置 Gstreamer 0.10 日志记录。该插件跨越多个源文件,我不知道如何获取 GST_WARNING、GST_DEBUG 等。宏在主源文件外部工作。

假设我有两个文件:

plugin1.cpp
plugin1_helper.cpp
Run Code Online (Sandbox Code Playgroud)

plugin1.cpp是从模板生成的,调试类别定义如下。

GST_DEBUG_CATEGORY_STATIC (gst_plugin1_debug);
#define GST_CAT_DEFAULT gst_plugin1_debug
Run Code Online (Sandbox Code Playgroud)

它在plugin1_init()函数内初始化。

GST_DEBUG_CATEGORY_INIT (gst_plugin1_debug, "plugin1",
    0, "Template plugin1");
Run Code Online (Sandbox Code Playgroud)

我查看了教程http://docs.gstreamer.com/display/GstSDK/Basic+tutorial+11%3A+Debugging+tools,但无法弄清楚如何处理多个文件。

当我从plugin_helper中调用GST_WARNING时,我得到一个带有default调试类别而不是plugin1.

如果我尝试为帮助程序文件创建一个新类别,我会得到以下输出。

(gst-launch-0.10:4422): GStreamer-CRITICAL **: gst_debug_log_valist: assertion 'category != NULL' failed
Run Code Online (Sandbox Code Playgroud)

那么 GST_DEBUG 如何处理插件的多个源文件呢?

San*_*ndy 7

看来我在发帖之前并没有仔细浏览过 gstinfo.h 。

为了使用多个文件,您需要定义以不同方式跟踪 gstreamer 日志记录组的变量。本教程展示了如何使用静态日志记录变量,该变量仅在其定义的文件内可见。

为了使用多个文件,在plugin1.cpp中定义没有静态的日志变量:

GST_DEBUG_CATEGORY (gst_slxgpu_debug);
#define GST_CAT_DEFAULT gst_slxgpu_debug
Run Code Online (Sandbox Code Playgroud)

然后在要使用它的文件中,将其定义为plugin1_helper.cpp中的extern:

GST_DEBUG_CATEGORY_EXTERN (gst_slxgpu_debug);
#define GST_CAT_DEFAULT gst_slxgpu_debug
Run Code Online (Sandbox Code Playgroud)