diff options
author | Warren Dukes <warren.dukes@gmail.com> | 2004-03-20 14:44:39 +0000 |
---|---|---|
committer | Warren Dukes <warren.dukes@gmail.com> | 2004-03-20 14:44:39 +0000 |
commit | 3130ea01c57a90629cfcf31edefafff7379c4367 (patch) | |
tree | 71fd520c7a3c66f0c379e7a7b5b4e5c328332867 /src/mp4_decode.c | |
parent | cf2986c68f20e7cfb1c8dbe457a17038c57eff37 (diff) | |
download | mpd-3130ea01c57a90629cfcf31edefafff7379c4367.tar.gz mpd-3130ea01c57a90629cfcf31edefafff7379c4367.tar.xz mpd-3130ea01c57a90629cfcf31edefafff7379c4367.zip |
git-svn-id: https://svn.musicpd.org/mpd/trunk@326 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Diffstat (limited to 'src/mp4_decode.c')
-rw-r--r-- | src/mp4_decode.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/mp4_decode.c b/src/mp4_decode.c index 587f437f3..607253e4f 100644 --- a/src/mp4_decode.c +++ b/src/mp4_decode.c @@ -98,7 +98,7 @@ int mp4_decode(Buffer * cb, AudioFormat * af, DecoderControl * dc) { long seekTableEnd = -1; int seekPositionFound = 0; long offset; - mpd_uint16 bitRate; + mpd_uint16 bitRate = 0; fh = fopen(dc->file,"r"); if(!fh) { @@ -156,7 +156,6 @@ int mp4_decode(Buffer * cb, AudioFormat * af, DecoderControl * dc) { af->sampleRate = sampleRate; af->channels = channels; time = mp4ff_get_track_duration_use_offsets(mp4fh,track); - bitRate = mp4ff_get_avg_bitrate(mp4fh,track); scale = mp4ff_time_scale(mp4fh,track); if(mp4Buffer) free(mp4Buffer); @@ -229,14 +228,21 @@ int mp4_decode(Buffer * cb, AudioFormat * af, DecoderControl * dc) { break; } - if(dur+offset > frameInfo.samples) { + if(channels*(dur+offset) > frameInfo.samples) { dur = frameInfo.samples; offset = 0; } - + sampleCount = (unsigned long)(dur*channels); - if(sampleCount>0) initial =0; + if(sampleCount>0) { + initial =0; + bitRate = frameInfo.bytesconsumed*8.0* + frameInfo.channels*scale/ + frameInfo.samples/1024+0.5; + } + + sampleBufferLen = sampleCount*2; sampleBuffer+=offset*channels*2; @@ -262,7 +268,7 @@ int mp4_decode(Buffer * cb, AudioFormat * af, DecoderControl * dc) { memcpy(cb->chunks+cb->end*CHUNK_SIZE+chunkLen, sampleBuffer,size); cb->times[cb->end] = time; - cb->bitRate[cb->end] = bitRate/1024; + cb->bitRate[cb->end] = bitRate; sampleBuffer+=size; chunkLen+=size; if(chunkLen>=CHUNK_SIZE) { |