From e48452878e24d88c23a3ff59243ce3bc6daabca2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20A=C3=9Fmus?= Date: Fri, 7 Aug 2009 13:18:26 +0000 Subject: [PATCH] * In the AVCodecDecoder, use the audio format of the original input format, but specify it to 16bits/sample if it's still a wildcard. Make sure to allocate the scrub buffer with the correct sample size (was hardcoded to 2 bytes per sample). * In the AVFormatReader, specify the sample format for B_MEDIA_ENCODED_AUDIO. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32185 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/media/plugins/ffmpeg/AVCodecDecoder.cpp | 10 ++++++++-- src/add-ons/media/plugins/ffmpeg/AVFormatReader.cpp | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/add-ons/media/plugins/ffmpeg/AVCodecDecoder.cpp b/src/add-ons/media/plugins/ffmpeg/AVCodecDecoder.cpp index e7cf59f956..b32e96e7ca 100644 --- a/src/add-ons/media/plugins/ffmpeg/AVCodecDecoder.cpp +++ b/src/add-ons/media/plugins/ffmpeg/AVCodecDecoder.cpp @@ -334,7 +334,11 @@ AVCodecDecoder::_NegotiateAudioOutputFormat(media_format* inOutFormat) = fInputFormat.u.encoded_audio.output.frame_rate; outputAudioFormat.channel_count = fInputFormat.u.encoded_audio.output.channel_count; - outputAudioFormat.format = media_raw_audio_format::B_AUDIO_SHORT; + outputAudioFormat.format = fInputFormat.u.encoded_audio.output.format; + // Check that format is not still a wild card! + if (outputAudioFormat.format == 0) + outputAudioFormat.format = media_raw_audio_format::B_AUDIO_SHORT; + outputAudioFormat.buffer_size = 1024 * fInputFormat.u.encoded_audio.output.channel_count; inOutFormat->type = B_MEDIA_RAW_AUDIO; @@ -367,7 +371,9 @@ AVCodecDecoder::_NegotiateAudioOutputFormat(media_format* inOutFormat) result); fStartTime = 0; - fOutputFrameSize = 2 * outputAudioFormat.channel_count; + size_t sampleSize = outputAudioFormat.format + & media_raw_audio_format::B_AUDIO_SIZE_MASK; + fOutputFrameSize = sampleSize * outputAudioFormat.channel_count; fOutputFrameCount = outputAudioFormat.buffer_size / fOutputFrameSize; fOutputFrameRate = outputAudioFormat.frame_rate; fChunkBuffer = 0; diff --git a/src/add-ons/media/plugins/ffmpeg/AVFormatReader.cpp b/src/add-ons/media/plugins/ffmpeg/AVFormatReader.cpp index 79299c5a1c..9e64ad561f 100644 --- a/src/add-ons/media/plugins/ffmpeg/AVFormatReader.cpp +++ b/src/add-ons/media/plugins/ffmpeg/AVFormatReader.cpp @@ -479,7 +479,7 @@ AVFormatReader::StreamCookie::Init(int32 virtualIndex) format->u.encoded_audio.frame_size = codecContext->frame_size; // Fill in some info about possible output format format->u.encoded_audio.output - = media_multi_audio_format::wildcard; + = avformat_to_beos_format(codecContext->sample_fmt); format->u.encoded_audio.output.frame_rate = (float)codecContext->sample_rate; format->u.encoded_audio.output.channel_count