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:
@@ -108,10 +108,11 @@ RawDecoder::Setup(media_format *ioEncodedFormat,
|
|||||||
// since we can translate to a different buffer size,
|
// since we can translate to a different buffer size,
|
||||||
// suggest something nicer than delivered by the
|
// suggest something nicer than delivered by the
|
||||||
// file reader (perhaps we should even report wildcard?)
|
// file reader (perhaps we should even report wildcard?)
|
||||||
ioEncodedFormat->u.raw_audio.buffer_size = AudioBufferSize(
|
// I don't believe we can negotiate the buffer size with the reader
|
||||||
ioEncodedFormat->u.raw_audio.channel_count,
|
// ioEncodedFormat->u.raw_audio.buffer_size = AudioBufferSize(
|
||||||
ioEncodedFormat->u.raw_audio.format,
|
// ioEncodedFormat->u.raw_audio.channel_count,
|
||||||
ioEncodedFormat->u.raw_audio.frame_rate);
|
// ioEncodedFormat->u.raw_audio.format,
|
||||||
|
// ioEncodedFormat->u.raw_audio.frame_rate);
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -143,8 +144,7 @@ RawDecoder::NegotiateAudioOutputFormat(media_format *ioDecodedFormat)
|
|||||||
{
|
{
|
||||||
char s[1024];
|
char s[1024];
|
||||||
|
|
||||||
string_for_format(*ioDecodedFormat, s, sizeof(s));
|
TRACE("RawDecoder::NegotiateAudioOutputFormat enter:\n");
|
||||||
TRACE("RawDecoder::NegotiateAudioOutputFormat enter: %s\n", s);
|
|
||||||
|
|
||||||
ioDecodedFormat->type = B_MEDIA_RAW_AUDIO;
|
ioDecodedFormat->type = B_MEDIA_RAW_AUDIO;
|
||||||
switch (ioDecodedFormat->u.raw_audio.format) {
|
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.channel_mask = 0;
|
||||||
ioDecodedFormat->u.raw_audio.matrix_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 = fInputFormat.u.raw_audio.buffer_size;
|
||||||
ioDecodedFormat->u.raw_audio.buffer_size = AudioBufferSize(
|
|
||||||
ioDecodedFormat->u.raw_audio.channel_count,
|
// I don't believe we can negotiate the buffer size with the reader
|
||||||
ioDecodedFormat->u.raw_audio.format,
|
// the decoder might use a different buffer for output but it must read all bytes given.
|
||||||
ioDecodedFormat->u.raw_audio.frame_rate);
|
// if (ioDecodedFormat->u.raw_audio.buffer_size < 128 || ioDecodedFormat->u.raw_audio.buffer_size > 65536) {
|
||||||
} else {
|
// 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
|
// 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;
|
fOutputBufferFrameCount = ioDecodedFormat->u.raw_audio.buffer_size / fOutputFrameSize;
|
||||||
|
|
||||||
@@ -505,6 +509,9 @@ RawDecoder::Decode(void *buffer, int64 *frameCount,
|
|||||||
|
|
||||||
if (fSwapOutput)
|
if (fSwapOutput)
|
||||||
fSwapOutput(buffer, *frameCount * fInputFormat.u.raw_audio.channel_count);
|
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;
|
return *frameCount ? B_OK : B_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user