diff options
author | Michael Niedermayer | 2012-03-21 00:15:18 +0100 |
---|---|---|
committer | Michael Niedermayer | 2012-03-21 01:33:53 +0100 |
commit | 0ebd83617fe008b7e9766f659cc3d9618b2d80d2 (patch) | |
tree | 23bc388bf6b66cf58d7a90c0d2529e53ed984561 /libavformat/xa.c | |
parent | 745a33a44318ad6d6f74835a417397cdd9dda9a9 (diff) | |
parent | c9594fe0fb6dd123fa25cb27fe5bc976ff3a9051 (diff) |
Merge remote-tracking branch 'qatar/master'
* qatar/master: (27 commits)
avconv: free packet in write_frame() when discarding due to frame number limit
FATE: use +/- flag option syntax for vp8 emu-edge tests
lavf: make av_interleave_packet_per_dts() private.
lavf: deprecate av_read_packet().
oggdec: output correct timestamps for Vorbis
avconv: pass input stream timestamps to audio encoders
lavc: shrink encoded audio packet size after encoding.
xa: set correct bit rate
xa: do not set bit_rate, block_align, or bits_per_coded_sample
xa: fix end-of-file handling
xa: fix timestamp calculation
bink: fix typo in FFALIGN() argument
bink: align plane width to 8 when calculating bundle sizes
doc: pass -Idoc texi2html and texi2pod
doc: texi2pod: add -I flag
movenc: Add a min_frag_duration option
rtsp: Set the default delay to 0.1 s for the RTSP/SDP/RTP demuxers
libavformat: Set the default for the max_delay option to -1
Generate manpages for AV{Format,Codec}Context AVOptions.
doc/avconv: remove entries for AVOptions.
...
Conflicts:
doc/Makefile
doc/ffmpeg.texi
doc/muxers.texi
ffmpeg.c
libavcodec/Makefile
libavcodec/options.c
libavcodec/vp8.c
libavformat/options.c
tests/fate/demux.mak
tests/ref/fate/truemotion1-15
tests/ref/fate/truemotion1-24
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat/xa.c')
-rw-r--r-- | libavformat/xa.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/libavformat/xa.c b/libavformat/xa.c index 1e51eec934..c54d7f8b9c 100644 --- a/libavformat/xa.c +++ b/libavformat/xa.c @@ -38,7 +38,6 @@ typedef struct MaxisXADemuxContext { uint32_t out_size; uint32_t sent_bytes; - uint32_t audio_frame_counter; } MaxisXADemuxContext; static int xa_probe(AVProbeData *p) @@ -81,12 +80,15 @@ static int xa_read_header(AVFormatContext *s) avio_skip(pb, 2); /* Skip the tag */ st->codec->channels = avio_rl16(pb); st->codec->sample_rate = avio_rl32(pb); - /* Value in file is average byte rate*/ - st->codec->bit_rate = avio_rl32(pb) * 8; - st->codec->block_align = avio_rl16(pb); - st->codec->bits_per_coded_sample = avio_rl16(pb); + avio_skip(pb, 4); /* Skip average byte rate */ + avio_skip(pb, 2); /* Skip block align */ + avio_skip(pb, 2); /* Skip bits-per-sample */ + + st->codec->bit_rate = av_clip(15LL * st->codec->channels * 8 * + st->codec->sample_rate / 28, 0, INT_MAX); avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate); + st->start_time = 0; return 0; } @@ -100,8 +102,8 @@ static int xa_read_packet(AVFormatContext *s, unsigned int packet_size; int ret; - if(xa->sent_bytes > xa->out_size) - return AVERROR(EIO); + if (xa->sent_bytes >= xa->out_size) + return AVERROR_EOF; /* 1 byte header and 14 bytes worth of samples * number channels per block */ packet_size = 15*st->codec->channels; @@ -111,9 +113,7 @@ static int xa_read_packet(AVFormatContext *s, pkt->stream_index = st->index; xa->sent_bytes += packet_size; - pkt->pts = xa->audio_frame_counter; - /* 14 bytes Samples per channel with 2 samples per byte */ - xa->audio_frame_counter += 28 * st->codec->channels; + pkt->duration = 28; return ret; } |