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

时间:2016-05-17 00:12:14

标签: libav

我在构建使用libav的工具时遇到了一些错误。错误是关于某些结构字段被弃用的。

AVCodecContext::intra_quant_bias’ is deprecated

错误来自这段代码:

vcodec_context->intra_quant_bias

当我查看libav文档时,它只是说“使用编码器私有选项”,但我无法弄清楚如何执行此操作。

是否有人知道这意味着什么以及如何更改该行?

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

1 个答案:

答案 0 :(得分:0)

您可以通过针对要配置的每个选项在av_opt_set上调用vcodec_context(根据数据类型)来设置编码器专用选项。

此处的示例(video_codec_ctxAVCodecContext*):

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);