From 4623420d84e97d141c20078cfa09c7568f693bd5 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sat, 27 Aug 2011 10:16:14 +0200 Subject: [PATCH] mpeg4enc: add 'data_partitioning' private option. Deprecate CODEC_FLAG_PART --- libavcodec/avcodec.h | 2 ++ libavcodec/mpeg4videoenc.c | 17 +++++++++++++++++ libavcodec/mpegvideo_enc.c | 7 ++++++- libavcodec/options.c | 2 ++ 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 2059fd7f9bf30..6cee81e4608c8 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -570,7 +570,9 @@ typedef struct RcOverride{ #define CODEC_FLAG_QPEL 0x0010 ///< Use qpel MC. #define CODEC_FLAG_GMC 0x0020 ///< Use GMC. #define CODEC_FLAG_MV0 0x0040 ///< Always try a MB with MV=<0,0>. +#if FF_API_MPEGVIDEO_GLOBAL_OPTS #define CODEC_FLAG_PART 0x0080 ///< Use data partitioning. +#endif /** * The parent program guarantees that the input for B-frames containing * streams is not written to for at least s->max_b_frames+1 frames, if diff --git a/libavcodec/mpeg4videoenc.c b/libavcodec/mpeg4videoenc.c index 900903779c3cc..ad3e604df0a8d 100644 --- a/libavcodec/mpeg4videoenc.c +++ b/libavcodec/mpeg4videoenc.c @@ -20,6 +20,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "libavutil/log.h" +#include "libavutil/opt.h" #include "mpegvideo.h" #include "h263.h" #include "mpeg4video.h" @@ -1274,6 +1276,20 @@ void ff_mpeg4_encode_video_packet_header(MpegEncContext *s) put_bits(&s->pb, 1, 0); /* no HEC */ } +#define OFFSET(x) offsetof(MpegEncContext, x) +#define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM +static const AVOption options[] = { + { "data_partitioning", "Use data partitioning.", OFFSET(data_partitioning), FF_OPT_TYPE_INT, { 0 }, 0, 1, VE }, + { NULL }, +}; + +static const AVClass mpeg4enc_class = { + .class_name = "MPEG4 encoder", + .item_name = av_default_item_name, + .option = options, + .version = LIBAVUTIL_VERSION_INT, +}; + AVCodec ff_mpeg4_encoder = { .name = "mpeg4", .type = AVMEDIA_TYPE_VIDEO, @@ -1285,4 +1301,5 @@ AVCodec ff_mpeg4_encoder = { .pix_fmts= (const enum PixelFormat[]){PIX_FMT_YUV420P, PIX_FMT_NONE}, .capabilities= CODEC_CAP_DELAY | CODEC_CAP_SLICE_THREADS, .long_name= NULL_IF_CONFIG_SMALL("MPEG-4 part 2"), + .priv_class = &mpeg4enc_class, }; diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 1f8f9f49d6174..47f431c1a9cdb 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -305,7 +305,10 @@ av_cold int MPV_encode_init(AVCodecContext *avctx) s->luma_elim_threshold = avctx->luma_elim_threshold; s->chroma_elim_threshold= avctx->chroma_elim_threshold; s->strict_std_compliance= avctx->strict_std_compliance; - s->data_partitioning= avctx->flags & CODEC_FLAG_PART; +#if FF_API_MPEGVIDEO_GLOBAL_OPTS + if (avctx->flags & CODEC_FLAG_PART) + s->data_partitioning = 1; +#endif s->quarter_sample= (avctx->flags & CODEC_FLAG_QPEL)!=0; s->mpeg_quant= avctx->mpeg_quant; s->rtp_mode= !!avctx->rtp_payload_size; @@ -402,10 +405,12 @@ av_cold int MPV_encode_init(AVCodecContext *avctx) return -1; } +#if FF_API_MPEGVIDEO_GLOBAL_OPTS if(s->data_partitioning && s->codec_id != CODEC_ID_MPEG4){ av_log(avctx, AV_LOG_ERROR, "data partitioning not supported by codec\n"); return -1; } +#endif if(s->max_b_frames && s->codec_id != CODEC_ID_MPEG4 && s->codec_id != CODEC_ID_MPEG1VIDEO && s->codec_id != CODEC_ID_MPEG2VIDEO){ av_log(avctx, AV_LOG_ERROR, "b frames not supported by codec\n"); diff --git a/libavcodec/options.c b/libavcodec/options.c index 4ad86e6c1543e..7828dc9473d06 100644 --- a/libavcodec/options.c +++ b/libavcodec/options.c @@ -81,7 +81,9 @@ static const AVOption options[]={ {"qscale", "use fixed qscale", 0, FF_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_QSCALE }, INT_MIN, INT_MAX, 0, "flags"}, {"gmc", "use gmc", 0, FF_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_GMC }, INT_MIN, INT_MAX, V|E, "flags"}, {"mv0", "always try a mb with mv=<0,0>", 0, FF_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_MV0 }, INT_MIN, INT_MAX, V|E, "flags"}, +#if FF_API_MPEGVIDEO_GLOBAL_OPTS {"part", "use data partitioning", 0, FF_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_PART }, INT_MIN, INT_MAX, V|E, "flags"}, +#endif {"input_preserved", NULL, 0, FF_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_INPUT_PRESERVED }, INT_MIN, INT_MAX, 0, "flags"}, {"pass1", "use internal 2pass ratecontrol in first pass mode", 0, FF_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_PASS1 }, INT_MIN, INT_MAX, 0, "flags"}, {"pass2", "use internal 2pass ratecontrol in second pass mode", 0, FF_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_PASS2 }, INT_MIN, INT_MAX, 0, "flags"},