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 // AVFoundation API is only introduced in Mac OS X > 10.6, and there is only one 6 // build of Chromium, so the (potential) linking with AVFoundation has to happen 7 // in runtime. For this to be clean, an AVFoundationGlue class is defined to try 8 // and load these AVFoundation system libraries. If it succeeds, subsequent 9 // clients can use AVFoundation via the rest of the classes declared in this 10 // file. 11 12 #ifndef MEDIA_BASE_MAC_AVFOUNDATION_GLUE_H_ 13 #define MEDIA_BASE_MAC_AVFOUNDATION_GLUE_H_ 14 15 #import <Foundation/Foundation.h> 16 17 #include "base/basictypes.h" 18 #include "media/base/mac/coremedia_glue.h" 19 #include "media/base/media_export.h" 20 21 class MEDIA_EXPORT AVFoundationGlue { 22 public: 23 // This method returns true if the OS version supports AVFoundation and the 24 // AVFoundation bundle could be loaded correctly, or false otherwise. 25 static bool IsAVFoundationSupported(); 26 27 static NSBundle const* AVFoundationBundle(); 28 29 static void* AVFoundationLibraryHandle(); 30 31 // Originally coming from AVCaptureDevice.h but in global namespace. 32 static NSString* AVCaptureDeviceWasConnectedNotification(); 33 static NSString* AVCaptureDeviceWasDisconnectedNotification(); 34 35 // Originally coming from AVMediaFormat.h but in global namespace. 36 static NSString* AVMediaTypeVideo(); 37 static NSString* AVMediaTypeAudio(); 38 static NSString* AVMediaTypeMuxed(); 39 40 // Originally from AVCaptureSession.h but in global namespace. 41 static NSString* AVCaptureSessionRuntimeErrorNotification(); 42 static NSString* AVCaptureSessionDidStopRunningNotification(); 43 static NSString* AVCaptureSessionErrorKey(); 44 45 // Originally from AVVideoSettings.h but in global namespace. 46 static NSString* AVVideoScalingModeKey(); 47 static NSString* AVVideoScalingModeResizeAspectFill(); 48 49 static Class AVCaptureSessionClass(); 50 static Class AVCaptureVideoDataOutputClass(); 51 52 private: 53 DISALLOW_IMPLICIT_CONSTRUCTORS(AVFoundationGlue); 54 }; 55 56 // Originally AVCaptureDevice and coming from AVCaptureDevice.h 57 MEDIA_EXPORT 58 @interface CrAVCaptureDevice : NSObject 59 60 - (BOOL)hasMediaType:(NSString*)mediaType; 61 - (NSString*)uniqueID; 62 - (NSString*)localizedName; 63 - (BOOL)isSuspended; 64 - (NSArray*)formats; 65 - (int32_t)transportType; 66 67 @end 68 69 // Originally AVCaptureDeviceFormat and coming from AVCaptureDevice.h. 70 MEDIA_EXPORT 71 @interface CrAVCaptureDeviceFormat : NSObject 72 73 - (CoreMediaGlue::CMFormatDescriptionRef)formatDescription; 74 - (NSArray*)videoSupportedFrameRateRanges; 75 76 @end 77 78 // Originally AVFrameRateRange and coming from AVCaptureDevice.h. 79 MEDIA_EXPORT 80 @interface CrAVFrameRateRange : NSObject 81 82 - (Float64)maxFrameRate; 83 84 @end 85 86 MEDIA_EXPORT 87 @interface CrAVCaptureInput // Originally from AVCaptureInput.h. 88 @end 89 90 MEDIA_EXPORT 91 @interface CrAVCaptureOutput // Originally from AVCaptureOutput.h. 92 @end 93 94 // Originally AVCaptureSession and coming from AVCaptureSession.h. 95 MEDIA_EXPORT 96 @interface CrAVCaptureSession : NSObject 97 98 - (void)release; 99 - (void)addInput:(CrAVCaptureInput*)input; 100 - (void)removeInput:(CrAVCaptureInput*)input; 101 - (void)addOutput:(CrAVCaptureOutput*)output; 102 - (void)removeOutput:(CrAVCaptureOutput*)output; 103 - (BOOL)isRunning; 104 - (void)startRunning; 105 - (void)stopRunning; 106 107 @end 108 109 // Originally AVCaptureConnection and coming from AVCaptureSession.h. 110 MEDIA_EXPORT 111 @interface CrAVCaptureConnection : NSObject 112 113 - (BOOL)isVideoMinFrameDurationSupported; 114 - (void)setVideoMinFrameDuration:(CoreMediaGlue::CMTime)minFrameRate; 115 - (BOOL)isVideoMaxFrameDurationSupported; 116 - (void)setVideoMaxFrameDuration:(CoreMediaGlue::CMTime)maxFrameRate; 117 118 @end 119 120 // Originally AVCaptureDeviceInput and coming from AVCaptureInput.h. 121 MEDIA_EXPORT 122 @interface CrAVCaptureDeviceInput : CrAVCaptureInput 123 124 @end 125 126 // Originally AVCaptureVideoDataOutputSampleBufferDelegate from 127 // AVCaptureOutput.h. 128 @protocol CrAVCaptureVideoDataOutputSampleBufferDelegate <NSObject> 129 130 @optional 131 132 - (void)captureOutput:(CrAVCaptureOutput*)captureOutput 133 didOutputSampleBuffer:(CoreMediaGlue::CMSampleBufferRef)sampleBuffer 134 fromConnection:(CrAVCaptureConnection*)connection; 135 136 @end 137 138 // Originally AVCaptureVideoDataOutput and coming from AVCaptureOutput.h. 139 MEDIA_EXPORT 140 @interface CrAVCaptureVideoDataOutput : CrAVCaptureOutput 141 142 - (oneway void)release; 143 - (void)setSampleBufferDelegate:(id)sampleBufferDelegate 144 queue:(dispatch_queue_t)sampleBufferCallbackQueue; 145 146 - (void)setVideoSettings:(NSDictionary*)videoSettings; 147 - (NSDictionary*)videoSettings; 148 - (CrAVCaptureConnection*)connectionWithMediaType:(NSString*)mediaType; 149 150 @end 151 152 // Class to provide access to class methods of AVCaptureDevice. 153 MEDIA_EXPORT 154 @interface AVCaptureDeviceGlue : NSObject 155 156 + (NSArray*)devices; 157 158 + (CrAVCaptureDevice*)deviceWithUniqueID:(NSString*)deviceUniqueID; 159 160 @end 161 162 // Class to provide access to class methods of AVCaptureDeviceInput. 163 MEDIA_EXPORT 164 @interface AVCaptureDeviceInputGlue : NSObject 165 166 + (CrAVCaptureDeviceInput*)deviceInputWithDevice:(CrAVCaptureDevice*)device 167 error:(NSError**)outError; 168 169 @end 170 171 #endif // MEDIA_BASE_MAC_AVFOUNDATION_GLUE_H_ 172