diff --git a/libavformat/aiffdec.c b/libavformat/aiffdec.c index 34e6d88ab9..54972de5e0 100644 --- a/libavformat/aiffdec.c +++ b/libavformat/aiffdec.c @@ -268,9 +268,6 @@ static int aiff_read_header(AVFormatContext *s, got_sound: /* Now positioned, get the sound data start and end */ - if (st->nb_frames) - s->file_size = st->nb_frames * st->codec->block_align; - av_set_pts_info(st, 64, 1, st->codec->sample_rate); st->start_time = 0; st->duration = st->codec->frame_size ? diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 70d466e0d1..61b231ec1d 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -716,10 +716,12 @@ typedef struct AVFormatContext { */ int64_t duration; +#if FF_API_FILESIZE /** * decoding: total file size, 0 if unknown */ - int64_t file_size; + attribute_deprecated int64_t file_size; +#endif /** * Decoding: total stream bitrate in bit/s, 0 if not diff --git a/libavformat/cafdec.c b/libavformat/cafdec.c index 38cde3be50..02d1e3ccaa 100644 --- a/libavformat/cafdec.c +++ b/libavformat/cafdec.c @@ -286,8 +286,6 @@ static int read_header(AVFormatContext *s, "block size or frame size are variable.\n"); return AVERROR_INVALIDDATA; } - s->file_size = avio_size(pb); - s->file_size = FFMAX(0, s->file_size); av_set_pts_info(st, 64, 1, st->codec->sample_rate); st->start_time = 0; diff --git a/libavformat/qcp.c b/libavformat/qcp.c index aefb076e3b..291eb182ed 100644 --- a/libavformat/qcp.c +++ b/libavformat/qcp.c @@ -92,8 +92,7 @@ static int qcp_read_header(AVFormatContext *s, AVFormatParameters *ap) return AVERROR(ENOMEM); avio_rb32(pb); // "RIFF" - s->file_size = avio_rl32(pb) + 8; - avio_skip(pb, 8 + 4 + 1 + 1); // "QLCMfmt " + chunk-size + major-version + minor-version + avio_skip(pb, 4 + 8 + 4 + 1 + 1); // filesize + "QLCMfmt " + chunk-size + major-version + minor-version st->codec->codec_type = AVMEDIA_TYPE_AUDIO; st->codec->channels = 1; diff --git a/libavformat/utils.c b/libavformat/utils.c index 3115723668..6393b62615 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -1837,7 +1837,7 @@ static int has_duration(AVFormatContext *ic) static void update_stream_timings(AVFormatContext *ic) { int64_t start_time, start_time1, end_time, end_time1; - int64_t duration, duration1; + int64_t duration, duration1, filesize; int i; AVStream *st; @@ -1872,9 +1872,9 @@ static void update_stream_timings(AVFormatContext *ic) } if (duration != INT64_MIN) { ic->duration = duration; - if (ic->file_size > 0) { + if (ic->pb && (filesize = avio_size(ic->pb)) > 0) { /* compute the bitrate */ - ic->bit_rate = (double)ic->file_size * 8.0 * AV_TIME_BASE / + ic->bit_rate = (double)filesize * 8.0 * AV_TIME_BASE / (double)ic->duration; } } @@ -1916,9 +1916,8 @@ static void estimate_timings_from_bit_rate(AVFormatContext *ic) /* if duration is already set, we believe it */ if (ic->duration == AV_NOPTS_VALUE && - ic->bit_rate != 0 && - ic->file_size != 0) { - filesize = ic->file_size; + ic->bit_rate != 0) { + filesize = ic->pb ? avio_size(ic->pb) : 0; if (filesize > 0) { for(i = 0; i < ic->nb_streams; i++) { st = ic->streams[i]; @@ -1962,7 +1961,7 @@ static void estimate_timings_from_pts(AVFormatContext *ic, int64_t old_offset) /* estimate the end time (duration) */ /* XXX: may need to support wrapping */ - filesize = ic->file_size; + filesize = ic->pb ? avio_size(ic->pb) : 0; end_time = AV_NOPTS_VALUE; do{ offset = filesize - (DURATION_MAX_READ_SIZE<file_size = file_size; if ((!strcmp(ic->iformat->name, "mpeg") || !strcmp(ic->iformat->name, "mpegts")) && diff --git a/libavformat/version.h b/libavformat/version.h index 53c585a06b..1a562d6a87 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -86,5 +86,8 @@ #ifndef FF_API_TIMESTAMP #define FF_API_TIMESTAMP (LIBAVFORMAT_VERSION_MAJOR < 54) #endif +#ifndef FF_API_FILESIZE +#define FF_API_FILESIZE (LIBAVFORMAT_VERSION_MAJOR < 54) +#endif #endif /* AVFORMAT_VERSION_H */