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
This commit is contained in:
David McPaul
2008-10-13 10:41:37 +00:00
parent 9f5e12b6b3
commit fe0570240c
@@ -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;
}