Index: media/base/mac/coremedia_glue.mm |
diff --git a/media/base/mac/coremedia_glue.mm b/media/base/mac/coremedia_glue.mm |
deleted file mode 100644 |
index 23cfa09aeca2e0b40af0cc99085ed088df5b83df..0000000000000000000000000000000000000000 |
--- a/media/base/mac/coremedia_glue.mm |
+++ /dev/null |
@@ -1,359 +0,0 @@ |
-// Copyright 2013 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 "media/base/mac/coremedia_glue.h" |
- |
-#include <dlfcn.h> |
-#import <Foundation/Foundation.h> |
- |
-#include "base/lazy_instance.h" |
-#include "base/logging.h" |
-#include "base/macros.h" |
- |
-namespace { |
- |
-// This class is used to retrieve some CoreMedia library functions. It must be |
-// used as a LazyInstance so that it is initialised once and in a thread-safe |
-// way. Normally no work is done in constructors: LazyInstance is an exception. |
-class CoreMediaLibraryInternal { |
- public: |
- typedef CoreMediaGlue::CMTime (*CMTimeMakeMethod)(int64_t, int32_t); |
- |
- typedef OSStatus (*CMBlockBufferCreateContiguousMethod)( |
- CFAllocatorRef, |
- CoreMediaGlue::CMBlockBufferRef, |
- CFAllocatorRef, |
- const CoreMediaGlue::CMBlockBufferCustomBlockSource*, |
- size_t, |
- size_t, |
- CoreMediaGlue::CMBlockBufferFlags, |
- CoreMediaGlue::CMBlockBufferRef*); |
- typedef size_t (*CMBlockBufferGetDataLengthMethod)( |
- CoreMediaGlue::CMBlockBufferRef); |
- typedef OSStatus (*CMBlockBufferGetDataPointerMethod)( |
- CoreMediaGlue::CMBlockBufferRef, |
- size_t, |
- size_t*, |
- size_t*, |
- char**); |
- typedef Boolean (*CMBlockBufferIsRangeContiguousMethod)( |
- CoreMediaGlue::CMBlockBufferRef, |
- size_t, |
- size_t); |
- |
- typedef CoreMediaGlue::CMBlockBufferRef (*CMSampleBufferGetDataBufferMethod)( |
- CoreMediaGlue::CMSampleBufferRef); |
- typedef CoreMediaGlue::CMFormatDescriptionRef ( |
- *CMSampleBufferGetFormatDescriptionMethod)( |
- CoreMediaGlue::CMSampleBufferRef); |
- typedef CVImageBufferRef (*CMSampleBufferGetImageBufferMethod)( |
- CoreMediaGlue::CMSampleBufferRef); |
- typedef CFArrayRef (*CMSampleBufferGetSampleAttachmentsArrayMethod)( |
- CoreMediaGlue::CMSampleBufferRef, |
- Boolean); |
- typedef CoreMediaGlue::CMTime (*CMSampleBufferGetPresentationTimeStampMethod)( |
- CoreMediaGlue::CMSampleBufferRef); |
- |
- typedef FourCharCode (*CMFormatDescriptionGetMediaSubTypeMethod)( |
- CoreMediaGlue::CMFormatDescriptionRef desc); |
- typedef CoreMediaGlue::CMVideoDimensions |
- (*CMVideoFormatDescriptionGetDimensionsMethod)( |
- CoreMediaGlue::CMVideoFormatDescriptionRef videoDesc); |
- typedef OSStatus (*CMVideoFormatDescriptionGetH264ParameterSetAtIndexMethod)( |
- CoreMediaGlue::CMFormatDescriptionRef, |
- size_t, |
- const uint8_t**, |
- size_t*, |
- size_t*, |
- int*); |
- |
- CoreMediaLibraryInternal() { |
- NSBundle* bundle = [NSBundle |
- bundleWithPath:@"/System/Library/Frameworks/CoreMedia.framework"]; |
- |
- const char* path = [[bundle executablePath] fileSystemRepresentation]; |
- CHECK(path); |
- void* library_handle = dlopen(path, RTLD_LAZY | RTLD_LOCAL); |
- CHECK(library_handle) << dlerror(); |
- |
- // Now extract the methods. |
- cm_time_make_ = reinterpret_cast<CMTimeMakeMethod>( |
- dlsym(library_handle, "CMTimeMake")); |
- CHECK(cm_time_make_) << dlerror(); |
- |
- cm_block_buffer_create_contiguous_method_ = |
- reinterpret_cast<CMBlockBufferCreateContiguousMethod>( |
- dlsym(library_handle, "CMBlockBufferCreateContiguous")); |
- CHECK(cm_block_buffer_create_contiguous_method_) << dlerror(); |
- cm_block_buffer_get_data_length_method_ = |
- reinterpret_cast<CMBlockBufferGetDataLengthMethod>( |
- dlsym(library_handle, "CMBlockBufferGetDataLength")); |
- CHECK(cm_block_buffer_get_data_length_method_) << dlerror(); |
- cm_block_buffer_get_data_pointer_method_ = |
- reinterpret_cast<CMBlockBufferGetDataPointerMethod>( |
- dlsym(library_handle, "CMBlockBufferGetDataPointer")); |
- CHECK(cm_block_buffer_get_data_pointer_method_) << dlerror(); |
- cm_block_buffer_is_range_contiguous_method_ = |
- reinterpret_cast<CMBlockBufferIsRangeContiguousMethod>( |
- dlsym(library_handle, "CMBlockBufferIsRangeContiguous")); |
- CHECK(cm_block_buffer_is_range_contiguous_method_) << dlerror(); |
- |
- cm_sample_buffer_get_data_buffer_method_ = |
- reinterpret_cast<CMSampleBufferGetDataBufferMethod>( |
- dlsym(library_handle, "CMSampleBufferGetDataBuffer")); |
- CHECK(cm_sample_buffer_get_data_buffer_method_) << dlerror(); |
- cm_sample_buffer_get_format_description_method_ = |
- reinterpret_cast<CMSampleBufferGetFormatDescriptionMethod>( |
- dlsym(library_handle, "CMSampleBufferGetFormatDescription")); |
- CHECK(cm_sample_buffer_get_format_description_method_) << dlerror(); |
- cm_sample_buffer_get_image_buffer_method_ = |
- reinterpret_cast<CMSampleBufferGetImageBufferMethod>( |
- dlsym(library_handle, "CMSampleBufferGetImageBuffer")); |
- CHECK(cm_sample_buffer_get_image_buffer_method_) << dlerror(); |
- cm_sample_buffer_get_sample_attachments_array_method_ = |
- reinterpret_cast<CMSampleBufferGetSampleAttachmentsArrayMethod>( |
- dlsym(library_handle, "CMSampleBufferGetSampleAttachmentsArray")); |
- CHECK(cm_sample_buffer_get_sample_attachments_array_method_) << dlerror(); |
- cm_sample_buffer_get_presentation_timestamp_method_ = |
- reinterpret_cast<CMSampleBufferGetPresentationTimeStampMethod>( |
- dlsym(library_handle, "CMSampleBufferGetPresentationTimeStamp")); |
- CHECK(cm_sample_buffer_get_presentation_timestamp_method_) << dlerror(); |
- k_cm_sample_attachment_key_not_sync_ = reinterpret_cast<CFStringRef*>( |
- dlsym(library_handle, "kCMSampleAttachmentKey_NotSync")); |
- CHECK(k_cm_sample_attachment_key_not_sync_) << dlerror(); |
- |
- cm_format_description_get_media_sub_type_method_ = |
- reinterpret_cast<CMFormatDescriptionGetMediaSubTypeMethod>( |
- dlsym(library_handle, "CMFormatDescriptionGetMediaSubType")); |
- CHECK(cm_format_description_get_media_sub_type_method_) << dlerror(); |
- cm_video_format_description_get_dimensions_method_ = |
- reinterpret_cast<CMVideoFormatDescriptionGetDimensionsMethod>( |
- dlsym(library_handle, "CMVideoFormatDescriptionGetDimensions")); |
- CHECK(cm_video_format_description_get_dimensions_method_) << dlerror(); |
- |
- // Available starting (OS X 10.9, iOS 7), allow to be null. |
- cm_video_format_description_get_h264_parameter_set_at_index_method_ = |
- reinterpret_cast< |
- CMVideoFormatDescriptionGetH264ParameterSetAtIndexMethod>( |
- dlsym(library_handle, |
- "CMVideoFormatDescriptionGetH264ParameterSetAtIndex")); |
- } |
- |
- const CMTimeMakeMethod& cm_time_make() const { return cm_time_make_; } |
- |
- const CMBlockBufferCreateContiguousMethod& |
- cm_block_buffer_create_contiguous_method() const { |
- return cm_block_buffer_create_contiguous_method_; |
- } |
- const CMBlockBufferGetDataLengthMethod& |
- cm_block_buffer_get_data_length_method() const { |
- return cm_block_buffer_get_data_length_method_; |
- } |
- const CMBlockBufferGetDataPointerMethod& |
- cm_block_buffer_get_data_pointer_method() const { |
- return cm_block_buffer_get_data_pointer_method_; |
- } |
- const CMBlockBufferIsRangeContiguousMethod& |
- cm_block_buffer_is_range_contiguous_method() const { |
- return cm_block_buffer_is_range_contiguous_method_; |
- } |
- |
- const CMSampleBufferGetDataBufferMethod& |
- cm_sample_buffer_get_data_buffer_method() const { |
- return cm_sample_buffer_get_data_buffer_method_; |
- } |
- const CMSampleBufferGetFormatDescriptionMethod& |
- cm_sample_buffer_get_format_description_method() const { |
- return cm_sample_buffer_get_format_description_method_; |
- } |
- const CMSampleBufferGetImageBufferMethod& |
- cm_sample_buffer_get_image_buffer_method() const { |
- return cm_sample_buffer_get_image_buffer_method_; |
- } |
- const CMSampleBufferGetSampleAttachmentsArrayMethod& |
- cm_sample_buffer_get_sample_attachments_array_method() const { |
- return cm_sample_buffer_get_sample_attachments_array_method_; |
- } |
- const CMSampleBufferGetPresentationTimeStampMethod& |
- cm_sample_buffer_get_presentation_timestamp_method() const { |
- return cm_sample_buffer_get_presentation_timestamp_method_; |
- } |
- CFStringRef* const& k_cm_sample_attachment_key_not_sync() const { |
- return k_cm_sample_attachment_key_not_sync_; |
- } |
- |
- const CMFormatDescriptionGetMediaSubTypeMethod& |
- cm_format_description_get_media_sub_type_method() const { |
- return cm_format_description_get_media_sub_type_method_; |
- } |
- const CMVideoFormatDescriptionGetDimensionsMethod& |
- cm_video_format_description_get_dimensions_method() const { |
- return cm_video_format_description_get_dimensions_method_; |
- } |
- const CMVideoFormatDescriptionGetH264ParameterSetAtIndexMethod& |
- cm_video_format_description_get_h264_parameter_set_at_index_method() const { |
- return cm_video_format_description_get_h264_parameter_set_at_index_method_; |
- } |
- |
- private: |
- CMTimeMakeMethod cm_time_make_; |
- |
- CMBlockBufferCreateContiguousMethod cm_block_buffer_create_contiguous_method_; |
- CMBlockBufferGetDataLengthMethod cm_block_buffer_get_data_length_method_; |
- CMBlockBufferGetDataPointerMethod cm_block_buffer_get_data_pointer_method_; |
- CMBlockBufferIsRangeContiguousMethod |
- cm_block_buffer_is_range_contiguous_method_; |
- |
- CMSampleBufferGetDataBufferMethod cm_sample_buffer_get_data_buffer_method_; |
- CMSampleBufferGetFormatDescriptionMethod |
- cm_sample_buffer_get_format_description_method_; |
- CMSampleBufferGetImageBufferMethod cm_sample_buffer_get_image_buffer_method_; |
- CMSampleBufferGetSampleAttachmentsArrayMethod |
- cm_sample_buffer_get_sample_attachments_array_method_; |
- CFStringRef* k_cm_sample_attachment_key_not_sync_; |
- |
- CMFormatDescriptionGetMediaSubTypeMethod |
- cm_format_description_get_media_sub_type_method_; |
- CMVideoFormatDescriptionGetDimensionsMethod |
- cm_video_format_description_get_dimensions_method_; |
- CMVideoFormatDescriptionGetH264ParameterSetAtIndexMethod |
- cm_video_format_description_get_h264_parameter_set_at_index_method_; |
- CMSampleBufferGetPresentationTimeStampMethod |
- cm_sample_buffer_get_presentation_timestamp_method_; |
- |
- DISALLOW_COPY_AND_ASSIGN(CoreMediaLibraryInternal); |
-}; |
- |
-} // namespace |
- |
-static base::LazyInstance<CoreMediaLibraryInternal> g_coremedia_handle = |
- LAZY_INSTANCE_INITIALIZER; |
- |
-// static |
-CoreMediaGlue::CMTime CoreMediaGlue::CMTimeMake(int64_t value, |
- int32_t timescale) { |
- return g_coremedia_handle.Get().cm_time_make()(value, timescale); |
-} |
- |
-// static |
-OSStatus CoreMediaGlue::CMBlockBufferCreateContiguous( |
- CFAllocatorRef structureAllocator, |
- CMBlockBufferRef sourceBuffer, |
- CFAllocatorRef blockAllocator, |
- const CMBlockBufferCustomBlockSource* customBlockSource, |
- size_t offsetToData, |
- size_t dataLength, |
- CMBlockBufferFlags flags, |
- CMBlockBufferRef* newBBufOut) { |
- return g_coremedia_handle.Get().cm_block_buffer_create_contiguous_method()( |
- structureAllocator, |
- sourceBuffer, |
- blockAllocator, |
- customBlockSource, |
- offsetToData, |
- dataLength, |
- flags, |
- newBBufOut); |
-} |
- |
-// static |
-size_t CoreMediaGlue::CMBlockBufferGetDataLength(CMBlockBufferRef theBuffer) { |
- return g_coremedia_handle.Get().cm_block_buffer_get_data_length_method()( |
- theBuffer); |
-} |
- |
-// static |
-OSStatus CoreMediaGlue::CMBlockBufferGetDataPointer(CMBlockBufferRef theBuffer, |
- size_t offset, |
- size_t* lengthAtOffset, |
- size_t* totalLength, |
- char** dataPointer) { |
- return g_coremedia_handle.Get().cm_block_buffer_get_data_pointer_method()( |
- theBuffer, offset, lengthAtOffset, totalLength, dataPointer); |
-} |
- |
-// static |
-Boolean CoreMediaGlue::CMBlockBufferIsRangeContiguous( |
- CMBlockBufferRef theBuffer, |
- size_t offset, |
- size_t length) { |
- return g_coremedia_handle.Get().cm_block_buffer_is_range_contiguous_method()( |
- theBuffer, offset, length); |
-} |
- |
-// static |
-CoreMediaGlue::CMBlockBufferRef CoreMediaGlue::CMSampleBufferGetDataBuffer( |
- CMSampleBufferRef sbuf) { |
- return g_coremedia_handle.Get().cm_sample_buffer_get_data_buffer_method()( |
- sbuf); |
-} |
- |
-// static |
-CoreMediaGlue::CMFormatDescriptionRef |
-CoreMediaGlue::CMSampleBufferGetFormatDescription( |
- CoreMediaGlue::CMSampleBufferRef sbuf) { |
- return g_coremedia_handle.Get() |
- .cm_sample_buffer_get_format_description_method()(sbuf); |
-} |
- |
-// static |
-CVImageBufferRef CoreMediaGlue::CMSampleBufferGetImageBuffer( |
- CMSampleBufferRef buffer) { |
- return g_coremedia_handle.Get().cm_sample_buffer_get_image_buffer_method()( |
- buffer); |
-} |
- |
-// static |
-CFArrayRef CoreMediaGlue::CMSampleBufferGetSampleAttachmentsArray( |
- CMSampleBufferRef sbuf, |
- Boolean createIfNecessary) { |
- return g_coremedia_handle.Get() |
- .cm_sample_buffer_get_sample_attachments_array_method()( |
- sbuf, createIfNecessary); |
-} |
- |
-// static |
-CoreMediaGlue::CMTime CoreMediaGlue::CMSampleBufferGetPresentationTimeStamp( |
- CMSampleBufferRef sbuf) { |
- return g_coremedia_handle.Get() |
- .cm_sample_buffer_get_presentation_timestamp_method()(sbuf); |
-} |
- |
-// static |
-CFStringRef CoreMediaGlue::kCMSampleAttachmentKey_NotSync() { |
- return *g_coremedia_handle.Get().k_cm_sample_attachment_key_not_sync(); |
-} |
- |
-// static |
-FourCharCode CoreMediaGlue::CMFormatDescriptionGetMediaSubType( |
- CMFormatDescriptionRef desc) { |
- return g_coremedia_handle.Get() |
- .cm_format_description_get_media_sub_type_method()(desc); |
-} |
- |
-// static |
-CoreMediaGlue::CMVideoDimensions |
- CoreMediaGlue::CMVideoFormatDescriptionGetDimensions( |
- CMVideoFormatDescriptionRef videoDesc) { |
- return g_coremedia_handle.Get() |
- .cm_video_format_description_get_dimensions_method()(videoDesc); |
-} |
- |
-// static |
-OSStatus CoreMediaGlue::CMVideoFormatDescriptionGetH264ParameterSetAtIndex( |
- CMFormatDescriptionRef videoDesc, |
- size_t parameterSetIndex, |
- const uint8_t** parameterSetPointerOut, |
- size_t* parameterSetSizeOut, |
- size_t* parameterSetCountOut, |
- int* NALUnitHeaderLengthOut) { |
- return g_coremedia_handle.Get() |
- .cm_video_format_description_get_h264_parameter_set_at_index_method()( |
- videoDesc, |
- parameterSetIndex, |
- parameterSetPointerOut, |
- parameterSetSizeOut, |
- parameterSetCountOut, |
- NALUnitHeaderLengthOut); |
-} |