Gstreamer:如何在C中设置videomixer sink_0上限

时间:2016-04-28 17:52:59

标签: c gstreamer

我想做的很简单。在视频混合器上启用接收器垫:

/* Manually link the mixer, which has "Request" pads */
mixer_sink_pad_template = gst_element_class_get_pad_template(GST_ELEMENT_GET_CLASS(videomixer), "sink_%u");
mixer_sink_pad = gst_element_request_pad(videomixer, mixer_sink_pad_template, NULL, NULL);
sink_pad = gst_element_get_static_pad(videomixer, "src");
gst_pad_link(sink_pad, mixer_sink_pad);   

然后设置alpha,xpos,ypos,例如

g_object_set(videomixer, "sink_0::alpha", 0.5, NULL);

但是,这不起作用。

(orig_code:22527): GLib-GObject-WARNING **: g_object_set_valist: object class 'GstVideoMixer2' has no property named 'sink_0::alpha'

我试图弄清楚获取C代码以设置视频混音器的sink_0&的语法。 sink_1 pad properties。

有人能指出它有多容易吗?

1 个答案:

答案 0 :(得分:1)

这是我自己的问题的答案。

首先请注意。我认为当从相机中取出不良数据时(通常在启动时),没有足够的数据来存档视频流和代码段错误。我的经验是:如果再跑一次,那就没事了。

首先要做的事情。要访问视频混合器,您必须在链接元素时创建它们。这是一个例子:

  /* Manually link the mixer, which has "Request" pads */
  source0_src_pad = gst_element_get_static_pad (source0, "src");
  mixer_sink_pad_template = gst_element_class_get_pad_template(GST_ELEMENT_GET_CLASS(videomixer), "sink_%u");
  mixer_sink_pad = gst_element_request_pad(videomixer, mixer_sink_pad_template, NULL, NULL);
  if (gst_pad_link(source0_src_pad, mixer_sink_pad) != GST_PAD_LINK_OK) {
    g_printerr ("source0 and mixer pads could not be linked.\n");
    gst_object_unref (pipeline);
    return -1;
  }

我没有对此进行测试,但您应该可以在自动链接后立即设置xpos:

g_object_set(mixer_sink_pad, "xpos", 1280, NULL);
gst_object_unref(source0_src_pad);

我正在使用以下代码在代码中设置pad xpos:

GstPad* sink_0 = gst_element_get_static_pad(videomixer, "sink_0");
g_object_set(sink_0, "xpos", 0, NULL);

感谢马丁指出我正确的方向。

编辑,因为我误解了一些代码。