[FFmpeg-devel] [PATCH] iff: support seeking with maud
Peter Ross
pross at xvid.org
Sun Jan 6 00:50:50 CET 2013
On Sat, Jan 05, 2013 at 08:44:04PM +0000, Paul B Mahol wrote:
> Signed-off-by: Paul B Mahol <onemda at gmail.com>
> ---
> libavformat/iff.c | 15 ++++++++-------
> 1 file changed, 8 insertions(+), 7 deletions(-)
>
> diff --git a/libavformat/iff.c b/libavformat/iff.c
> index 0e945da..348026a 100644
> --- a/libavformat/iff.c
> +++ b/libavformat/iff.c
> @@ -93,9 +93,9 @@ typedef enum {
> } svx8_compression_type;
>
> typedef struct {
> - uint64_t body_pos;
> + int64_t body_pos;
> + int64_t body_end;
> uint32_t body_size;
> - uint32_t sent_bytes;
> svx8_compression_type svx8_compression;
> unsigned maud_bits;
> unsigned maud_compression;
> @@ -227,6 +227,7 @@ static int iff_read_header(AVFormatContext *s)
> case ID_DBOD:
> case ID_MDAT:
> iff->body_pos = avio_tell(pb);
> + iff->body_end = iff->body_pos + data_size;
> iff->body_size = data_size;
> break;
>
> @@ -434,14 +435,14 @@ static int iff_read_packet(AVFormatContext *s,
> AVIOContext *pb = s->pb;
> AVStream *st = s->streams[0];
> int ret;
> + int64_t pos = avio_tell(pb);
>
> - if(iff->sent_bytes >= iff->body_size)
> + if (pos >= iff->body_end)
> return AVERROR_EOF;
>
> if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
> if (st->codec->codec_tag == ID_MAUD) {
> - ret = av_get_packet(pb, pkt,
> - FFMIN(iff->body_size - iff->sent_bytes, 1024 * st->codec->block_align));
> + ret = av_get_packet(pb, pkt, FFMIN(iff->body_end - pos, 1024 * st->codec->block_align));
> } else {
> ret = av_get_packet(pb, pkt, iff->body_size);
> }
> @@ -459,11 +460,10 @@ static int iff_read_packet(AVFormatContext *s,
> av_assert0(0);
> }
>
> - if(iff->sent_bytes == 0)
> + if (pos == iff->body_pos)
> pkt->flags |= AV_PKT_FLAG_KEY;
> if (ret < 0)
> return ret;
> - iff->sent_bytes += ret;
> pkt->stream_index = 0;
> return ret;
> }
> @@ -475,4 +475,5 @@ AVInputFormat ff_iff_demuxer = {
> .read_probe = iff_probe,
> .read_header = iff_read_header,
> .read_packet = iff_read_packet,
> + .flags = AVFMT_GENERIC_INDEX,
> };
> --
> 1.7.11.4
Looks good.
-- Peter
(A907 E02F A6E5 0CD2 34CD 20D2 6760 79C5 AC40 DD6B)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20130106/5f18bcd2/attachment.asc>
More information about the ffmpeg-devel
mailing list