Bug 1368954 - [Part2] Modify HLSDemuxer native code to accommondate wrapper interface change. draft
authorKilik Kuo <kikuo@mozilla.com>
Wed, 14 Jun 2017 17:47:11 +0800
changeset 594522 33fc845e58440d47836d2e00a0d39cb22bbf3ad1
parent 594521 6ad82c7ad32e1f6cb58e1b13bc89b4dac584f98f
child 594781 47147de445e93ff704807de227ed14827637bcaf
child 595175 f7fe03004095ebb2beecefb8798647b751989001
push id64041
push userbmo:kikuo@mozilla.com
push dateThu, 15 Jun 2017 03:25:14 +0000
bugs1368954
milestone56.0a1
Bug 1368954 - [Part2] Modify HLSDemuxer native code to accommondate wrapper interface change. MozReview-Commit-ID: IGhJPLp1A6R
dom/media/hls/HLSDecoder.cpp
dom/media/hls/HLSDemuxer.cpp
dom/media/hls/HLSDemuxer.h
--- a/dom/media/hls/HLSDecoder.cpp
+++ b/dom/media/hls/HLSDecoder.cpp
@@ -3,32 +3,37 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "HLSDecoder.h"
 #include "AndroidBridge.h"
 #include "DecoderTraits.h"
 #include "HLSDemuxer.h"
+#include "HLSResource.h"
 #include "HLSUtils.h"
 #include "MediaContainerType.h"
 #include "MediaDecoderStateMachine.h"
 #include "MediaFormatReader.h"
 #include "MediaPrefs.h"
 
 namespace mozilla {
 
 MediaDecoderStateMachine*
 HLSDecoder::CreateStateMachine()
 {
   MOZ_ASSERT(NS_IsMainThread());
 
+  MediaResource* resource = GetResource();
+  MOZ_ASSERT(resource);
+  auto resourceWrapper = static_cast<HLSResource*>(resource)->GetResourceWrapper();
+  MOZ_ASSERT(resourceWrapper);
   mReader =
     new MediaFormatReader(this,
-                          new HLSDemuxer(GetResource()),
+                          new HLSDemuxer(resourceWrapper->GetPlayerId()),
                           GetVideoFrameContainer());
 
   return new MediaDecoderStateMachine(this, mReader);
 }
 
 MediaDecoder*
 HLSDecoder::Clone(MediaDecoderInit& aInit)
 {
--- a/dom/media/hls/HLSDemuxer.cpp
+++ b/dom/media/hls/HLSDemuxer.cpp
@@ -5,17 +5,16 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "HLSDemuxer.h"
 
 #include <algorithm>
 #include <limits>
 #include <stdint.h>
 
-#include "HLSResource.h"
 #include "HLSUtils.h"
 #include "MediaCodec.h"
 #include "mozilla/Unused.h"
 #include "nsPrintfCString.h"
 
 using namespace mozilla::java;
 
 namespace mozilla {
@@ -113,34 +112,31 @@ public:
 
   Mutex mMutex;
 private:
   ~HLSDemuxerCallbacksSupport() { }
   HLSDemuxer* mDemuxer;
 
 };
 
-HLSDemuxer::HLSDemuxer(MediaResource* aResource)
-  : mResource(aResource)
-  , mTaskQueue(new AutoTaskQueue(GetMediaThreadPool(MediaThreadType::PLAYBACK),
+HLSDemuxer::HLSDemuxer(int aPlayerId)
+  : mTaskQueue(new AutoTaskQueue(GetMediaThreadPool(MediaThreadType::PLAYBACK),
                                  /* aSupportsTailDispatch = */ false))
   , mMutex("HLSDemuxer")
 {
   MOZ_ASSERT(NS_IsMainThread());
-  MOZ_ASSERT(aResource);
   HLSDemuxerCallbacksSupport::Init();
   mJavaCallbacks = GeckoHLSDemuxerWrapper::Callbacks::New();
   MOZ_ASSERT(mJavaCallbacks);
 
   mCallbackSupport = new HLSDemuxerCallbacksSupport(this);
   HLSDemuxerCallbacksSupport::AttachNative(mJavaCallbacks,
                                            mCallbackSupport);
 
-  auto resourceWrapper = static_cast<HLSResource*>(aResource)->GetResourceWrapper();
-  mHLSDemuxerWrapper = GeckoHLSDemuxerWrapper::Create(resourceWrapper->GetPlayer(), mJavaCallbacks);
+  mHLSDemuxerWrapper = GeckoHLSDemuxerWrapper::Create(aPlayerId, mJavaCallbacks);
   MOZ_ASSERT(mHLSDemuxerWrapper);
 }
 
 void
 HLSDemuxer::OnInitialized(bool aHasAudio, bool aHasVideo)
 {
   MOZ_ASSERT(OnTaskQueue());
 
--- a/dom/media/hls/HLSDemuxer.h
+++ b/dom/media/hls/HLSDemuxer.h
@@ -24,17 +24,17 @@ namespace mozilla {
 class AbstractThread;
 class MediaResult;
 class HLSTrackDemuxer;
 
 class HLSDemuxer final : public MediaDataDemuxer
 {
   class HLSDemuxerCallbacksSupport;
 public:
-  explicit HLSDemuxer(MediaResource* aResource);
+  explicit HLSDemuxer(int aPlayerId);
 
   RefPtr<InitPromise> Init() override;
 
   bool HasTrackType(TrackInfo::TrackType aType) const override;
 
   uint32_t GetNumberTracks(TrackInfo::TrackType aType) const override;
 
   already_AddRefed<MediaTrackDemuxer>
@@ -53,17 +53,16 @@ public:
 
 private:
   media::TimeUnit GetNextKeyFrameTime();
   void UpdateVideoInfo(int index);
   void UpdateAudioInfo(int index);
   bool OnTaskQueue() const;
   TrackInfo* GetTrackInfo(TrackInfo::TrackType);
   ~HLSDemuxer();
-  RefPtr<MediaResource> mResource;
   friend class HLSTrackDemuxer;
 
   const RefPtr<AutoTaskQueue> mTaskQueue;
   nsTArray<RefPtr<HLSTrackDemuxer>> mDemuxers;
 
   MozPromiseHolder<InitPromise> mInitPromise;
   RefPtr<HLSDemuxerCallbacksSupport> mCallbackSupport;