Originally committed as revision 7008 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.5
@@ -1104,6 +1104,17 @@ int MPV_encode_init(AVCodecContext *avctx) | |||||
return -1; | return -1; | ||||
} | } | ||||
if(s->flags & CODEC_FLAG_LOW_DELAY){ | |||||
if (s->codec_id != CODEC_ID_MPEG2VIDEO && s->codec_id != CODEC_ID_MPEG1VIDEO){ | |||||
av_log(avctx, AV_LOG_ERROR, "low delay forcing is only available for mpeg1/2\n"); | |||||
return -1; | |||||
} | |||||
if (s->max_b_frames != 0){ | |||||
av_log(avctx, AV_LOG_ERROR, "b frames cannot be used with low delay\n"); | |||||
return -1; | |||||
} | |||||
} | |||||
if(s->avctx->thread_count > 1 && s->codec_id != CODEC_ID_MPEG4 | if(s->avctx->thread_count > 1 && s->codec_id != CODEC_ID_MPEG4 | ||||
&& s->codec_id != CODEC_ID_MPEG1VIDEO && s->codec_id != CODEC_ID_MPEG2VIDEO | && s->codec_id != CODEC_ID_MPEG1VIDEO && s->codec_id != CODEC_ID_MPEG2VIDEO | ||||
&& (s->codec_id != CODEC_ID_H263P || !(s->flags & CODEC_FLAG_H263P_SLICE_STRUCT))){ | && (s->codec_id != CODEC_ID_H263P || !(s->flags & CODEC_FLAG_H263P_SLICE_STRUCT))){ | ||||
@@ -1169,12 +1180,12 @@ int MPV_encode_init(AVCodecContext *avctx) | |||||
switch(avctx->codec->id) { | switch(avctx->codec->id) { | ||||
case CODEC_ID_MPEG1VIDEO: | case CODEC_ID_MPEG1VIDEO: | ||||
s->out_format = FMT_MPEG1; | s->out_format = FMT_MPEG1; | ||||
s->low_delay= 0; //s->max_b_frames ? 0 : 1; | |||||
s->low_delay= !!(s->flags & CODEC_FLAG_LOW_DELAY); | |||||
avctx->delay= s->low_delay ? 0 : (s->max_b_frames + 1); | avctx->delay= s->low_delay ? 0 : (s->max_b_frames + 1); | ||||
break; | break; | ||||
case CODEC_ID_MPEG2VIDEO: | case CODEC_ID_MPEG2VIDEO: | ||||
s->out_format = FMT_MPEG1; | s->out_format = FMT_MPEG1; | ||||
s->low_delay= 0; //s->max_b_frames ? 0 : 1; | |||||
s->low_delay= !!(s->flags & CODEC_FLAG_LOW_DELAY); | |||||
avctx->delay= s->low_delay ? 0 : (s->max_b_frames + 1); | avctx->delay= s->low_delay ? 0 : (s->max_b_frames + 1); | ||||
s->rtp_mode= 1; | s->rtp_mode= 1; | ||||
break; | break; | ||||
@@ -441,7 +441,7 @@ static const AVOption options[]={ | |||||
{"truncated", NULL, 0, FF_OPT_TYPE_CONST, CODEC_FLAG_TRUNCATED, INT_MIN, INT_MAX, 0, "flags"}, | {"truncated", NULL, 0, FF_OPT_TYPE_CONST, CODEC_FLAG_TRUNCATED, INT_MIN, INT_MAX, 0, "flags"}, | ||||
{"naq", "normalize adaptive quantization", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_NORMALIZE_AQP, INT_MIN, INT_MAX, V|E, "flags"}, | {"naq", "normalize adaptive quantization", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_NORMALIZE_AQP, INT_MIN, INT_MAX, V|E, "flags"}, | ||||
{"ildct", "use interlaced dct", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_INTERLACED_DCT, INT_MIN, INT_MAX, V|E, "flags"}, | {"ildct", "use interlaced dct", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_INTERLACED_DCT, INT_MIN, INT_MAX, V|E, "flags"}, | ||||
{"low_delay", "force low delay", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_LOW_DELAY, INT_MIN, INT_MAX, V|D, "flags"}, | |||||
{"low_delay", "force low delay", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_LOW_DELAY, INT_MIN, INT_MAX, V|D|E, "flags"}, | |||||
{"alt", "enable alternate scantable (mpeg2/mpeg4)", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_ALT_SCAN, INT_MIN, INT_MAX, V|E, "flags"}, | {"alt", "enable alternate scantable (mpeg2/mpeg4)", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_ALT_SCAN, INT_MIN, INT_MAX, V|E, "flags"}, | ||||
{"trell", "use trellis quantization", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_TRELLIS_QUANT, INT_MIN, INT_MAX, V|E, "flags"}, | {"trell", "use trellis quantization", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_TRELLIS_QUANT, INT_MIN, INT_MAX, V|E, "flags"}, | ||||
{"global_header", "place global headers in extradata instead of every keyframe", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_GLOBAL_HEADER, INT_MIN, INT_MAX, 0, "flags"}, | {"global_header", "place global headers in extradata instead of every keyframe", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_GLOBAL_HEADER, INT_MIN, INT_MAX, 0, "flags"}, | ||||