Bug 1431221 - P9. Properly retrieve and set channel layout on windows. r=cpearce
MozReview-Commit-ID: GKpOAgPP9qp
--- a/dom/media/platforms/wmf/WMFAudioMFTManager.cpp
+++ b/dom/media/platforms/wmf/WMFAudioMFTManager.cpp
@@ -79,16 +79,17 @@ AACAudioSpecificConfigToUserData(uint8_t
}
}
aOutUserData.AppendElements(aAudioSpecConfig, aConfigLength);
}
WMFAudioMFTManager::WMFAudioMFTManager(
const AudioInfo& aConfig)
: mAudioChannels(aConfig.mChannels)
+ , mChannelsMap(0)
, mAudioRate(aConfig.mRate)
{
MOZ_COUNT_CTOR(WMFAudioMFTManager);
if (aConfig.mMimeType.EqualsLiteral("audio/mpeg")) {
mStreamType = MP3;
} else if (aConfig.mMimeType.EqualsLiteral("audio/mp4a-latm")) {
mStreamType = AAC;
@@ -205,16 +206,19 @@ WMFAudioMFTManager::UpdateOutputType()
NS_ENSURE_TRUE(SUCCEEDED(hr), hr);
hr = type->GetUINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, &mAudioRate);
NS_ENSURE_TRUE(SUCCEEDED(hr), hr);
hr = type->GetUINT32(MF_MT_AUDIO_NUM_CHANNELS, &mAudioChannels);
NS_ENSURE_TRUE(SUCCEEDED(hr), hr);
+ hr = type->GetUINT32(MF_MT_AUDIO_CHANNEL_MASK, &mChannelsMap);
+ NS_ENSURE_TRUE(SUCCEEDED(hr), hr);
+
AudioConfig::ChannelLayout layout(mAudioChannels);
if (!layout.IsValid()) {
return E_FAIL;
}
return S_OK;
}
@@ -334,17 +338,18 @@ WMFAudioMFTManager::Output(int64_t aStre
NS_ENSURE_TRUE(duration.IsValid(), E_FAIL);
aOutData = new AudioData(aStreamOffset,
timestamp,
duration,
numFrames,
Move(audioData),
mAudioChannels,
- mAudioRate);
+ mAudioRate,
+ mChannelsMap);
#ifdef LOG_SAMPLE_DECODE
LOG("Decoded audio sample! timestamp=%lld duration=%lld currentLength=%u",
timestamp.ToMicroseconds(), duration.ToMicroseconds(), currentLength);
#endif
return S_OK;
}
--- a/dom/media/platforms/wmf/WMFAudioMFTManager.h
+++ b/dom/media/platforms/wmf/WMFAudioMFTManager.h
@@ -40,16 +40,17 @@ public:
{
return NS_LITERAL_CSTRING("wmf audio decoder");
}
private:
HRESULT UpdateOutputType();
uint32_t mAudioChannels;
+ uint32_t mChannelsMap;
uint32_t mAudioRate;
nsTArray<BYTE> mUserData;
// The offset, at which playback started since the
// last discontinuity.
media::TimeUnit mAudioTimeOffset;
// The number of audio frames that we've played since the last
// discontinuity.