Bug 1241665 - Correctly convert IOSurfaces to SourceSurfaces in MacIOSurfaceTextureSourceBasic and MacIOSurfaceTextureData. r?mattwoodrow draft
authorMarkus Stange <mstange@themasta.com>
Thu, 21 Jan 2016 23:28:19 +0100
changeset 324105 bd9df1fe1e27bbf551d93ef86e0a4fa7689c861b
parent 324104 e85daa58b99e9f69534dd2d23282e253764b24f0
child 324291 d80beab43620ca5438093d4f3b8a27e5715230be
push id9846
push usermstange@themasta.com
push dateThu, 21 Jan 2016 22:49:07 +0000
reviewersmattwoodrow
bugs1241665
milestone46.0a1
Bug 1241665 - Correctly convert IOSurfaces to SourceSurfaces in MacIOSurfaceTextureSourceBasic and MacIOSurfaceTextureData. r?mattwoodrow
gfx/layers/basic/MacIOSurfaceTextureHostBasic.cpp
gfx/layers/opengl/MacIOSurfaceTextureClientOGL.cpp
--- a/gfx/layers/basic/MacIOSurfaceTextureHostBasic.cpp
+++ b/gfx/layers/basic/MacIOSurfaceTextureHostBasic.cpp
@@ -1,15 +1,16 @@
 /* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
  * 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 "MacIOSurfaceTextureHostBasic.h"
 #include "mozilla/gfx/MacIOSurface.h"
+#include "MacIOSurfaceHelpers.h"
 
 namespace mozilla {
 namespace layers {
 
 MacIOSurfaceTextureSourceBasic::MacIOSurfaceTextureSourceBasic(
                                 BasicCompositor* aCompositor,
                                 MacIOSurface* aSurface)
   : mCompositor(aCompositor)
@@ -28,17 +29,19 @@ MacIOSurfaceTextureSourceBasic::GetSize(
 {
   return gfx::IntSize(mSurface->GetDevicePixelWidth(),
                       mSurface->GetDevicePixelHeight());
 }
 
 gfx::SurfaceFormat
 MacIOSurfaceTextureSourceBasic::GetFormat() const
 {
-  return mSurface->HasAlpha() ? gfx::SurfaceFormat::R8G8B8A8 : gfx::SurfaceFormat::B8G8R8X8;
+  // Set the format the same way as CreateSourceSurfaceFromMacIOSurface.
+  return mSurface->GetFormat() == gfx::SurfaceFormat::NV12
+    ? gfx::SurfaceFormat::B8G8R8X8 : gfx::SurfaceFormat::B8G8R8A8;
 }
 
 MacIOSurfaceTextureHostBasic::MacIOSurfaceTextureHostBasic(
     TextureFlags aFlags,
     const SurfaceDescriptorMacIOSurface& aDescriptor
 )
   : TextureHost(aFlags)
 {
@@ -46,17 +49,17 @@ MacIOSurfaceTextureHostBasic::MacIOSurfa
                                          aDescriptor.scaleFactor(),
                                          !aDescriptor.isOpaque());
 }
 
 gfx::SourceSurface*
 MacIOSurfaceTextureSourceBasic::GetSurface(gfx::DrawTarget* aTarget)
 {
   if (!mSourceSurface) {
-    mSourceSurface = mSurface->GetAsSurface();
+    mSourceSurface = CreateSourceSurfaceFromMacIOSurface(mSurface);
   }
   return mSourceSurface;
 }
 
 void
 MacIOSurfaceTextureSourceBasic::SetCompositor(Compositor* aCompositor)
 {
   mCompositor = static_cast<BasicCompositor*>(aCompositor);
--- a/gfx/layers/opengl/MacIOSurfaceTextureClientOGL.cpp
+++ b/gfx/layers/opengl/MacIOSurfaceTextureClientOGL.cpp
@@ -1,15 +1,16 @@
 /* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
  * 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 "MacIOSurfaceTextureClientOGL.h"
 #include "mozilla/gfx/MacIOSurface.h" 
+#include "MacIOSurfaceHelpers.h"
 
 namespace mozilla {
 namespace layers {
 
 MacIOSurfaceTextureData::MacIOSurfaceTextureData(MacIOSurface* aSurface)
 : mSurface(aSurface)
 {
   MOZ_ASSERT(mSurface);
@@ -48,14 +49,14 @@ gfx::SurfaceFormat
 MacIOSurfaceTextureData::GetFormat() const
 {
   return mSurface->GetFormat();
 }
 
 already_AddRefed<gfx::DataSourceSurface>
 MacIOSurfaceTextureData::GetAsSurface()
 {
-  RefPtr<gfx::SourceSurface> surf = mSurface->GetAsSurface();
+  RefPtr<gfx::SourceSurface> surf = CreateSourceSurfaceFromMacIOSurface(mSurface);
   return surf->GetDataSurface();
 }
 
 } // namespace layers
 } // namespace mozilla