Bug 1431221 - P9. Properly retrieve and set channel layout on windows. r=cpearce draft
authorJean-Yves Avenard <jyavenard@mozilla.com>
Tue, 23 Jan 2018 21:47:51 +0100
changeset 771691 537a710487b2c29adee5c1d3cd614986f01f9b33
parent 771690 c040f7a95bd19e15f1e3066ed405a87b8c9265f1
child 771692 e5498bba39e88aba383a211ff1a56e6f4a23d55e
push id103752
push userbmo:jyavenard@mozilla.com
push dateFri, 23 Mar 2018 17:52:32 +0000
reviewerscpearce
bugs1431221
milestone61.0a1
Bug 1431221 - P9. Properly retrieve and set channel layout on windows. r=cpearce MozReview-Commit-ID: GKpOAgPP9qp
dom/media/platforms/wmf/WMFAudioMFTManager.cpp
dom/media/platforms/wmf/WMFAudioMFTManager.h
--- 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.