From fe0570240ca77b0538554cbd8ec80991bb8356ba Mon Sep 17 00:00:00 2001 From: David McPaul Date: Mon, 13 Oct 2008 10:41:37 +0000 Subject: [PATCH] Don't change the buffer size assigned by the reader git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28024 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../plugins/raw_decoder/RawDecoderPlugin.cpp | 35 +++++++++++-------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/src/add-ons/media/plugins/raw_decoder/RawDecoderPlugin.cpp b/src/add-ons/media/plugins/raw_decoder/RawDecoderPlugin.cpp index 4d62138c22..5210f64f7f 100644 --- a/src/add-ons/media/plugins/raw_decoder/RawDecoderPlugin.cpp +++ b/src/add-ons/media/plugins/raw_decoder/RawDecoderPlugin.cpp @@ -108,10 +108,11 @@ RawDecoder::Setup(media_format *ioEncodedFormat, // since we can translate to a different buffer size, // suggest something nicer than delivered by the // file reader (perhaps we should even report wildcard?) - ioEncodedFormat->u.raw_audio.buffer_size = AudioBufferSize( - ioEncodedFormat->u.raw_audio.channel_count, - ioEncodedFormat->u.raw_audio.format, - ioEncodedFormat->u.raw_audio.frame_rate); + // I don't believe we can negotiate the buffer size with the reader +// ioEncodedFormat->u.raw_audio.buffer_size = AudioBufferSize( +// ioEncodedFormat->u.raw_audio.channel_count, +// ioEncodedFormat->u.raw_audio.format, +// ioEncodedFormat->u.raw_audio.frame_rate); return B_OK; } @@ -143,8 +144,7 @@ RawDecoder::NegotiateAudioOutputFormat(media_format *ioDecodedFormat) { char s[1024]; - string_for_format(*ioDecodedFormat, s, sizeof(s)); - TRACE("RawDecoder::NegotiateAudioOutputFormat enter: %s\n", s); + TRACE("RawDecoder::NegotiateAudioOutputFormat enter:\n"); ioDecodedFormat->type = B_MEDIA_RAW_AUDIO; switch (ioDecodedFormat->u.raw_audio.format) { @@ -198,15 +198,19 @@ RawDecoder::NegotiateAudioOutputFormat(media_format *ioDecodedFormat) ioDecodedFormat->u.raw_audio.channel_mask = 0; ioDecodedFormat->u.raw_audio.matrix_mask = 0; - if (ioDecodedFormat->u.raw_audio.buffer_size < 128 || ioDecodedFormat->u.raw_audio.buffer_size > 65536) { - ioDecodedFormat->u.raw_audio.buffer_size = AudioBufferSize( - ioDecodedFormat->u.raw_audio.channel_count, - ioDecodedFormat->u.raw_audio.format, - ioDecodedFormat->u.raw_audio.frame_rate); - } else { + ioDecodedFormat->u.raw_audio.buffer_size = fInputFormat.u.raw_audio.buffer_size; + +// I don't believe we can negotiate the buffer size with the reader +// the decoder might use a different buffer for output but it must read all bytes given. +// if (ioDecodedFormat->u.raw_audio.buffer_size < 128 || ioDecodedFormat->u.raw_audio.buffer_size > 65536) { +// ioDecodedFormat->u.raw_audio.buffer_size = AudioBufferSize( +// ioDecodedFormat->u.raw_audio.channel_count, +// ioDecodedFormat->u.raw_audio.format, +// ioDecodedFormat->u.raw_audio.frame_rate); +// } else { // round down to exact multiple of output frame size - ioDecodedFormat->u.raw_audio.buffer_size = (ioDecodedFormat->u.raw_audio.buffer_size / fOutputFrameSize) * fOutputFrameSize; - } +// ioDecodedFormat->u.raw_audio.buffer_size = (ioDecodedFormat->u.raw_audio.buffer_size / fOutputFrameSize) * fOutputFrameSize; +// } fOutputBufferFrameCount = ioDecodedFormat->u.raw_audio.buffer_size / fOutputFrameSize; @@ -505,6 +509,9 @@ RawDecoder::Decode(void *buffer, int64 *frameCount, if (fSwapOutput) fSwapOutput(buffer, *frameCount * fInputFormat.u.raw_audio.channel_count); + + TRACE("framecount %Ld, time %Ld\n",*frameCount, mediaHeader->start_time); + return *frameCount ? B_OK : B_ERROR; }