diff options
author | Baptiste Coudurier <baptiste.coudurier@gmail.com> | 2011-03-01 23:50:25 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2011-03-03 14:15:09 +0100 |
commit | 176e176288ef597852072c2c01c5b4b5520aaba1 (patch) | |
tree | cacfd26e11b20ad085cf49f84326ab6559ffd2a1 /libavcodec/dnxhdenc.c | |
parent | 5bb50c71a37e9e258e0c1053d837cf328d153138 (diff) | |
download | ffmpeg-176e176288ef597852072c2c01c5b4b5520aaba1.tar.gz |
dnxhd: allow encoding with Avid Nitris compatibility.
Signed-off-by: Mans Rullgard <mans@mansr.com>
(cherry picked from commit 99bbc781e9c134066887fc521db7a9d3607e3de1)
Diffstat (limited to 'libavcodec/dnxhdenc.c')
-rw-r--r-- | libavcodec/dnxhdenc.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/libavcodec/dnxhdenc.c b/libavcodec/dnxhdenc.c index d6f8bd3cad..2e8720ac45 100644 --- a/libavcodec/dnxhdenc.c +++ b/libavcodec/dnxhdenc.c @@ -24,11 +24,20 @@ //#define DEBUG #define RC_VARIANCE 1 // use variance or ssd for fast rc +#include "libavutil/opt.h" #include "avcodec.h" #include "dsputil.h" #include "mpegvideo.h" #include "dnxhdenc.h" +#define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM + +static const AVOption options[]={ + {"nitris_compat", "encode with Avid Nitris compatibility", offsetof(DNXHDEncContext, nitris_compat), FF_OPT_TYPE_INT, 0, 0, 1, VE}, +{NULL} +}; +static const AVClass class = { "dnxhd", av_default_item_name, options, LIBAVUTIL_VERSION_INT }; + int dct_quantize_c(MpegEncContext *s, DCTELEM *block, int n, int qscale, int *overflow); #define LAMBDA_FRAC_BITS 10 @@ -146,7 +155,7 @@ static int dnxhd_init_rc(DNXHDEncContext *ctx) if (ctx->m.avctx->mb_decision != FF_MB_DECISION_RD) FF_ALLOCZ_OR_GOTO(ctx->m.avctx, ctx->mb_cmp, ctx->m.mb_num*sizeof(RCCMPEntry), fail); - ctx->frame_bits = (ctx->cid_table->coding_unit_size - 640 - 4) * 8; + ctx->frame_bits = (ctx->cid_table->coding_unit_size - 640 - 4 - ctx->min_padding) * 8; ctx->qscale = 1; ctx->lambda = 2<<LAMBDA_FRAC_BITS; // qscale 2 return 0; @@ -198,6 +207,10 @@ static int dnxhd_encode_init(AVCodecContext *avctx) if (dnxhd_init_qmat(ctx, ctx->m.intra_quant_bias, 0) < 0) // XXX tune lbias/cbias return -1; + // Avid Nitris hardware decoder requires a minimum amount of padding in the coding unit payload + if (ctx->nitris_compat) + ctx->min_padding = 1600; + if (dnxhd_init_vlc(ctx) < 0) return -1; if (dnxhd_init_rc(ctx) < 0) @@ -858,4 +871,5 @@ AVCodec ff_dnxhd_encoder = { dnxhd_encode_end, .pix_fmts = (const enum PixelFormat[]){PIX_FMT_YUV422P, PIX_FMT_NONE}, .long_name = NULL_IF_CONFIG_SMALL("VC3/DNxHD"), + .priv_class = &class, }; |