GStreamer定义可接受'4/3'的Fraction属性报错排查
问题根源与解决方案
你的问题出在**gst_param_spec_fraction的参数顺序和取值设置错误**:
错误原因
看你传入的参数:
0, G_MAXINT, G_MAXINT, G_MAXINT
对应函数的min_num, min_denom, max_num, max_denom四个参数,这意味着你把分母的最小值设成了G_MAXINT(一个极大的整数)。而4/3的分母是3,远小于这个最小值,自然会被判定为超出范围,触发错误。
另外,GStreamer的GstFraction要求分母必须是正整数(不能为0),所以分母的最小值应该设为1,而不是极大值。
修正后的代码
把min_denom改成1,同时保持其他参数合理:
g_object_class_install_property (gobject_class, PROP_PIXEL_ASPECT_RATIO, gst_param_spec_fraction ("pixel-aspect-ratio", "Pixel aspect ratio", "Pixel aspect ratio of frames in the stream", 0, 1, G_MAXINT, G_MAXINT, // 修正:min_denom=1 DEFAULT_PIXEL_ASPECT_RATIO_NUM, DEFAULT_PIXEL_ASPECT_RATIO_DEN, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS) );
关于GstFraction的补充说明
你的理解是对的:GstFraction就是用分子+分母的整数对来表示比例,避免浮点数精度损失,完全适合像素宽高比这类场景。需要注意的核心规则只有两条:
- 分母必须是正整数(不能为0)
- 传入的分数会被自动约分(比如
8/6会被转成4/3)
内容的提问来源于stack exchange,提问作者Vincentz
相关产品推荐
相关产品推荐

