libav使用编码器私有选项代替

问题描述 投票:2回答:1

我在构建一个使用libav的工具时出现了一些错误。这些错误是关于一些结构体字段被废弃的问题。

AVCodecContext::intra_quant_bias’ is deprecated

错误来自于这段代码。

vcodec_context->intra_quant_bias

当我查看libav文档时,它只是说 "使用编码器的私有选项来代替", 但我不知道该怎么做。

有谁知道这句话是什么意思,如何修改这一行?

我在libav文档中看到,我可以使用定义来抑制这些警告,但我不想走这条路,我宁愿解决真正的问题。

libav
1个回答
0
投票

你可以通过调用 av_opt_set (根据您的数据类型)在 vcodec_context 为您要配置的每个选项。

这里的例子 (video_codec_ctx 作为 AVCodecContext*):

av_opt_set(video_codec_ctx->priv_data, "preset", "ultrafast", 0);
av_opt_set(video_codec_ctx->priv_data, "tune", "zerolatency", 0);
av_opt_set_int(video_codec_ctx->priv_data, "crf", 27, 0); // For integer values
av_opt_set_int(video_codec_ctx->priv_data, "bufsize", 100, 0);
av_opt_set_int(video_codec_ctx->priv_data, "keyint", fps, 0);
av_opt_set_int(video_codec_ctx->priv_data, "keyint_max", fps, 0);
av_opt_set_int(video_codec_ctx->priv_data, "g", 1, 0);

也可以调用 av_dict_set 关于 AVDictionary* 并让这些选项在你分配给 AVCodecContext 呼叫 avcodec_open2:

AVDictionary* dict = NULL;
av_dict_set(&dict, "strict", "+experimental", 0);
avcodec_open2(video_codec_ctx, video_codec, &dict);
© www.soinside.com 2019 - 2024. All rights reserved.