Chromium Code Reviews| Index: media/base/mac/videotoolbox_glue.h |
| diff --git a/media/base/mac/videotoolbox_glue.h b/media/base/mac/videotoolbox_glue.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..cb2748c39a39a511acb254440a5dda9a57229fd5 |
| --- /dev/null |
| +++ b/media/base/mac/videotoolbox_glue.h |
| @@ -0,0 +1,105 @@ |
| +// 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 MEDIA_BASE_MAC_VIDEOTOOLBOX_GLUE_H_ |
| +#define MEDIA_BASE_MAC_VIDEOTOOLBOX_GLUE_H_ |
| + |
| +#include "base/basictypes.h" |
| +#include "media/base/mac/coremedia_glue.h" |
| +#include "media/base/media_export.h" |
| + |
| +// VideoToolbox API is available in OS X 10.9 and iOS 8 (10.8 has support for |
| +// software encoding, but this class exposes the 10.9 API level). Chromium |
| +// requires OS X 10.6 or iOS 6. Linking with VideoToolbox therefore has to |
| +// happen at runtime. This class is defined to try and load the VideoToolbox |
| +// library. If it succeeds, clients can use VideoToolbox via this class. |
| +class MEDIA_EXPORT VideoToolboxGlue { |
| + public: |
| + class Loader; |
|
Robert Sesek
2014/09/12 16:16:16
Move to private: ?
jfroy
2014/09/12 17:11:46
Loader is the lazy instance class in the implement
|
| + |
| + // Returns a glue object if VideoToolbox is supported or null otherwise. |
| + // Using a glue object allows to avoid expensive atomic operations on every |
| + // function call. The object has process life duration and must not be |
| + // deleted. |
| + static const VideoToolboxGlue* Get(); |
| + |
| + // Originally from VTErrors.h |
| + typedef UInt32 VTEncodeInfoFlags; |
| + enum { |
| + kVTEncodeInfo_Asynchronous = 1UL << 0, |
| + kVTEncodeInfo_FrameDropped = 1UL << 1, |
| + }; |
| + |
| + // Originally from VTCompressionSession.h |
| + typedef struct OpaqueVTCompressionSession* VTCompressionSessionRef; |
| + typedef void (*VTCompressionOutputCallback)( |
| + void* outputCallbackRefCon, |
| + void* sourceFrameRefCon, |
| + OSStatus status, |
| + VTEncodeInfoFlags infoFlags, |
| + CoreMediaGlue::CMSampleBufferRef sampleBuffer); |
| + |
| + // Originally from VTSession.h |
| + typedef CFTypeRef VTSessionRef; |
| + |
| + // Originally from VTCompressionProperties.h |
| + CFStringRef kVTCompressionPropertyKey_AllowFrameReordering() const; |
| + CFStringRef kVTCompressionPropertyKey_AverageBitRate() const; |
| + CFStringRef kVTCompressionPropertyKey_ColorPrimaries() const; |
| + CFStringRef kVTCompressionPropertyKey_ExpectedFrameRate() const; |
| + CFStringRef kVTCompressionPropertyKey_MaxKeyFrameInterval() const; |
| + CFStringRef kVTCompressionPropertyKey_MaxKeyFrameIntervalDuration() const; |
| + CFStringRef kVTCompressionPropertyKey_ProfileLevel() const; |
| + CFStringRef kVTCompressionPropertyKey_RealTime() const; |
| + CFStringRef kVTCompressionPropertyKey_TransferFunction() const; |
| + CFStringRef kVTCompressionPropertyKey_YCbCrMatrix() const; |
| + |
| + CFStringRef kVTEncodeFrameOptionKey_ForceKeyFrame() const; |
| + |
| + CFStringRef kVTProfileLevel_H264_Baseline_AutoLevel() const; |
| + CFStringRef kVTProfileLevel_H264_Main_AutoLevel() const; |
| + CFStringRef kVTProfileLevel_H264_Extended_AutoLevel() const; |
| + CFStringRef kVTProfileLevel_H264_High_AutoLevel() const; |
| + |
| + CFStringRef |
| + kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder() |
| + const; |
| + |
| + // Originally from VTCompressionSession.h |
| + OSStatus VTCompressionSessionCreate( |
| + CFAllocatorRef allocator, |
| + int32_t width, |
| + int32_t height, |
| + CoreMediaGlue::CMVideoCodecType codecType, |
| + CFDictionaryRef encoderSpecification, |
| + CFDictionaryRef sourceImageBufferAttributes, |
| + CFAllocatorRef compressedDataAllocator, |
| + VTCompressionOutputCallback outputCallback, |
| + void* outputCallbackRefCon, |
| + VTCompressionSessionRef* compressionSessionOut) const; |
| + OSStatus VTCompressionSessionEncodeFrame( |
| + VTCompressionSessionRef session, |
| + CVImageBufferRef imageBuffer, |
| + CoreMediaGlue::CMTime presentationTimeStamp, |
| + CoreMediaGlue::CMTime duration, |
| + CFDictionaryRef frameProperties, |
| + void* sourceFrameRefCon, |
| + VTEncodeInfoFlags* infoFlagsOut) const; |
| + CVPixelBufferPoolRef VTCompressionSessionGetPixelBufferPool( |
| + VTCompressionSessionRef session) const; |
| + void VTCompressionSessionInvalidate(VTCompressionSessionRef session) const; |
| + |
| + // Originally from VTSession.h |
| + OSStatus VTSessionSetProperty(VTSessionRef session, |
| + CFStringRef propertyKey, |
| + CFTypeRef propertyValue) const; |
| + |
| + private: |
| + struct Library; |
| + VideoToolboxGlue(); |
| + Library* library_; |
| + DISALLOW_COPY_AND_ASSIGN(VideoToolboxGlue); |
| +}; |
| + |
| +#endif // MEDIA_BASE_MAC_VIDEOTOOLBOX_GLUE_H_ |