Bug 1347836 part 2 - make HTMLMediaElement::GetCurrentImage() return an already_AddRefed<layers::Image>; r?jwwang draft
authorKaku Kuo <kaku@mozilla.com>
Thu, 16 Mar 2017 17:07:04 +0800
changeset 499852 57a4ea1f7587e322a17cd08878dbce8192402150
parent 499851 4f1a6b933e54f3fdcafd9092d9a661f802f3b7cb
child 549490 4cc1d083e58a5b959093f1210f29beac551b1401
push id49562
push userbmo:kaku@mozilla.com
push dateThu, 16 Mar 2017 09:08:25 +0000
reviewersjwwang
bugs1347836
milestone55.0a1
Bug 1347836 part 2 - make HTMLMediaElement::GetCurrentImage() return an already_AddRefed<layers::Image>; r?jwwang MozReview-Commit-ID: FZ4JRdbPUry
dom/html/HTMLMediaElement.cpp
dom/html/HTMLMediaElement.h
--- a/dom/html/HTMLMediaElement.cpp
+++ b/dom/html/HTMLMediaElement.cpp
@@ -1522,34 +1522,35 @@ HTMLMediaElement::SetVisible(bool aVisib
 {
   if (!mDecoder) {
     return;
   }
 
   mDecoder->SetForcedHidden(!aVisible);
 }
 
-layers::Image*
+already_AddRefed<layers::Image>
 HTMLMediaElement::GetCurrentImage()
 {
   // Mark the decoder owned by the element as tainted so that the
   // suspend-video-decoder is disabled.
   mHasSuspendTaint = true;
   if (mDecoder) {
     mDecoder->SetSuspendTaint(true);
   }
 
   // TODO: In bug 1345404, handle case when video decoder is already suspended.
   ImageContainer* container = GetImageContainer();
   if (!container) {
     return nullptr;
   }
 
   AutoLockImage lockImage(container);
-  return lockImage.GetImage();
+  RefPtr<layers::Image> image = lockImage.GetImage();
+  return image.forget();
 }
 
 bool
 HTMLMediaElement::HasSuspendTaint() const
 {
   MOZ_ASSERT(!mDecoder || (mDecoder->HasSuspendTaint() == mHasSuspendTaint));
   return mHasSuspendTaint;
 }
--- a/dom/html/HTMLMediaElement.h
+++ b/dom/html/HTMLMediaElement.h
@@ -624,17 +624,17 @@ public:
   bool HasSuspendTaint() const;
 
   // Synchronously, return the next video frame and mark the element unable to
   // participate in decode suspending.
   //
   // This function is synchronous for cases where decoding has been suspended
   // and JS needs a frame to use in, eg., nsLayoutUtils::SurfaceFromElement()
   // via drawImage().
-  layers::Image* GetCurrentImage();
+  already_AddRefed<layers::Image> GetCurrentImage();
 
   already_AddRefed<DOMMediaStream> GetSrcObject() const;
   void SetSrcObject(DOMMediaStream& aValue);
   void SetSrcObject(DOMMediaStream* aValue);
 
   // TODO: remove prefixed versions soon (1183495).
   already_AddRefed<DOMMediaStream> GetMozSrcObject() const;
   void SetMozSrcObject(DOMMediaStream& aValue);