Bug 1229360 - Support MP3 audio in OpenMAX PDM. r?alfredo draft
authorJohn Lin <jolin@mozilla.com>
Fri, 19 Feb 2016 15:57:24 +0800
changeset 332078 e28ddc59083934f9d89ede96d60c9cfb0180c7d6
parent 332077 4116eb8b5f7b3d3fd95695fe88e7461658ac6b1f
child 332079 137eafd50deca6ee899ae2b941a30b60bff8be2c
push id11156
push userbmo:jolin@mozilla.com
push dateFri, 19 Feb 2016 09:30:47 +0000
reviewersalfredo
bugs1229360
milestone47.0a1
Bug 1229360 - Support MP3 audio in OpenMAX PDM. r?alfredo MozReview-Commit-ID: HUp8Z5KQ8ua
dom/media/platforms/omx/OmxPlatformLayer.cpp
--- a/dom/media/platforms/omx/OmxPlatformLayer.cpp
+++ b/dom/media/platforms/omx/OmxPlatformLayer.cpp
@@ -102,25 +102,53 @@ public:
 
     LOG("Config OMX_IndexParamAudioAac, channel %d, sample rate %d, profile %d",
         aacProfile.nChannels, aacProfile.nSampleRate, aacProfile.eAACProfile);
 
     return ConfigAudioOutputPort(aOmx, aInfo);
   }
 };
 
+class OmxMp3Config : public OmxAudioConfig
+{
+public:
+  OMX_ERRORTYPE Apply(OmxPlatformLayer& aOmx, const AudioInfo& aInfo) override
+  {
+    OMX_ERRORTYPE err;
+
+    OMX_AUDIO_PARAM_MP3TYPE mp3Param;
+    InitOmxParameter(&mp3Param);
+    mp3Param.nPortIndex = aOmx.InputPortIndex();
+    err = aOmx.GetParameter(OMX_IndexParamAudioMp3, &mp3Param, sizeof(mp3Param));
+    RETURN_IF_ERR(err);
+
+    mp3Param.nChannels = aInfo.mChannels;
+    mp3Param.nSampleRate = aInfo.mRate;
+    err = aOmx.SetParameter(OMX_IndexParamAudioMp3, &mp3Param, sizeof(mp3Param));
+    RETURN_IF_ERR(err);
+
+    LOG("Config OMX_IndexParamAudioMp3, channel %d, sample rate %d",
+        mp3Param.nChannels, mp3Param.nSampleRate);
+
+    return ConfigAudioOutputPort(aOmx, aInfo);
+  }
+};
+
 template<>
 UniquePtr<OmxAudioConfig>
 ConfigForMime(const nsACString& aMimeType)
 {
   UniquePtr<OmxAudioConfig> conf;
 
   if (OmxPlatformLayer::SupportsMimeType(aMimeType)) {
     if (aMimeType.EqualsLiteral("audio/mp4a-latm")) {
       conf.reset(new OmxAacConfig());
+    } else if (aMimeType.EqualsLiteral("audio/mp3") ||
+                aMimeType.EqualsLiteral("audio/mpeg")) {
+      conf.reset(new OmxMp3Config());
     }
   }
   return Move(conf);
 }
 
 // There should be a better way to calculate it.
 #define MIN_VIDEO_INPUT_BUFFER_SIZE 64 * 1024