Index: content/common/gpu/media/vt_support.h |
diff --git a/content/common/gpu/media/vt_support.h b/content/common/gpu/media/vt_support.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..822cc0d5be16b8ddc1b8e71e774943d0e0c491e9 |
--- /dev/null |
+++ b/content/common/gpu/media/vt_support.h |
@@ -0,0 +1,140 @@ |
+// Copyright 2014 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 CONTENT_COMMON_GPU_MEDIA_VT_SUPPORT_H_ |
+#define CONTENT_COMMON_GPU_MEDIA_VT_SUPPORT_H_ |
+ |
+#include <CoreFoundation/CoreFoundation.h> |
+#include <CoreVideo/CVImageBuffer.h> |
+ |
+#include "base/basictypes.h" |
+ |
+template<typename T> struct DefaultSingletonTraits; |
+ |
+// Declarations adapted from <CoreMedia/CoreMedia.h> |
+typedef struct OpaqueCMBlockBuffer* CMBlockBufferRef; |
+typedef struct OpaqueCMFormatDescription* CMFormatDescriptionRef; |
+typedef struct OpaqueCMFormatDescription* CMVideoFormatDescriptionRef; |
+typedef struct OpaqueCMSampleBuffer* CMSampleBufferRef; |
+typedef uint32_t CMBlockBufferFlags; |
+typedef int64_t CMItemCount; |
+typedef OSStatus (*CMSampleBufferMakeDataReadyCallback)( |
+ CMSampleBufferRef sbuf, |
+ void *make_data_ready_refcon); |
+ |
+struct CMBlockBufferCustomBlockSource; |
+struct CMSampleTimingInfo; |
+struct CMTime { |
mcasas
2014/06/19 12:04:24
This is also defined here:
https://code.google.com
|
+ int64_t value; |
+ int32_t timescale; |
+ uint32_t flags; |
+ int64_t epoch; |
+}; |
+ |
+// Declarations adapted from <VideoToolbox/VideoToolbox.h> |
+typedef struct OpaqueVTDecompressionSession* VTDecompressionSessionRef; |
+typedef uint32_t VTDecodeFrameFlags; |
+typedef uint32_t VTDecodeInfoFlags; |
+typedef void (*VTDecompressionOutputCallback)( |
+ void* decompression_output_refcon, |
+ void* source_frame_refcon, |
+ OSStatus status, |
+ VTDecodeInfoFlags info_flags, |
+ CVImageBufferRef image_buffer, |
+ CMTime presentation_timestamp, |
+ CMTime presentation_duration); |
+ |
+struct VTDecompressionOutputCallbackRecord { |
+ VTDecompressionOutputCallback decompression_output_callback; |
+ void* decompression_output_refcon; |
+}; |
+ |
+namespace content { |
+ |
+// This Mac OS X-specific class provides dynamically-linked access to |
+// CoreMedia and VideoToolbox, which are only available on 10.8 and later. |
+class VTSupport { |
mcasas
2014/06/19 12:04:24
- Looking at src/media/video/capture/mac/, this cl
|
+ public: |
+ // Returns an instance of the VTSupport class if the operating system supports |
+ // it, NULL otherwise. It is safe to call this multiple times. |
+ static VTSupport* GetInstance(); |
+ |
+ bool Initialized(); |
+ |
+ typedef OSStatus (*CMBlockBufferCreateWithMemoryBlockPtr)( |
+ CFAllocatorRef structure_allocator, |
+ void* memory_block, |
+ size_t block_length, |
+ CFAllocatorRef block_allocator, |
+ const CMBlockBufferCustomBlockSource* custom_block_source, |
+ size_t offset_to_data, |
+ size_t data_length, |
+ CMBlockBufferFlags flags, |
+ CMBlockBufferRef* new_block_buffer_out); |
+ |
+ typedef CFDictionaryRef (*CMFormatDescriptionGetExtensionsPtr)( |
+ CMFormatDescriptionRef desc); |
+ |
+ typedef OSStatus (*CMSampleBufferCreatePtr)( |
+ CFAllocatorRef allocator, |
+ CMBlockBufferRef data_buffer, |
+ Boolean data_ready, |
+ CMSampleBufferMakeDataReadyCallback make_data_ready_callback, |
+ void* make_data_ready_refcon, |
+ CMFormatDescriptionRef format_description, |
+ CMItemCount num_samples, |
+ CMItemCount num_sample_timing_entries, |
+ const CMSampleTimingInfo* sample_timing_array, |
+ CMItemCount num_sample_size_entries, |
+ const size_t* sample_size_array, |
+ CMSampleBufferRef* s_buf_out); |
+ |
+ typedef OSStatus (*CMVideoFormatDescriptionCreateFromH264ParameterSetsPtr)( |
+ CFAllocatorRef allocator, |
+ size_t parameter_set_count, |
+ const uint8_t* const* parameter_set_pointers, |
+ const size_t* parameter_set_sizes, |
+ int nal_unit_header_length, |
+ CMFormatDescriptionRef *format_description_out); |
+ |
+ typedef OSStatus (*VTDecompressionSessionCreatePtr)( |
+ CFAllocatorRef allocator, |
+ CMVideoFormatDescriptionRef video_format_description, |
+ CFDictionaryRef video_decoder_specification, |
+ CFDictionaryRef destination_image_buffer_attributes, |
+ const VTDecompressionOutputCallbackRecord* output_callback, |
+ VTDecompressionSessionRef* decompression_session_out); |
+ |
+ typedef OSStatus (*VTDecompressionSessionDecodeFramePtr)( |
+ VTDecompressionSessionRef session, |
+ CMSampleBufferRef sample_buffer, |
+ VTDecodeFrameFlags decode_flags, |
+ void* source_frame_refcon, |
+ VTDecodeInfoFlags* info_flags_out); |
+ |
+ CMBlockBufferCreateWithMemoryBlockPtr CMBlockBufferCreateWithMemoryBlock; |
+ CMFormatDescriptionGetExtensionsPtr CMFormatDescriptionGetExtensions; |
+ CMSampleBufferCreatePtr CMSampleBufferCreate; |
+ CMVideoFormatDescriptionCreateFromH264ParameterSetsPtr |
+ CMVideoFormatDescriptionCreateFromH264ParameterSets; |
+ |
+ VTDecompressionSessionDecodeFramePtr VTDecompressionSessionDecodeFrame; |
+ VTDecompressionSessionCreatePtr VTDecompressionSessionCreate; |
+ |
+ private: |
+ VTSupport(); |
+ ~VTSupport(); |
+ void CloseLibraryHandles(); |
+ |
+ void* cm_handle_; |
+ void* vt_handle_; |
+ bool initialized_; |
+ |
+ friend struct DefaultSingletonTraits<VTSupport>; |
+ DISALLOW_COPY_AND_ASSIGN(VTSupport); |
+}; |
+ |
+} // namespace content |
+ |
+#endif // CONTENT_COMMON_GPU_MEDIA_VT_SUPPORT_H_ |