diff --git a/src/add-ons/media/plugins/speex/speexCodecPlugin.cpp b/src/add-ons/media/plugins/speex/speexCodecPlugin.cpp index 0c1d494cf4..45d4600264 100644 --- a/src/add-ons/media/plugins/speex/speexCodecPlugin.cpp +++ b/src/add-ons/media/plugins/speex/speexCodecPlugin.cpp @@ -51,7 +51,6 @@ SpeexDecoder::SpeexDecoder() fHeader = 0; fStereoState = 0; fSpeexOutputLength = 0; - fStartTime = 0; fFrameSize = 0; fOutputBufferSize = 0; } @@ -250,9 +249,8 @@ SpeexDecoder::Decode(void *buffer, int64 *frameCount, float * out_buffer = static_cast(buffer); int32 out_bytes_needed = fOutputBufferSize; - mediaHeader->start_time = fStartTime; - //TRACE("SpeexDecoder: Decoding start time %.6f\n", fStartTime / 1000000.0); - + bool start = false; + while (out_bytes_needed >= fSpeexOutputLength) { // get a new packet void *chunkBuffer; @@ -266,7 +264,10 @@ SpeexDecoder::Decode(void *buffer, int64 *frameCount, TRACE("SpeexDecoder::Decode: GetNextChunk failed\n"); return status; } - fStartTime = mh.start_time; + if (!start) { + mediaHeader->start_time = mh.start_time; + start = true; + } speex_bits_read_from(&fBits, (char*)chunkBuffer, chunkSize); for (int frame = 0 ; frame < fHeader->frames_per_packet ; frame++) { int ret = speex_decode(fDecoderState, &fBits, out_buffer); @@ -293,9 +294,6 @@ SpeexDecoder::Decode(void *buffer, int64 *frameCount, } done: - uint samples = ((uint8*)out_buffer - (uint8*)buffer) / fFrameSize; - //fStartTime += (1000000LL * samples) / fHeader->rate; - //TRACE("SpeexDecoder: fStartTime inc'd to %.6f\n", fStartTime / 1000000.0); *frameCount = (fOutputBufferSize - out_bytes_needed) / fFrameSize; if (out_buffer != buffer) { diff --git a/src/add-ons/media/plugins/vorbis/vorbisCodecPlugin.cpp b/src/add-ons/media/plugins/vorbis/vorbisCodecPlugin.cpp index 2d34aff557..f5e13abe33 100644 --- a/src/add-ons/media/plugins/vorbis/vorbisCodecPlugin.cpp +++ b/src/add-ons/media/plugins/vorbis/vorbisCodecPlugin.cpp @@ -47,7 +47,6 @@ VorbisDecoder::VorbisDecoder() vorbis_info_init(&fInfo); vorbis_comment_init(&fComment); - fStartTime = 0; fFrameSize = 0; fOutputBufferSize = 0; } @@ -170,9 +169,8 @@ VorbisDecoder::Decode(void *buffer, int64 *frameCount, // TRACE("VorbisDecoder::Decode\n"); uint8 * out_buffer = static_cast(buffer); int32 out_bytes_needed = fOutputBufferSize; - - mediaHeader->start_time = fStartTime; - //TRACE("VorbisDecoder: Decoding start time %.6f\n", fStartTime / 1000000.0); + + bool start = false; while (out_bytes_needed > 0) { int samples; @@ -194,7 +192,10 @@ VorbisDecoder::Decode(void *buffer, int64 *frameCount, TRACE("VorbisDecoder::Decode: chunk not ogg_packet-sized\n"); return B_ERROR; } - fStartTime = mh.start_time; + if (!start) { + mediaHeader->start_time = mh.start_time; + start = true; + } ogg_packet * packet = static_cast(chunkBuffer); if (vorbis_synthesis(&fBlock,packet)==0) { vorbis_synthesis_blockin(&fDspState,&fBlock); @@ -227,8 +228,6 @@ VorbisDecoder::Decode(void *buffer, int64 *frameCount, // report back how many samples we consumed vorbis_synthesis_read(&fDspState,samples); - //fStartTime += (1000000LL * samples) / fInfo.rate; - //TRACE("VorbisDecoder: fStartTime inc'd to %.6f\n", fStartTime / 1000000.0); } done: diff --git a/src/add-ons/media/plugins/vorbis/vorbisCodecPlugin.h b/src/add-ons/media/plugins/vorbis/vorbisCodecPlugin.h index 40e61d7da7..f948ba24aa 100644 --- a/src/add-ons/media/plugins/vorbis/vorbisCodecPlugin.h +++ b/src/add-ons/media/plugins/vorbis/vorbisCodecPlugin.h @@ -30,7 +30,6 @@ private: vorbis_comment fComment; vorbis_dsp_state fDspState; vorbis_block fBlock; - bigtime_t fStartTime; int fFrameSize; int fOutputBufferSize; };