Home | History | Annotate | Download | only in mac
      1 // Copyright 2013 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_COREMEDIA_GLUE_H_
      6 #define MEDIA_BASE_MAC_COREMEDIA_GLUE_H_
      7 
      8 #include <CoreVideo/CoreVideo.h>
      9 
     10 #include "base/basictypes.h"
     11 #include "media/base/media_export.h"
     12 
     13 // CoreMedia API is only introduced in Mac OS X > 10.6, the (potential) linking
     14 // with it has to happen in runtime. If it succeeds, subsequent clients can use
     15 // CoreMedia via the class declared in this file, where the original naming has
     16 // been kept as much as possible.
     17 class MEDIA_EXPORT CoreMediaGlue {
     18  public:
     19   // Originally from CMTime.h
     20   typedef int64_t CMTimeValue;
     21   typedef int32_t CMTimeScale;
     22   typedef int64_t CMTimeEpoch;
     23   typedef uint32_t CMTimeFlags;
     24   typedef struct {
     25     CMTimeValue value;
     26     CMTimeScale timescale;
     27     CMTimeFlags flags;
     28     CMTimeEpoch epoch;
     29   } CMTime;
     30 
     31   // Originally from CMBlockBuffer.h
     32   typedef uint32_t CMBlockBufferFlags;
     33   typedef struct OpaqueCMBlockBuffer* CMBlockBufferRef;
     34   typedef struct {
     35     uint32_t version;
     36     void* (*AllocateBlock)(void*, size_t);
     37     void (*FreeBlock)(void*, void*, size_t);
     38     void* refCon;
     39   } CMBlockBufferCustomBlockSource;
     40 
     41   // Originally from CMFormatDescription.h.
     42   typedef const struct opaqueCMFormatDescription* CMFormatDescriptionRef;
     43   typedef CMFormatDescriptionRef CMVideoFormatDescriptionRef;
     44   typedef FourCharCode CMVideoCodecType;
     45   typedef struct {
     46     int32_t width;
     47     int32_t height;
     48   } CMVideoDimensions;
     49   enum {
     50     kCMPixelFormat_422YpCbCr8_yuvs = 'yuvs',
     51   };
     52   enum {
     53     kCMVideoCodecType_JPEG_OpenDML = 'dmb1',
     54     kCMVideoCodecType_H264 = 'avc1',
     55   };
     56 
     57   // Originally from CMFormatDescriptionBridge.h
     58   enum {
     59     kCMFormatDescriptionBridgeError_InvalidParameter = -12712,
     60   };
     61 
     62   // Originally from CMSampleBuffer.h.
     63   typedef struct OpaqueCMSampleBuffer* CMSampleBufferRef;
     64 
     65   // Originally from CMTime.h.
     66   static CMTime CMTimeMake(int64_t value, int32_t timescale);
     67 
     68   // Originally from CMBlockBuffer.h
     69   static OSStatus CMBlockBufferCreateContiguous(
     70       CFAllocatorRef structureAllocator,
     71       CMBlockBufferRef sourceBuffer,
     72       CFAllocatorRef blockAllocator,
     73       const CMBlockBufferCustomBlockSource* customBlockSource,
     74       size_t offsetToData,
     75       size_t dataLength,
     76       CMBlockBufferFlags flags,
     77       CMBlockBufferRef* newBBufOut);
     78   static size_t CMBlockBufferGetDataLength(CMBlockBufferRef theBuffer);
     79   static OSStatus CMBlockBufferGetDataPointer(CMBlockBufferRef theBuffer,
     80                                               size_t offset,
     81                                               size_t* lengthAtOffset,
     82                                               size_t* totalLength,
     83                                               char** dataPointer);
     84   static Boolean CMBlockBufferIsRangeContiguous(CMBlockBufferRef theBuffer,
     85                                                 size_t offset,
     86                                                 size_t length);
     87 
     88   // Originally from CMSampleBuffer.h.
     89   static CMBlockBufferRef CMSampleBufferGetDataBuffer(CMSampleBufferRef sbuf);
     90   static CMFormatDescriptionRef CMSampleBufferGetFormatDescription(
     91       CMSampleBufferRef sbuf);
     92   static CVImageBufferRef CMSampleBufferGetImageBuffer(
     93       CMSampleBufferRef buffer);
     94   static CFArrayRef CMSampleBufferGetSampleAttachmentsArray(
     95       CMSampleBufferRef sbuf,
     96       Boolean createIfNecessary);
     97   static CFStringRef kCMSampleAttachmentKey_NotSync();
     98 
     99   // Originally from CMFormatDescription.h.
    100   static FourCharCode CMFormatDescriptionGetMediaSubType(
    101       CMFormatDescriptionRef desc);
    102   static CMVideoDimensions CMVideoFormatDescriptionGetDimensions(
    103       CMVideoFormatDescriptionRef videoDesc);
    104   static OSStatus CMVideoFormatDescriptionGetH264ParameterSetAtIndex(
    105       CMFormatDescriptionRef videoDesc,
    106       size_t parameterSetIndex,
    107       const uint8_t** parameterSetPointerOut,
    108       size_t* parameterSetSizeOut,
    109       size_t* parameterSetCountOut,
    110       int* NALUnitHeaderLengthOut)
    111       /*__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0)*/;
    112 
    113  private:
    114   DISALLOW_IMPLICIT_CONSTRUCTORS(CoreMediaGlue);
    115 };
    116 
    117 #endif  // MEDIA_BASE_MAC_COREMEDIA_GLUE_H_
    118