You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
h263/p encoder: add 'obmc' private option.
Deprecate CODEC_FLAG_OBMC
This commit is contained in:
@@ -606,8 +606,8 @@ typedef struct RcOverride{
|
|||||||
#define CODEC_FLAG_QP_RD 0x08000000 ///< Use rate distortion optimization for qp selectioon.
|
#define CODEC_FLAG_QP_RD 0x08000000 ///< Use rate distortion optimization for qp selectioon.
|
||||||
#if FF_API_MPEGVIDEO_GLOBAL_OPTS
|
#if FF_API_MPEGVIDEO_GLOBAL_OPTS
|
||||||
#define CODEC_FLAG_H263P_AIV 0x00000008 ///< H.263 alternative inter VLC
|
#define CODEC_FLAG_H263P_AIV 0x00000008 ///< H.263 alternative inter VLC
|
||||||
#endif
|
|
||||||
#define CODEC_FLAG_OBMC 0x00000001 ///< OBMC
|
#define CODEC_FLAG_OBMC 0x00000001 ///< OBMC
|
||||||
|
#endif
|
||||||
#define CODEC_FLAG_LOOP_FILTER 0x00000800 ///< loop filter
|
#define CODEC_FLAG_LOOP_FILTER 0x00000800 ///< loop filter
|
||||||
#define CODEC_FLAG_H263P_SLICE_STRUCT 0x10000000
|
#define CODEC_FLAG_H263P_SLICE_STRUCT 0x10000000
|
||||||
#define CODEC_FLAG_INTERLACED_ME 0x20000000 ///< interlaced motion estimation
|
#define CODEC_FLAG_INTERLACED_ME 0x20000000 ///< interlaced motion estimation
|
||||||
|
@@ -337,12 +337,12 @@ av_cold int MPV_encode_init(AVCodecContext *avctx)
|
|||||||
|| (s->flags&CODEC_FLAG_QP_RD))
|
|| (s->flags&CODEC_FLAG_QP_RD))
|
||||||
&& !s->fixed_qscale;
|
&& !s->fixed_qscale;
|
||||||
|
|
||||||
s->obmc= !!(s->flags & CODEC_FLAG_OBMC);
|
|
||||||
s->loop_filter= !!(s->flags & CODEC_FLAG_LOOP_FILTER);
|
s->loop_filter= !!(s->flags & CODEC_FLAG_LOOP_FILTER);
|
||||||
#if FF_API_MPEGVIDEO_GLOBAL_OPTS
|
#if FF_API_MPEGVIDEO_GLOBAL_OPTS
|
||||||
s->alternate_scan= !!(s->flags & CODEC_FLAG_ALT_SCAN);
|
s->alternate_scan= !!(s->flags & CODEC_FLAG_ALT_SCAN);
|
||||||
s->intra_vlc_format= !!(s->flags2 & CODEC_FLAG2_INTRA_VLC);
|
s->intra_vlc_format= !!(s->flags2 & CODEC_FLAG2_INTRA_VLC);
|
||||||
s->q_scale_type= !!(s->flags2 & CODEC_FLAG2_NON_LINEAR_QUANT);
|
s->q_scale_type= !!(s->flags2 & CODEC_FLAG2_NON_LINEAR_QUANT);
|
||||||
|
s->obmc= !!(s->flags & CODEC_FLAG_OBMC);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(avctx->rc_max_rate && !avctx->rc_buffer_size){
|
if(avctx->rc_max_rate && !avctx->rc_buffer_size){
|
||||||
@@ -396,10 +396,12 @@ av_cold int MPV_encode_init(AVCodecContext *avctx)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if FF_API_MPEGVIDEO_GLOBAL_OPTS
|
||||||
if(s->obmc && s->codec_id != CODEC_ID_H263 && s->codec_id != CODEC_ID_H263P){
|
if(s->obmc && s->codec_id != CODEC_ID_H263 && s->codec_id != CODEC_ID_H263P){
|
||||||
av_log(avctx, AV_LOG_ERROR, "OBMC is only supported with H263(+)\n");
|
av_log(avctx, AV_LOG_ERROR, "OBMC is only supported with H263(+)\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if(s->quarter_sample && s->codec_id != CODEC_ID_MPEG4){
|
if(s->quarter_sample && s->codec_id != CODEC_ID_MPEG4){
|
||||||
av_log(avctx, AV_LOG_ERROR, "qpel not supported by codec\n");
|
av_log(avctx, AV_LOG_ERROR, "qpel not supported by codec\n");
|
||||||
@@ -598,7 +600,6 @@ av_cold int MPV_encode_init(AVCodecContext *avctx)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
s->out_format = FMT_H263;
|
s->out_format = FMT_H263;
|
||||||
s->obmc= (avctx->flags & CODEC_FLAG_OBMC) ? 1:0;
|
|
||||||
avctx->delay=0;
|
avctx->delay=0;
|
||||||
s->low_delay=1;
|
s->low_delay=1;
|
||||||
break;
|
break;
|
||||||
@@ -614,7 +615,6 @@ av_cold int MPV_encode_init(AVCodecContext *avctx)
|
|||||||
#endif
|
#endif
|
||||||
s->h263_aic= (avctx->flags & CODEC_FLAG_AC_PRED) ? 1:0;
|
s->h263_aic= (avctx->flags & CODEC_FLAG_AC_PRED) ? 1:0;
|
||||||
s->modified_quant= s->h263_aic;
|
s->modified_quant= s->h263_aic;
|
||||||
s->obmc= (avctx->flags & CODEC_FLAG_OBMC) ? 1:0;
|
|
||||||
s->loop_filter= (avctx->flags & CODEC_FLAG_LOOP_FILTER) ? 1:0;
|
s->loop_filter= (avctx->flags & CODEC_FLAG_LOOP_FILTER) ? 1:0;
|
||||||
s->unrestricted_mv= s->obmc || s->loop_filter || s->umvplus;
|
s->unrestricted_mv= s->obmc || s->loop_filter || s->umvplus;
|
||||||
s->h263_slice_structured= (s->flags & CODEC_FLAG_H263P_SLICE_STRUCT) ? 1:0;
|
s->h263_slice_structured= (s->flags & CODEC_FLAG_H263P_SLICE_STRUCT) ? 1:0;
|
||||||
@@ -3783,6 +3783,20 @@ int dct_quantize_c(MpegEncContext *s,
|
|||||||
return last_non_zero;
|
return last_non_zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define OFFSET(x) offsetof(MpegEncContext, x)
|
||||||
|
#define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
|
||||||
|
static const AVOption h263_options[] = {
|
||||||
|
{ "obmc", "use overlapped block motion compensation.", OFFSET(obmc), FF_OPT_TYPE_INT, { 0 }, 0, 1, VE },
|
||||||
|
{ NULL },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const AVClass h263_class = {
|
||||||
|
.class_name = "H.263 encoder",
|
||||||
|
.item_name = av_default_item_name,
|
||||||
|
.option = h263_options,
|
||||||
|
.version = LIBAVUTIL_VERSION_INT,
|
||||||
|
};
|
||||||
|
|
||||||
AVCodec ff_h263_encoder = {
|
AVCodec ff_h263_encoder = {
|
||||||
.name = "h263",
|
.name = "h263",
|
||||||
.type = AVMEDIA_TYPE_VIDEO,
|
.type = AVMEDIA_TYPE_VIDEO,
|
||||||
@@ -3793,19 +3807,19 @@ AVCodec ff_h263_encoder = {
|
|||||||
.close = MPV_encode_end,
|
.close = MPV_encode_end,
|
||||||
.pix_fmts= (const enum PixelFormat[]){PIX_FMT_YUV420P, PIX_FMT_NONE},
|
.pix_fmts= (const enum PixelFormat[]){PIX_FMT_YUV420P, PIX_FMT_NONE},
|
||||||
.long_name= NULL_IF_CONFIG_SMALL("H.263 / H.263-1996"),
|
.long_name= NULL_IF_CONFIG_SMALL("H.263 / H.263-1996"),
|
||||||
|
.priv_class = &h263_class,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define OFFSET(x) offsetof(MpegEncContext, x)
|
static const AVOption h263p_options[] = {
|
||||||
#define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
|
|
||||||
static const AVOption options[] = {
|
|
||||||
{ "umv", "Use unlimited motion vectors.", OFFSET(umvplus), FF_OPT_TYPE_INT, { 0 }, 0, 1, VE },
|
{ "umv", "Use unlimited motion vectors.", OFFSET(umvplus), FF_OPT_TYPE_INT, { 0 }, 0, 1, VE },
|
||||||
{ "aiv", "Use alternative inter VLC.", OFFSET(alt_inter_vlc), FF_OPT_TYPE_INT, { 0 }, 0, 1, VE },
|
{ "aiv", "Use alternative inter VLC.", OFFSET(alt_inter_vlc), FF_OPT_TYPE_INT, { 0 }, 0, 1, VE },
|
||||||
|
{ "obmc", "use overlapped block motion compensation.", OFFSET(obmc), FF_OPT_TYPE_INT, { 0 }, 0, 1, VE },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
};
|
};
|
||||||
static const AVClass h263p_class = {
|
static const AVClass h263p_class = {
|
||||||
.class_name = "H.263p encoder",
|
.class_name = "H.263p encoder",
|
||||||
.item_name = av_default_item_name,
|
.item_name = av_default_item_name,
|
||||||
.option = options,
|
.option = h263p_options,
|
||||||
.version = LIBAVUTIL_VERSION_INT,
|
.version = LIBAVUTIL_VERSION_INT,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -75,7 +75,9 @@ static const AVOption options[]={
|
|||||||
{"bt", "set video bitrate tolerance (in bits/s)", OFFSET(bit_rate_tolerance), FF_OPT_TYPE_INT, {.dbl = AV_CODEC_DEFAULT_BITRATE*20 }, 1, INT_MAX, V|E},
|
{"bt", "set video bitrate tolerance (in bits/s)", OFFSET(bit_rate_tolerance), FF_OPT_TYPE_INT, {.dbl = AV_CODEC_DEFAULT_BITRATE*20 }, 1, INT_MAX, V|E},
|
||||||
{"flags", NULL, OFFSET(flags), FF_OPT_TYPE_FLAGS, {.dbl = DEFAULT }, 0, UINT_MAX, V|A|E|D, "flags"},
|
{"flags", NULL, OFFSET(flags), FF_OPT_TYPE_FLAGS, {.dbl = DEFAULT }, 0, UINT_MAX, V|A|E|D, "flags"},
|
||||||
{"mv4", "use four motion vector by macroblock (mpeg4)", 0, FF_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_4MV }, INT_MIN, INT_MAX, V|E, "flags"},
|
{"mv4", "use four motion vector by macroblock (mpeg4)", 0, FF_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_4MV }, INT_MIN, INT_MAX, V|E, "flags"},
|
||||||
|
#if FF_API_MPEGVIDEO_GLOBAL_OPTS
|
||||||
{"obmc", "use overlapped block motion compensation (h263+)", 0, FF_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_OBMC }, INT_MIN, INT_MAX, V|E, "flags"},
|
{"obmc", "use overlapped block motion compensation (h263+)", 0, FF_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_OBMC }, INT_MIN, INT_MAX, V|E, "flags"},
|
||||||
|
#endif
|
||||||
{"qpel", "use 1/4 pel motion compensation", 0, FF_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_QPEL }, INT_MIN, INT_MAX, V|E, "flags"},
|
{"qpel", "use 1/4 pel motion compensation", 0, FF_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_QPEL }, INT_MIN, INT_MAX, V|E, "flags"},
|
||||||
{"loop", "use loop filter", 0, FF_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_LOOP_FILTER }, INT_MIN, INT_MAX, V|E, "flags"},
|
{"loop", "use loop filter", 0, FF_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_LOOP_FILTER }, INT_MIN, INT_MAX, V|E, "flags"},
|
||||||
{"qscale", "use fixed qscale", 0, FF_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_QSCALE }, INT_MIN, INT_MAX, 0, "flags"},
|
{"qscale", "use fixed qscale", 0, FF_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_QSCALE }, INT_MIN, INT_MAX, 0, "flags"},
|
||||||
|
Reference in New Issue
Block a user