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
相关产品推荐
相关产品推荐

