diff options
Diffstat (limited to 'gfx/2d/MacIOSurface.h')
-rw-r--r-- | gfx/2d/MacIOSurface.h | 216 |
1 files changed, 0 insertions, 216 deletions
diff --git a/gfx/2d/MacIOSurface.h b/gfx/2d/MacIOSurface.h deleted file mode 100644 index e9c76e5dd8..0000000000 --- a/gfx/2d/MacIOSurface.h +++ /dev/null @@ -1,216 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; 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/. */ - -#ifndef MacIOSurface_h__ -#define MacIOSurface_h__ -#ifdef XP_DARWIN -#include <QuartzCore/QuartzCore.h> -#include <CoreVideo/CoreVideo.h> -#include <dlfcn.h> - -struct _CGLContextObject; - -typedef _CGLContextObject* CGLContextObj; -typedef struct CGContext* CGContextRef; -typedef struct CGImage* CGImageRef; -typedef uint32_t IOSurfaceID; - -typedef CFTypeRef IOSurfacePtr; -typedef IOSurfacePtr (*IOSurfaceCreateFunc) (CFDictionaryRef properties); -typedef IOSurfacePtr (*IOSurfaceLookupFunc) (uint32_t io_surface_id); -typedef IOSurfaceID (*IOSurfaceGetIDFunc)(IOSurfacePtr io_surface); -typedef void (*IOSurfaceVoidFunc)(IOSurfacePtr io_surface); -typedef IOReturn (*IOSurfaceLockFunc)(IOSurfacePtr io_surface, uint32_t options, - uint32_t *seed); -typedef IOReturn (*IOSurfaceUnlockFunc)(IOSurfacePtr io_surface, - uint32_t options, uint32_t *seed); -typedef void* (*IOSurfaceGetBaseAddressFunc)(IOSurfacePtr io_surface); -typedef void* (*IOSurfaceGetBaseAddressOfPlaneFunc)(IOSurfacePtr io_surface, - size_t planeIndex); -typedef size_t (*IOSurfaceSizeTFunc)(IOSurfacePtr io_surface); -typedef size_t (*IOSurfaceSizePlaneTFunc)(IOSurfacePtr io_surface, size_t plane); -typedef size_t (*IOSurfaceGetPropertyMaximumFunc) (CFStringRef property); -typedef CGLError (*CGLTexImageIOSurface2DFunc) (CGLContextObj ctxt, - GLenum target, GLenum internalFormat, - GLsizei width, GLsizei height, - GLenum format, GLenum type, - IOSurfacePtr ioSurface, GLuint plane); -typedef CGContextRef (*IOSurfaceContextCreateFunc)(CFTypeRef io_surface, - unsigned width, unsigned height, - unsigned bitsPerComponent, unsigned bytes, - CGColorSpaceRef colorSpace, CGBitmapInfo bitmapInfo); -typedef CGImageRef (*IOSurfaceContextCreateImageFunc)(CGContextRef ref); -typedef IOSurfacePtr (*IOSurfaceContextGetSurfaceFunc)(CGContextRef ref); - -typedef IOSurfacePtr (*CVPixelBufferGetIOSurfaceFunc)( - CVPixelBufferRef pixelBuffer); - -typedef OSType (*IOSurfacePixelFormatFunc)(IOSurfacePtr io_surface); - -#ifdef XP_MACOSX -#import <OpenGL/OpenGL.h> -#else -#import <OpenGLES/ES2/gl.h> -#endif - -#include "2D.h" -#include "mozilla/RefPtr.h" -#include "mozilla/RefCounted.h" - -enum CGContextType { - CG_CONTEXT_TYPE_UNKNOWN = 0, - // These are found by inspection, it's possible they could be changed - CG_CONTEXT_TYPE_BITMAP = 4, - CG_CONTEXT_TYPE_IOSURFACE = 8 -}; - -CGContextType GetContextType(CGContextRef ref); - -class MacIOSurface final : public mozilla::external::AtomicRefCounted<MacIOSurface> { -public: - MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(MacIOSurface) - typedef mozilla::gfx::SourceSurface SourceSurface; - - // The usage count of the IOSurface is increased by 1 during the lifetime - // of the MacIOSurface instance. - // MacIOSurface holds a reference to the corresponding IOSurface. - - static already_AddRefed<MacIOSurface> CreateIOSurface(int aWidth, int aHeight, - double aContentsScaleFactor = 1.0, - bool aHasAlpha = true); - static void ReleaseIOSurface(MacIOSurface *aIOSurface); - static already_AddRefed<MacIOSurface> LookupSurface(IOSurfaceID aSurfaceID, - double aContentsScaleFactor = 1.0, - bool aHasAlpha = true); - - explicit MacIOSurface(const void *aIOSurfacePtr, - double aContentsScaleFactor = 1.0, - bool aHasAlpha = true); - ~MacIOSurface(); - IOSurfaceID GetIOSurfaceID(); - void *GetBaseAddress(); - void *GetBaseAddressOfPlane(size_t planeIndex); - size_t GetPlaneCount(); - OSType GetPixelFormat(); - // GetWidth() and GetHeight() return values in "display pixels". A - // "display pixel" is the smallest fully addressable part of a display. - // But in HiDPI modes each "display pixel" corresponds to more than one - // device pixel. Use GetDevicePixel**() to get device pixels. - size_t GetWidth(size_t plane = 0); - size_t GetHeight(size_t plane = 0); - double GetContentsScaleFactor() { return mContentsScaleFactor; } - size_t GetDevicePixelWidth(size_t plane = 0); - size_t GetDevicePixelHeight(size_t plane = 0); - size_t GetBytesPerRow(size_t plane = 0); - void Lock(bool aReadOnly = true); - void Unlock(bool aReadOnly = true); - void IncrementUseCount(); - void DecrementUseCount(); - bool HasAlpha() { return mHasAlpha; } - mozilla::gfx::SurfaceFormat GetFormat(); - mozilla::gfx::SurfaceFormat GetReadFormat(); - - // We would like to forward declare NSOpenGLContext, but it is an @interface - // and this file is also used from c++, so we use a void *. - CGLError CGLTexImageIOSurface2D(CGLContextObj ctxt, size_t plane = 0); - already_AddRefed<SourceSurface> GetAsSurface(); - CGContextRef CreateIOSurfaceContext(); - - // FIXME This doesn't really belong here - static CGImageRef CreateImageFromIOSurfaceContext(CGContextRef aContext); - static already_AddRefed<MacIOSurface> IOSurfaceContextGetSurface(CGContextRef aContext, - double aContentsScaleFactor = 1.0, - bool aHasAlpha = true); - static size_t GetMaxWidth(); - static size_t GetMaxHeight(); - -private: - friend class nsCARenderer; - const void* mIOSurfacePtr; - double mContentsScaleFactor; - bool mHasAlpha; -}; - -class MacIOSurfaceLib { -public: - MacIOSurfaceLib() = delete; - static void *sIOSurfaceFramework; - static void *sOpenGLFramework; - static void *sCoreGraphicsFramework; - static void *sCoreVideoFramework; - static bool isLoaded; - static IOSurfaceCreateFunc sCreate; - static IOSurfaceGetIDFunc sGetID; - static IOSurfaceLookupFunc sLookup; - static IOSurfaceGetBaseAddressFunc sGetBaseAddress; - static IOSurfaceGetBaseAddressOfPlaneFunc sGetBaseAddressOfPlane; - static IOSurfaceSizeTFunc sPlaneCount; - static IOSurfaceLockFunc sLock; - static IOSurfaceUnlockFunc sUnlock; - static IOSurfaceVoidFunc sIncrementUseCount; - static IOSurfaceVoidFunc sDecrementUseCount; - static IOSurfaceSizePlaneTFunc sWidth; - static IOSurfaceSizePlaneTFunc sHeight; - static IOSurfaceSizePlaneTFunc sBytesPerRow; - static IOSurfaceGetPropertyMaximumFunc sGetPropertyMaximum; - static CGLTexImageIOSurface2DFunc sTexImage; - static IOSurfaceContextCreateFunc sIOSurfaceContextCreate; - static IOSurfaceContextCreateImageFunc sIOSurfaceContextCreateImage; - static IOSurfaceContextGetSurfaceFunc sIOSurfaceContextGetSurface; - static CVPixelBufferGetIOSurfaceFunc sCVPixelBufferGetIOSurface; - static IOSurfacePixelFormatFunc sPixelFormat; - static CFStringRef kPropWidth; - static CFStringRef kPropHeight; - static CFStringRef kPropBytesPerElem; - static CFStringRef kPropBytesPerRow; - static CFStringRef kPropIsGlobal; - - static bool isInit(); - static CFStringRef GetIOConst(const char* symbole); - static IOSurfacePtr IOSurfaceCreate(CFDictionaryRef properties); - static IOSurfacePtr IOSurfaceLookup(IOSurfaceID aIOSurfaceID); - static IOSurfaceID IOSurfaceGetID(IOSurfacePtr aIOSurfacePtr); - static void* IOSurfaceGetBaseAddress(IOSurfacePtr aIOSurfacePtr); - static void* IOSurfaceGetBaseAddressOfPlane(IOSurfacePtr aIOSurfacePtr, - size_t aPlaneIndex); - static size_t IOSurfaceGetPlaneCount(IOSurfacePtr aIOSurfacePtr); - static size_t IOSurfaceGetWidth(IOSurfacePtr aIOSurfacePtr, size_t plane); - static size_t IOSurfaceGetHeight(IOSurfacePtr aIOSurfacePtr, size_t plane); - static size_t IOSurfaceGetBytesPerRow(IOSurfacePtr aIOSurfacePtr, size_t plane); - static size_t IOSurfaceGetPropertyMaximum(CFStringRef property); - static IOReturn IOSurfaceLock(IOSurfacePtr aIOSurfacePtr, - uint32_t options, uint32_t *seed); - static IOReturn IOSurfaceUnlock(IOSurfacePtr aIOSurfacePtr, - uint32_t options, uint32_t *seed); - static void IOSurfaceIncrementUseCount(IOSurfacePtr aIOSurfacePtr); - static void IOSurfaceDecrementUseCount(IOSurfacePtr aIOSurfacePtr); - static CGLError CGLTexImageIOSurface2D(CGLContextObj ctxt, - GLenum target, GLenum internalFormat, - GLsizei width, GLsizei height, - GLenum format, GLenum type, - IOSurfacePtr ioSurface, GLuint plane); - static CGContextRef IOSurfaceContextCreate(IOSurfacePtr aIOSurfacePtr, - unsigned aWidth, unsigned aHeight, - unsigned aBitsPerCompoent, unsigned aBytes, - CGColorSpaceRef aColorSpace, CGBitmapInfo bitmapInfo); - static CGImageRef IOSurfaceContextCreateImage(CGContextRef ref); - static IOSurfacePtr IOSurfaceContextGetSurface(CGContextRef ref); - static IOSurfacePtr CVPixelBufferGetIOSurface(CVPixelBufferRef apixelBuffer); - static OSType IOSurfaceGetPixelFormat(IOSurfacePtr aIOSurfacePtr); - static unsigned int (*sCGContextGetTypePtr) (CGContextRef); - static void LoadLibrary(); - static void CloseLibrary(); - - // Static deconstructor - static class LibraryUnloader { - public: - ~LibraryUnloader() { - CloseLibrary(); - } - } sLibraryUnloader; -}; - -#endif -#endif |