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