From f172132f825cec4e446a5bdde4ffa9065ba9061f Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sun, 9 Oct 2011 15:04:38 +0200 Subject: [PATCH] mpegenc: add preload private option. Deprecate AVFormatContext.preload. --- avconv.c | 7 +++++-- libavformat/avformat.h | 4 +++- libavformat/mpegenc.c | 10 +++++++++- libavformat/version.h | 3 +++ 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/avconv.c b/avconv.c index 8fc6fd1425..742695bc3f 100644 --- a/avconv.c +++ b/avconv.c @@ -375,7 +375,6 @@ static void reset_options(OptionsContext *o) memset(o, 0, sizeof(*o)); - o->mux_preload = 0.5; o->mux_max_delay = 0.7; o->recording_time = INT64_MAX; o->limit_filesize = UINT64_MAX; @@ -3572,7 +3571,11 @@ static void opt_output_file(void *optctx, const char *filename) } } - oc->preload = (int)(o->mux_preload * AV_TIME_BASE); + if (o->mux_preload) { + uint8_t buf[64]; + snprintf(buf, sizeof(buf), "%d", (int)(o->mux_preload*AV_TIME_BASE)); + av_dict_set(&output_files[nb_output_files - 1].opts, "preload", buf, 0); + } oc->max_delay = (int)(o->mux_max_delay * AV_TIME_BASE); oc->flags |= AVFMT_FLAG_NONBLOCK; diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 65f66d84d3..74c7140e35 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -743,7 +743,9 @@ typedef struct AVFormatContext { attribute_deprecated int mux_rate; #endif unsigned int packet_size; - int preload; +#if FF_API_PRELOAD + attribute_deprecated int preload; +#endif int max_delay; #if FF_API_LOOP_OUTPUT diff --git a/libavformat/mpegenc.c b/libavformat/mpegenc.c index 5e8954c902..f824d6cb05 100644 --- a/libavformat/mpegenc.c +++ b/libavformat/mpegenc.c @@ -77,6 +77,7 @@ typedef struct { double vcd_padding_bitrate; //FIXME floats int64_t vcd_padding_bytes_written; + int preload; } MpegMuxContext; extern AVOutputFormat ff_mpeg1vcd_muxer; @@ -1158,9 +1159,15 @@ static int mpeg_mux_write_packet(AVFormatContext *ctx, AVPacket *pkt) StreamInfo *stream = st->priv_data; int64_t pts, dts; PacketDesc *pkt_desc; - const int preload= av_rescale(ctx->preload, 90000, AV_TIME_BASE); + int preload; const int is_iframe = st->codec->codec_type == AVMEDIA_TYPE_VIDEO && (pkt->flags & AV_PKT_FLAG_KEY); +#if FF_API_PRELOAD + if (ctx->preload) + s->preload = ctx->preload; +#endif + preload = av_rescale(s->preload, 90000, AV_TIME_BASE); + pts= pkt->pts; dts= pkt->dts; @@ -1237,6 +1244,7 @@ static int mpeg_mux_end(AVFormatContext *ctx) #define E AV_OPT_FLAG_ENCODING_PARAM static const AVOption options[] = { { "muxrate", NULL, OFFSET(mux_rate), AV_OPT_TYPE_INT, {0}, 0, INT_MAX, E }, + { "preload", "Initial demux-decode delay in microseconds.", OFFSET(preload), AV_OPT_TYPE_INT, {500000}, 0, INT_MAX, E}, { NULL }, }; diff --git a/libavformat/version.h b/libavformat/version.h index 9de30ea55b..3a6a4f611e 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -98,5 +98,8 @@ #ifndef FF_API_NEW_STREAM #define FF_API_NEW_STREAM (LIBAVFORMAT_VERSION_MAJOR < 54) #endif +#ifndef FF_API_PRELOAD +#define FF_API_PRELOAD (LIBAVFORMAT_VERSION_MAJOR < 54) +#endif #endif /* AVFORMAT_VERSION_H */