You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言开发中如何设置glimagesink的render-rectangle参数

glimagesink的render-rectangle参数C语言配置方法

glimagesink的render-rectangle参数在GStreamer C API中属于GstValueArray类型,数组内包含4个整型值,依次对应x坐标、y坐标、渲染宽度、渲染高度,和命令行中<>内的参数顺序完全一致。

具体操作步骤

  • 正常创建glimagesink元素
  • 构造包含4个整数的GstValueArray,传递给glimagesink的render-rectangle属性即可

代码示例

简化写法(推荐)

// 创建glimagesink实例
GstElement *glsink = gst_element_factory_make("glimagesink", "glsink");

// 直接设置render-rectangle参数,顺序为x、y、宽度、高度
g_object_set(glsink, "render-rectangle",
            gst_value_array_new_from_values(
                (const GValue[]){G_VALUE_INIT, G_VALUE_INIT, G_VALUE_INIT, G_VALUE_INIT}, 4,
                g_value_init(&((GValue*)0)[0], G_TYPE_INT), g_value_set_int(&((GValue*)0)[0], 0),
                g_value_init(&((GValue*)0)[1], G_TYPE_INT), g_value_set_int(&((GValue*)0)[1], 0),
                g_value_init(&((GValue*)0)[2], G_TYPE_INT), g_value_set_int(&((GValue*)0)[2], 1920),
                g_value_init(&((GValue*)0)[3], G_TYPE_INT), g_value_set_int(&((GValue*)0)[3], 1080)
            ),
            NULL);

分步写法(可读性更高)

GstElement *glsink = gst_element_factory_make("glimagesink", "glsink");
GValue rect_prop = G_VALUE_INIT;
GstValueArray *rect_arr;

// 初始化属性值类型为GstValueArray
g_value_init(&rect_prop, GST_TYPE_VALUE_ARRAY);
rect_arr = gst_value_array_new(4);

// 依次添加四个坐标参数
GValue tmp_val = G_VALUE_INIT;
g_value_init(&tmp_val, G_TYPE_INT);
g_value_set_int(&tmp_val, 0); // x坐标
gst_value_array_append_value(rect_arr, &tmp_val);
g_value_unset(&tmp_val);

g_value_init(&tmp_val, G_TYPE_INT);
g_value_set_int(&tmp_val, 0); // y坐标
gst_value_array_append_value(rect_arr, &tmp_val);
g_value_unset(&tmp_val);

g_value_init(&tmp_val, G_TYPE_INT);
g_value_set_int(&tmp_val, 1920); // 渲染宽度
gst_value_array_append_value(rect_arr, &tmp_val);
g_value_unset(&tmp_val);

g_value_init(&tmp_val, G_TYPE_INT);
g_value_set_int(&tmp_val, 1080); // 渲染高度
gst_value_array_append_value(rect_arr, &tmp_val);
g_value_unset(&tmp_val);

// 赋值给glimagesink属性
g_value_take_boxed(&rect_prop, rect_arr);
g_object_set_property(G_OBJECT(glsink), "render-rectangle", &rect_prop);
g_value_unset(&rect_prop);

配套注意点

  • 编译时需要链接gstreamer-gl相关依赖,编译参数要加pkg-config --cflags --libs gstreamer-gl-1.0
  • 命令行中video/x-raw,width=1920,height=1080的格式限制需要通过capsfilter元素实现,不要直接设置到videoscale的属性上
  • 用完的GValue要及时unset,避免内存泄漏

内容的提问来源于stack exchange,提问作者jih488

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 08:42:00