如何在FFmpeg 6.1中设置ch_layout?av_dict_set_int的value参数填什么?
问题解答
在FFmpeg 6.1中,若要通过av_dict_set_int()将ch_layout设置为AV_CHANNEL_LAYOUT_STEREO,value参数应传入**AV_CH_LAYOUT_STEREO对应的整数值**。
原因分析
从给出的宏定义可知,
AV_CHANNEL_LAYOUT_STEREO是通过AV_CHANNEL_LAYOUT_MASK宏生成的结构体:#define AV_CHANNEL_LAYOUT_STEREO AV_CHANNEL_LAYOUT_MASK(2, AV_CH_LAYOUT_STEREO)这个宏的第二个参数
AV_CH_LAYOUT_STEREO才是通道布局的掩码值——它是一个预定义的整数常量,对应立体声(左+右声道)的掩码标识。av_dict_set_int()的value参数类型为int64_t,仅能接收整数值,无法直接传递AVChannelLayout结构体。而FFmpeg字典参数中,设置ch_layout时,对于原生掩码类型的布局,要求传入掩码的整数值。
代码示例
你可以直接在代码中使用AV_CH_LAYOUT_STEREO作为value参数,示例如下:
av_dict_set_int(&dict, "ch_layout", AV_CH_LAYOUT_STEREO, 0);
相关代码注释翻译
通道布局宏定义注释
/** * 用于定义原生通道布局的宏 * * @note 为兼容C++ 17及更早版本,此处未使用指定初始化器。 */ #define AV_CHANNEL_LAYOUT_MASK(nb, m) \ { /* .order */ AV_CHANNEL_ORDER_NATIVE, \ /* .nb_channels */ (nb), \ /* .u.mask */ { m }, \ /* .opaque */ NULL } /** * @name 常用预定义通道布局 * @{ */ #define AV_CHANNEL_LAYOUT_MONO AV_CHANNEL_LAYOUT_MASK(1, AV_CH_LAYOUT_MONO) #define AV_CHANNEL_LAYOUT_STEREO AV_CHANNEL_LAYOUT_MASK(2, AV_CH_LAYOUT_STEREO) #define AV_CHANNEL_LAYOUT_2POINT1 AV_CHANNEL_LAYOUT_MASK(3, AV_CH_LAYOUT_2POINT1) #define AV_CHANNEL_LAYOUT_2_1 AV_CHANNEL_LAYOUT_MASK(3, AV_CH_LAYOUT_2_1)
av_dict_set_int函数注释
/** * av_dict_set()的便捷封装函数,会将数值转换为字符串后存储。 * * 注意:如果设置了::AV_DICT_DONT_STRDUP_KEY标志,出错时会释放key。 */ int av_dict_set_int(AVDictionary **pm, const char *key, int64_t value, int flags);
内容的提问来源于stack exchange,提问作者Steven porite
相关产品推荐
相关产品推荐

