diff options
author | danakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-19 00:48:27 +0000 |
---|---|---|
committer | danakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-19 00:48:27 +0000 |
commit | 423e644f968f8a13dbc54dc9113d4aa7ce5dad8f (patch) | |
tree | eae826909e515f7a699b2a53776a07a1768fa233 /ui/surface | |
parent | 0390b81932bb0d95ecc0250706854adc11f4f2c2 (diff) | |
download | chromium_src-423e644f968f8a13dbc54dc9113d4aa7ce5dad8f.zip chromium_src-423e644f968f8a13dbc54dc9113d4aa7ce5dad8f.tar.gz chromium_src-423e644f968f8a13dbc54dc9113d4aa7ce5dad8f.tar.bz2 |
Move io_surface_support_mac to ui/gl.
This removes a dependency on media/ via ui/surface from gpu.gyp, allowing
media to use gpu.gyp for gpu::Mailbox.
R=piman@chromium.org, sky@chromium.org
BUG=179729
Review URL: https://codereview.chromium.org/17381009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@207129 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/surface')
-rw-r--r-- | ui/surface/accelerated_surface_mac.cc | 2 | ||||
-rw-r--r-- | ui/surface/io_surface_support_mac.cc | 303 | ||||
-rw-r--r-- | ui/surface/io_surface_support_mac.h | 73 | ||||
-rw-r--r-- | ui/surface/surface.gyp | 2 |
4 files changed, 1 insertions, 379 deletions
diff --git a/ui/surface/accelerated_surface_mac.cc b/ui/surface/accelerated_surface_mac.cc index 239836a..ce80eb0 100644 --- a/ui/surface/accelerated_surface_mac.cc +++ b/ui/surface/accelerated_surface_mac.cc @@ -11,8 +11,8 @@ #include "ui/gl/gl_context.h" #include "ui/gl/gl_implementation.h" #include "ui/gl/gl_surface.h" +#include "ui/gl/io_surface_support_mac.h" #include "ui/gl/scoped_make_current.h" -#include "ui/surface/io_surface_support_mac.h" AcceleratedSurface::AcceleratedSurface() : io_surface_id_(0), diff --git a/ui/surface/io_surface_support_mac.cc b/ui/surface/io_surface_support_mac.cc deleted file mode 100644 index 53376e5..0000000 --- a/ui/surface/io_surface_support_mac.cc +++ /dev/null @@ -1,303 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include <dlfcn.h> - -#include "base/memory/singleton.h" -#include "ui/surface/io_surface_support_mac.h" - -typedef CFTypeRef (*IOSurfaceCreateProcPtr)(CFDictionaryRef properties); -typedef uint32 (*IOSurfaceGetIDProcPtr)(CFTypeRef io_surface); -typedef CFTypeRef (*IOSurfaceLookupProcPtr)(uint32 io_surface_id); -typedef mach_port_t (*IOSurfaceCreateMachPortProcPtr)(CFTypeRef io_surface); -typedef CFTypeRef (*IOSurfaceLookupFromMachPortProcPtr)(mach_port_t port); -typedef size_t (*IOSurfaceGetWidthPtr)(CFTypeRef io_surface); -typedef size_t (*IOSurfaceGetHeightPtr)(CFTypeRef io_surface); -typedef CGLError (*CGLTexImageIOSurface2DProcPtr)(CGLContextObj ctx, - GLenum target, - GLenum internal_format, - GLsizei width, - GLsizei height, - GLenum format, - GLenum type, - CFTypeRef io_surface, - GLuint plane); -typedef CFTypeRef (*CVPixelBufferGetIOSurfaceProcPtr)( - CVPixelBufferRef pixel_buffer); - -class IOSurfaceSupportImpl : public IOSurfaceSupport { - public: - static IOSurfaceSupportImpl* GetInstance(); - - bool InitializedSuccessfully() { - return initialized_successfully_; - } - - virtual CFStringRef GetKIOSurfaceWidth() OVERRIDE; - virtual CFStringRef GetKIOSurfaceHeight() OVERRIDE; - virtual CFStringRef GetKIOSurfaceBytesPerElement() OVERRIDE; - virtual CFStringRef GetKIOSurfaceIsGlobal() OVERRIDE; - - virtual CFTypeRef IOSurfaceCreate(CFDictionaryRef properties) OVERRIDE; - virtual uint32 IOSurfaceGetID(CFTypeRef io_surface) OVERRIDE; - virtual CFTypeRef IOSurfaceLookup(uint32 io_surface_id) OVERRIDE; - virtual mach_port_t IOSurfaceCreateMachPort(CFTypeRef io_surface) OVERRIDE; - virtual CFTypeRef IOSurfaceLookupFromMachPort(mach_port_t port) OVERRIDE; - - virtual size_t IOSurfaceGetWidth(CFTypeRef io_surface) OVERRIDE; - virtual size_t IOSurfaceGetHeight(CFTypeRef io_surface) OVERRIDE; - - virtual CGLError CGLTexImageIOSurface2D(CGLContextObj ctx, - GLenum target, - GLenum internal_format, - GLsizei width, - GLsizei height, - GLenum format, - GLenum type, - CFTypeRef io_surface, - GLuint plane) OVERRIDE; - - virtual CFTypeRef CVPixelBufferGetIOSurface( - CVPixelBufferRef pixel_buffer) OVERRIDE; - - private: - IOSurfaceSupportImpl(); - virtual ~IOSurfaceSupportImpl(); - - void CloseLibraryHandles(); - - void* iosurface_handle_; - void* opengl_handle_; - void* core_video_handle_; - CFStringRef k_io_surface_width_; - CFStringRef k_io_surface_height_; - CFStringRef k_io_surface_bytes_per_element_; - CFStringRef k_io_surface_is_global_; - IOSurfaceCreateProcPtr io_surface_create_; - IOSurfaceGetIDProcPtr io_surface_get_id_; - IOSurfaceLookupProcPtr io_surface_lookup_; - IOSurfaceCreateMachPortProcPtr io_surface_create_mach_port_; - IOSurfaceLookupFromMachPortProcPtr io_surface_lookup_from_mach_port_; - IOSurfaceGetWidthPtr io_surface_get_width_; - IOSurfaceGetHeightPtr io_surface_get_height_; - CGLTexImageIOSurface2DProcPtr cgl_tex_image_io_surface_2d_; - CVPixelBufferGetIOSurfaceProcPtr cv_pixel_buffer_get_io_surface_; - bool initialized_successfully_; - - friend struct DefaultSingletonTraits<IOSurfaceSupportImpl>; - DISALLOW_COPY_AND_ASSIGN(IOSurfaceSupportImpl); -}; - -IOSurfaceSupportImpl* IOSurfaceSupportImpl::GetInstance() { - IOSurfaceSupportImpl* impl = Singleton<IOSurfaceSupportImpl>::get(); - if (impl->InitializedSuccessfully()) - return impl; - return NULL; -} - -CFStringRef IOSurfaceSupportImpl::GetKIOSurfaceWidth() { - return k_io_surface_width_; -} - -CFStringRef IOSurfaceSupportImpl::GetKIOSurfaceHeight() { - return k_io_surface_height_; -} - -CFStringRef IOSurfaceSupportImpl::GetKIOSurfaceBytesPerElement() { - return k_io_surface_bytes_per_element_; -} - -CFStringRef IOSurfaceSupportImpl::GetKIOSurfaceIsGlobal() { - return k_io_surface_is_global_; -} - -CFTypeRef IOSurfaceSupportImpl::IOSurfaceCreate(CFDictionaryRef properties) { - return io_surface_create_(properties); -} - -uint32 IOSurfaceSupportImpl::IOSurfaceGetID( - CFTypeRef io_surface) { - return io_surface_get_id_(io_surface); -} - -CFTypeRef IOSurfaceSupportImpl::IOSurfaceLookup(uint32 io_surface_id) { - return io_surface_lookup_(io_surface_id); -} - -mach_port_t IOSurfaceSupportImpl::IOSurfaceCreateMachPort( - CFTypeRef io_surface) { - return io_surface_create_mach_port_(io_surface); -} - -CFTypeRef IOSurfaceSupportImpl::IOSurfaceLookupFromMachPort(mach_port_t port) { - return io_surface_lookup_from_mach_port_(port); -} - -size_t IOSurfaceSupportImpl::IOSurfaceGetWidth(CFTypeRef io_surface) { - return io_surface_get_width_(io_surface); -} - -size_t IOSurfaceSupportImpl::IOSurfaceGetHeight(CFTypeRef io_surface) { - return io_surface_get_height_(io_surface); -} - - -CGLError IOSurfaceSupportImpl::CGLTexImageIOSurface2D(CGLContextObj ctx, - GLenum target, - GLenum internal_format, - GLsizei width, - GLsizei height, - GLenum format, - GLenum type, - CFTypeRef io_surface, - GLuint plane) { - return cgl_tex_image_io_surface_2d_(ctx, - target, - internal_format, - width, - height, - format, - type, - io_surface, - plane); -} - -CFTypeRef IOSurfaceSupportImpl::CVPixelBufferGetIOSurface( - CVPixelBufferRef pixel_buffer) { - return cv_pixel_buffer_get_io_surface_(pixel_buffer); -} - -IOSurfaceSupportImpl::IOSurfaceSupportImpl() - : iosurface_handle_(NULL), - opengl_handle_(NULL), - core_video_handle_(NULL), - k_io_surface_width_(NULL), - k_io_surface_height_(NULL), - k_io_surface_bytes_per_element_(NULL), - k_io_surface_is_global_(NULL), - io_surface_create_(NULL), - io_surface_get_id_(NULL), - io_surface_lookup_(NULL), - io_surface_create_mach_port_(NULL), - io_surface_lookup_from_mach_port_(NULL), - io_surface_get_width_(NULL), - io_surface_get_height_(NULL), - cgl_tex_image_io_surface_2d_(NULL), - cv_pixel_buffer_get_io_surface_(NULL), - initialized_successfully_(false) { - iosurface_handle_ = dlopen( - "/System/Library/Frameworks/IOSurface.framework/IOSurface", - RTLD_LAZY | RTLD_LOCAL); - opengl_handle_ = dlopen( - "/System/Library/Frameworks/OpenGL.framework/OpenGL", - RTLD_LAZY | RTLD_LOCAL); - core_video_handle_ = dlopen( - "/System/Library/Frameworks/CoreVideo.framework/CoreVideo", - RTLD_LAZY | RTLD_LOCAL); - if (!iosurface_handle_ || - !opengl_handle_ || - !core_video_handle_) { - CloseLibraryHandles(); - return; - } - - void* surface_width_ptr = dlsym(iosurface_handle_, "kIOSurfaceWidth"); - void* surface_height_ptr = dlsym(iosurface_handle_, "kIOSurfaceHeight"); - void* surface_bytes_per_element_ptr = - dlsym(iosurface_handle_, "kIOSurfaceBytesPerElement"); - void* surface_is_global_ptr = - dlsym(iosurface_handle_, "kIOSurfaceIsGlobal"); - void* surface_create_ptr = dlsym(iosurface_handle_, "IOSurfaceCreate"); - void* surface_get_id_ptr = dlsym(iosurface_handle_, "IOSurfaceGetID"); - void* surface_lookup_ptr = dlsym(iosurface_handle_, "IOSurfaceLookup"); - void* surface_create_mach_port_ptr = - dlsym(iosurface_handle_, "IOSurfaceCreateMachPort"); - void* surface_lookup_from_mach_port_ptr = - dlsym(iosurface_handle_, "IOSurfaceLookupFromMachPort"); - void* io_surface_get_width_ptr = - dlsym(iosurface_handle_, "IOSurfaceGetWidth"); - void* io_surface_get_height_ptr = - dlsym(iosurface_handle_, "IOSurfaceGetHeight"); - void* tex_image_io_surface_2d_ptr = - dlsym(opengl_handle_, "CGLTexImageIOSurface2D"); - void* cv_pixel_buffer_get_io_surface = - dlsym(core_video_handle_, "CVPixelBufferGetIOSurface"); - if (!surface_width_ptr || - !surface_height_ptr || - !surface_bytes_per_element_ptr || - !surface_is_global_ptr || - !surface_create_ptr || - !surface_get_id_ptr || - !surface_lookup_ptr || - !surface_create_mach_port_ptr || - !surface_lookup_from_mach_port_ptr || - !io_surface_get_width_ptr || - !io_surface_get_height_ptr || - !tex_image_io_surface_2d_ptr || - !cv_pixel_buffer_get_io_surface) { - CloseLibraryHandles(); - return; - } - - k_io_surface_width_ = *static_cast<CFStringRef*>(surface_width_ptr); - k_io_surface_height_ = *static_cast<CFStringRef*>(surface_height_ptr); - k_io_surface_bytes_per_element_ = - *static_cast<CFStringRef*>(surface_bytes_per_element_ptr); - k_io_surface_is_global_ = *static_cast<CFStringRef*>(surface_is_global_ptr); - io_surface_create_ = reinterpret_cast<IOSurfaceCreateProcPtr>( - surface_create_ptr); - io_surface_get_id_ = - reinterpret_cast<IOSurfaceGetIDProcPtr>(surface_get_id_ptr); - io_surface_lookup_ = - reinterpret_cast<IOSurfaceLookupProcPtr>(surface_lookup_ptr); - io_surface_create_mach_port_ = - reinterpret_cast<IOSurfaceCreateMachPortProcPtr>( - surface_create_mach_port_ptr); - io_surface_lookup_from_mach_port_ = - reinterpret_cast<IOSurfaceLookupFromMachPortProcPtr>( - surface_lookup_from_mach_port_ptr); - io_surface_get_width_ = - reinterpret_cast<IOSurfaceGetWidthPtr>( - io_surface_get_width_ptr); - io_surface_get_height_ = - reinterpret_cast<IOSurfaceGetHeightPtr>( - io_surface_get_height_ptr); - cgl_tex_image_io_surface_2d_ = - reinterpret_cast<CGLTexImageIOSurface2DProcPtr>( - tex_image_io_surface_2d_ptr); - cv_pixel_buffer_get_io_surface_ = - reinterpret_cast<CVPixelBufferGetIOSurfaceProcPtr>( - cv_pixel_buffer_get_io_surface); - initialized_successfully_ = true; -} - -IOSurfaceSupportImpl::~IOSurfaceSupportImpl() { - CloseLibraryHandles(); -} - -void IOSurfaceSupportImpl::CloseLibraryHandles() { - if (iosurface_handle_) { - dlclose(iosurface_handle_); - iosurface_handle_ = NULL; - } - if (opengl_handle_) { - dlclose(opengl_handle_); - opengl_handle_ = NULL; - } - if (core_video_handle_) { - dlclose(core_video_handle_); - core_video_handle_ = NULL; - } -} - -IOSurfaceSupport* IOSurfaceSupport::Initialize() { - return IOSurfaceSupportImpl::GetInstance(); -} - -IOSurfaceSupport::IOSurfaceSupport() { -} - -IOSurfaceSupport::~IOSurfaceSupport() { -} - diff --git a/ui/surface/io_surface_support_mac.h b/ui/surface/io_surface_support_mac.h deleted file mode 100644 index 3f6d6bb..0000000 --- a/ui/surface/io_surface_support_mac.h +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef UI_SURFACE_IO_SURFACE_SUPPORT_MAC_H_ -#define UI_SURFACE_IO_SURFACE_SUPPORT_MAC_H_ - -#include <CoreFoundation/CoreFoundation.h> -#include <CoreVideo/CoreVideo.h> -#include <mach/mach.h> -#include <OpenGL/OpenGL.h> - -#include "base/basictypes.h" -#include "ui/surface/surface_export.h" - -// This Mac OS X-specific class provides dynamically-linked access to -// IOSurface.framework, which is only available on 10.6 and later. -// Since Chromium is built on 10.5 we must dynamically look up all of -// the entry points we need in this framework. - -// See IOSurface/IOSurfaceAPI.h and OpenGL/CGLIOSurface.h on 10.6 for -// documentation of the fields and methods of this class. - -class SURFACE_EXPORT IOSurfaceSupport { - public: - // Returns an instance of the IOSurfaceSupport class if the - // operating system supports it, NULL otherwise. It is safe to call - // this multiple times. - static IOSurfaceSupport* Initialize(); - - virtual CFStringRef GetKIOSurfaceWidth() = 0; - virtual CFStringRef GetKIOSurfaceHeight() = 0; - virtual CFStringRef GetKIOSurfaceBytesPerElement() = 0; - virtual CFStringRef GetKIOSurfaceIsGlobal() = 0; - - virtual CFTypeRef IOSurfaceCreate(CFDictionaryRef properties) = 0; - - // The following two APIs assume the IOSurface was created with the - // kIOSurfaceIsGlobal key set to true - virtual uint32 IOSurfaceGetID(CFTypeRef io_surface) = 0; - virtual CFTypeRef IOSurfaceLookup(uint32 io_surface_id) = 0; - - // The following two APIs are more robust and secure, but - // unfortunately it looks like it will be a lot of work to correctly - // transmit a mach port from process to process (possibly requiring - // a side channel for or extension of the Chrome IPC mechanism) - virtual mach_port_t IOSurfaceCreateMachPort(CFTypeRef io_surface) = 0; - virtual CFTypeRef IOSurfaceLookupFromMachPort(mach_port_t port) = 0; - - virtual size_t IOSurfaceGetWidth(CFTypeRef io_surface) = 0; - virtual size_t IOSurfaceGetHeight(CFTypeRef io_surface) = 0; - - virtual CGLError CGLTexImageIOSurface2D(CGLContextObj ctx, - GLenum target, - GLenum internal_format, - GLsizei width, - GLsizei height, - GLenum format, - GLenum type, - CFTypeRef io_surface, - GLuint plane) = 0; - - virtual CFTypeRef CVPixelBufferGetIOSurface( - CVPixelBufferRef pixel_buffer) = 0; - - protected: - IOSurfaceSupport(); - virtual ~IOSurfaceSupport(); - - DISALLOW_COPY_AND_ASSIGN(IOSurfaceSupport); -}; - -#endif // UI_SURFACE_IO_SURFACE_SUPPORT_MAC_H_ diff --git a/ui/surface/surface.gyp b/ui/surface/surface.gyp index 2c7ba5e..5887e06 100644 --- a/ui/surface/surface.gyp +++ b/ui/surface/surface.gyp @@ -74,8 +74,6 @@ 'accelerated_surface_win.h', 'd3d9_utils_win.cc', 'd3d9_utils_win.h', - 'io_surface_support_mac.cc', - 'io_surface_support_mac.h', 'surface_export.h', 'surface_switches.h', 'surface_switches.cc', |