Home | History | Annotate | Download | only in mac
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef MEDIA_BASE_MAC_VIDEOTOOLBOX_GLUE_H_
      6 #define MEDIA_BASE_MAC_VIDEOTOOLBOX_GLUE_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "media/base/mac/coremedia_glue.h"
     10 #include "media/base/media_export.h"
     11 
     12 // VideoToolbox API is available in OS X 10.9 and iOS 8 (10.8 has support for
     13 // software encoding, but this class exposes the 10.9 API level). Chromium
     14 // requires OS X 10.6 or iOS 6. Linking with VideoToolbox therefore has to
     15 // happen at runtime. This class is defined to try and load the VideoToolbox
     16 // library. If it succeeds, clients can use VideoToolbox via this class.
     17 class MEDIA_EXPORT VideoToolboxGlue {
     18  public:
     19   class Loader;
     20 
     21   // Returns a glue object if VideoToolbox is supported or null otherwise.
     22   // Using a glue object allows to avoid expensive atomic operations on every
     23   // function call. The object has process life duration and must not be
     24   // deleted.
     25   static const VideoToolboxGlue* Get();
     26 
     27   // Originally from VTErrors.h
     28   typedef UInt32 VTEncodeInfoFlags;
     29   enum {
     30     kVTEncodeInfo_Asynchronous = 1UL << 0,
     31     kVTEncodeInfo_FrameDropped = 1UL << 1,
     32   };
     33 
     34   // Originally from VTCompressionSession.h
     35   typedef struct OpaqueVTCompressionSession* VTCompressionSessionRef;
     36   typedef void (*VTCompressionOutputCallback)(
     37       void* outputCallbackRefCon,
     38       void* sourceFrameRefCon,
     39       OSStatus status,
     40       VTEncodeInfoFlags infoFlags,
     41       CoreMediaGlue::CMSampleBufferRef sampleBuffer);
     42 
     43   // Originally from VTSession.h
     44   typedef CFTypeRef VTSessionRef;
     45 
     46   // Originally from VTCompressionProperties.h
     47   CFStringRef kVTCompressionPropertyKey_AllowFrameReordering() const;
     48   CFStringRef kVTCompressionPropertyKey_AverageBitRate() const;
     49   CFStringRef kVTCompressionPropertyKey_ColorPrimaries() const;
     50   CFStringRef kVTCompressionPropertyKey_ExpectedFrameRate() const;
     51   CFStringRef kVTCompressionPropertyKey_MaxKeyFrameInterval() const;
     52   CFStringRef kVTCompressionPropertyKey_MaxKeyFrameIntervalDuration() const;
     53   CFStringRef kVTCompressionPropertyKey_ProfileLevel() const;
     54   CFStringRef kVTCompressionPropertyKey_RealTime() const;
     55   CFStringRef kVTCompressionPropertyKey_TransferFunction() const;
     56   CFStringRef kVTCompressionPropertyKey_YCbCrMatrix() const;
     57 
     58   CFStringRef kVTEncodeFrameOptionKey_ForceKeyFrame() const;
     59 
     60   CFStringRef kVTProfileLevel_H264_Baseline_AutoLevel() const;
     61   CFStringRef kVTProfileLevel_H264_Main_AutoLevel() const;
     62   CFStringRef kVTProfileLevel_H264_Extended_AutoLevel() const;
     63   CFStringRef kVTProfileLevel_H264_High_AutoLevel() const;
     64 
     65   CFStringRef
     66       kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder()
     67       const;
     68 
     69   // Originally from VTCompressionSession.h
     70   OSStatus VTCompressionSessionCreate(
     71       CFAllocatorRef allocator,
     72       int32_t width,
     73       int32_t height,
     74       CoreMediaGlue::CMVideoCodecType codecType,
     75       CFDictionaryRef encoderSpecification,
     76       CFDictionaryRef sourceImageBufferAttributes,
     77       CFAllocatorRef compressedDataAllocator,
     78       VTCompressionOutputCallback outputCallback,
     79       void* outputCallbackRefCon,
     80       VTCompressionSessionRef* compressionSessionOut) const;
     81   OSStatus VTCompressionSessionEncodeFrame(
     82       VTCompressionSessionRef session,
     83       CVImageBufferRef imageBuffer,
     84       CoreMediaGlue::CMTime presentationTimeStamp,
     85       CoreMediaGlue::CMTime duration,
     86       CFDictionaryRef frameProperties,
     87       void* sourceFrameRefCon,
     88       VTEncodeInfoFlags* infoFlagsOut) const;
     89   CVPixelBufferPoolRef VTCompressionSessionGetPixelBufferPool(
     90       VTCompressionSessionRef session) const;
     91   void VTCompressionSessionInvalidate(VTCompressionSessionRef session) const;
     92 
     93   // Originally from VTSession.h
     94   OSStatus VTSessionSetProperty(VTSessionRef session,
     95                                 CFStringRef propertyKey,
     96                                 CFTypeRef propertyValue) const;
     97 
     98  private:
     99   struct Library;
    100   VideoToolboxGlue();
    101   Library* library_;
    102   DISALLOW_COPY_AND_ASSIGN(VideoToolboxGlue);
    103 };
    104 
    105 #endif  // MEDIA_BASE_MAC_VIDEOTOOLBOX_GLUE_H_
    106