diff options
author | Christophe Gisquet <christophe.gisquet@gmail.com> | 2014-06-13 00:21:44 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-08-19 13:47:18 +0200 |
commit | 1467780772d6f6fd72e882b5b2677ae9acbc1297 (patch) | |
tree | f64da167bc912befa830360cb6a058e4ac64cd62 /libavcodec/huffyuvenc.c | |
parent | 6380f2e3670a8cfc29b9b02da0f2be0c537315f8 (diff) | |
download | ffmpeg-1467780772d6f6fd72e882b5b2677ae9acbc1297.tar.gz |
huffyuvenc: add a non-deterministic option
Not actually used in huffyuvenc, but rather in setting the frame
threading.
Example for some files:
context=0: 851974 27226 1137281
context=1,ND=0: 471819 22604 972351
context=1,ND=1: 472875 22673 972582
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/huffyuvenc.c')
-rw-r--r-- | libavcodec/huffyuvenc.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/libavcodec/huffyuvenc.c b/libavcodec/huffyuvenc.c index 8d72b6328e..fd6f570e66 100644 --- a/libavcodec/huffyuvenc.c +++ b/libavcodec/huffyuvenc.c @@ -34,6 +34,7 @@ #include "huffyuvencdsp.h" #include "internal.h" #include "put_bits.h" +#include "libavutil/opt.h" #include "libavutil/pixdesc.h" static inline void diff_bytes(HYuvContext *s, uint8_t *dst, @@ -990,6 +991,27 @@ 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_INT, { .i64 = 1 }, + 0, 1, AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM }, + { NULL }, +}; + +static const AVClass normal_class = { + .class_name = "huffyuv", + .item_name = av_default_item_name, + .option = options, + .version = LIBAVUTIL_VERSION_INT, +}; + +static const AVClass ff_class = { + .class_name = "ffvhuff", + .item_name = av_default_item_name, + .option = options, + .version = LIBAVUTIL_VERSION_INT, +}; + AVCodec ff_huffyuv_encoder = { .name = "huffyuv", .long_name = NULL_IF_CONFIG_SMALL("Huffyuv / HuffYUV"), @@ -1000,6 +1022,7 @@ AVCodec ff_huffyuv_encoder = { .encode2 = encode_frame, .close = encode_end, .capabilities = CODEC_CAP_FRAME_THREADS | CODEC_CAP_INTRA_ONLY, + .priv_class = &normal_class, .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV422P, AV_PIX_FMT_RGB24, AV_PIX_FMT_RGB32, AV_PIX_FMT_NONE @@ -1017,6 +1040,7 @@ AVCodec ff_ffvhuff_encoder = { .encode2 = encode_frame, .close = encode_end, .capabilities = CODEC_CAP_FRAME_THREADS | CODEC_CAP_INTRA_ONLY, + .priv_class = &ff_class, .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV440P, |