Bug 1431169 - P2. Fix Apple AAC decoder on some files. r=rillian

It is necessary to provide the AAC's magic cookie to the decoder for some files (such as ambisonics or quad-stereo). We already do so for the Windows and FFmpeg decoder.
It's another case of how did it work before really.

MozReview-Commit-ID: sOtY1sPeBU

--HG--
extra : rebase_source : 4d7d7d18aa878f20238f48ee17cd8dfc267356fc
This commit is contained in:
Jean-Yves Avenard 2018-01-17 22:00:16 +01:00
Родитель bd1be7c233
Коммит ce0fab81aa
1 изменённых файлов: 22 добавлений и 7 удалений

Просмотреть файл

@ -370,7 +370,7 @@ AppleATDecoder::GetInputAudioDescription(AudioStreamBasicDescription& aDesc,
if (NS_WARN_IF(rv)) {
return MediaResult(
NS_ERROR_FAILURE,
RESULT_DETAIL("Unable to get format info:%lld", int64_t(rv)));
RESULT_DETAIL("Unable to get format info:%d", int32_t(rv)));
}
// If any of the methods below fail, we will return the default format as
@ -569,12 +569,12 @@ AppleATDecoder::SetupDecoder(MediaRawData* aSample)
LOG("Initializing Apple AudioToolbox decoder");
nsTArray<uint8_t>& magicCookie =
mMagicCookie.Length() ? mMagicCookie : *mConfig.mExtraData;
AudioStreamBasicDescription inputFormat;
PodZero(&inputFormat);
MediaResult rv =
GetInputAudioDescription(inputFormat,
mMagicCookie.Length() ?
mMagicCookie : *mConfig.mExtraData);
MediaResult rv = GetInputAudioDescription(inputFormat, magicCookie);
if (NS_FAILED(rv)) {
return rv;
}
@ -601,11 +601,26 @@ AppleATDecoder::SetupDecoder(MediaRawData* aSample)
OSStatus status = AudioConverterNew(&inputFormat, &mOutputFormat, &mConverter);
if (status) {
LOG("Error %d constructing AudioConverter", static_cast<int>(status));
LOG("Error %d constructing AudioConverter", int(status));
mConverter = nullptr;
return MediaResult(
NS_ERROR_FAILURE,
RESULT_DETAIL("Error constructing AudioConverter:%lld", int64_t(status)));
RESULT_DETAIL("Error constructing AudioConverter:%d", int32_t(status)));
}
if (magicCookie.Length() && mFormatID == kAudioFormatMPEG4AAC) {
status = AudioConverterSetProperty(mConverter,
kAudioConverterDecompressionMagicCookie,
magicCookie.Length(),
magicCookie.Elements());
if (status) {
LOG("Error setting AudioConverter AAC cookie:%d", int32_t(status));
ProcessShutdown();
return MediaResult(
NS_ERROR_FAILURE,
RESULT_DETAIL("Error setting AudioConverter AAC cookie:%d",
int32_t(status)));
}
}
if (NS_FAILED(SetupChannelLayout())) {