2016-04-28 101 views
0

我想要做的事很简单。启用视频混合器上的接收器底座:Gstreamer:如何在C中设置videomixer sink_0上限caps

/* 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代码来设置videomixer的sink_0 & sink_1抛光垫的性质。

有人可以指出它是多么容易吗?

+0

您不能通过视频混合器设置接收器属性。尝试'GstPad * sink_0 = gst_element_get_static_pad(videomixer,“sink_0”);'然后'g_object_set(sink_0,“alpha”,0.5,NULL);' – Martin

+0

Thanks Martin。如果我按照这种方式设置第一个,它似乎能够工作,即编译并且没有运行时间警告,但是(在这种情况下)xpos不会改变。如果我尝试设置第二个,它会给出警告或段错误(取决于第一个gst_element_get_static_pad的存在)。这让我想知道请求垫(如上所示)的代码是不正确的,因为它正在做类似的事情。欢迎提出建议。我将深入讨论请求板。 – Raydude

回答

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); 

我后来设置垫XPOS在该代码与此代码:

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

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

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

+0

我想完成一些非常相似的事情。我想在流水线开始运行后随着时间的推移动态更改videomixer.sink_1 :: alpha的alpha值。你尝试过吗? –

+0

对不起,我没有这样做,我放弃了gstreamer。我现在正在编码所有的东西。它快得多,我觉得我可以控制一切。 – Raydude

+0

你正在编写自己的编解码器吗? –