X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fhuffyuvenc.c;h=572de16a1f791966648ccc0b1ac07e417e8fa6c1;hb=f02103036526a8740ccd23474155906929f26303;hp=e080cd90bbb73dddca1de4861ecc74cd523a8aad;hpb=af2e6f32156ecd18664551215680c662e61aa57a;p=ffmpeg diff --git a/libavcodec/huffyuvenc.c b/libavcodec/huffyuvenc.c index e080cd90bbb..572de16a1f7 100644 --- a/libavcodec/huffyuvenc.c +++ b/libavcodec/huffyuvenc.c @@ -236,6 +236,12 @@ FF_DISABLE_DEPRECATION_WARNINGS avctx->coded_frame->pict_type = AV_PICTURE_TYPE_I; avctx->coded_frame->key_frame = 1; FF_ENABLE_DEPRECATION_WARNINGS +#endif +#if FF_API_PRIVATE_OPT +FF_DISABLE_DEPRECATION_WARNINGS + if (avctx->context_model == 1) + s->context = avctx->context_model; +FF_ENABLE_DEPRECATION_WARNINGS #endif s->bps = desc->comp[0].depth; @@ -313,17 +319,21 @@ FF_ENABLE_DEPRECATION_WARNINGS avctx->bits_per_coded_sample = s->bitstream_bpp; s->decorrelate = s->bitstream_bpp >= 24 && !s->yuv && !(desc->flags & AV_PIX_FMT_FLAG_PLANAR); - s->predictor = avctx->prediction_method; +#if FF_API_PRIVATE_OPT +FF_DISABLE_DEPRECATION_WARNINGS + if (avctx->prediction_method) + s->predictor = avctx->prediction_method; +FF_ENABLE_DEPRECATION_WARNINGS +#endif s->interlaced = avctx->flags & AV_CODEC_FLAG_INTERLACED_ME ? 1 : 0; - if (avctx->context_model == 1) { - s->context = avctx->context_model; + if (s->context) { if (s->flags & (AV_CODEC_FLAG_PASS1 | AV_CODEC_FLAG_PASS2)) { av_log(avctx, AV_LOG_ERROR, "context=1 is not compatible with " "2 pass huffyuv encoding\n"); return AVERROR(EINVAL); } - }else s->context= 0; + } if (avctx->codec->id == AV_CODEC_ID_HUFFYUV) { if (avctx->pix_fmt == AV_PIX_FMT_YUV420P) { @@ -332,7 +342,8 @@ FF_ENABLE_DEPRECATION_WARNINGS "vcodec=ffvhuff or format=422p\n"); return AVERROR(EINVAL); } - if (avctx->context_model) { +#if FF_API_PRIVATE_OPT + if (s->context) { av_log(avctx, AV_LOG_ERROR, "Error: per-frame huffman tables are not supported " "by huffyuv; use vcodec=ffvhuff\n"); @@ -344,6 +355,7 @@ FF_ENABLE_DEPRECATION_WARNINGS "by huffyuv; use vcodec=ffvhuff\n"); return AVERROR(EINVAL); } +#endif if (s->interlaced != ( s->height > 288 )) av_log(avctx, AV_LOG_INFO, "using huffyuv 2.2.0 or newer interlacing flag\n"); @@ -1043,24 +1055,40 @@ static av_cold int encode_end(AVCodecContext *avctx) return 0; } -static const AVOption options[] = { - { "non_deterministic", "Allow multithreading for e.g. context=1 at the expense of determinism", - offsetof(HYuvContext, non_determ), AV_OPT_TYPE_BOOL, { .i64 = 1 }, - 0, 1, AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM }, +#define OFFSET(x) offsetof(HYuvContext, x) +#define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM + +#define COMMON_OPTIONS \ + { "non_deterministic", "Allow multithreading for e.g. context=1 at the expense of determinism", \ + OFFSET(non_determ), AV_OPT_TYPE_BOOL, { .i64 = 1 }, \ + 0, 1, VE }, \ + { "pred", "Prediction method", OFFSET(predictor), AV_OPT_TYPE_INT, { .i64 = LEFT }, LEFT, MEDIAN, VE, "pred" }, \ + { "left", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = LEFT }, INT_MIN, INT_MAX, VE, "pred" }, \ + { "plane", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = PLANE }, INT_MIN, INT_MAX, VE, "pred" }, \ + { "median", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MEDIAN }, INT_MIN, INT_MAX, VE, "pred" }, \ + +static const AVOption normal_options[] = { + COMMON_OPTIONS + { NULL }, +}; + +static const AVOption ff_options[] = { + COMMON_OPTIONS + { "context", "Set per-frame huffman tables", OFFSET(context), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE }, { NULL }, }; static const AVClass normal_class = { .class_name = "huffyuv", .item_name = av_default_item_name, - .option = options, + .option = normal_options, .version = LIBAVUTIL_VERSION_INT, }; static const AVClass ff_class = { .class_name = "ffvhuff", .item_name = av_default_item_name, - .option = options, + .option = ff_options, .version = LIBAVUTIL_VERSION_INT, };