| 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);
|
| -}
|
|
|