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_VIDEO_CAPTURE_MAC_AVFOUNDATION_GLUE_H_ 13 #define MEDIA_VIDEO_CAPTURE_MAC_AVFOUNDATION_GLUE_H_ 14 15 #import <Foundation/Foundation.h> 16 17 #include "base/basictypes.h" 18 #include "media/base/media_export.h" 19 #import "media/video/capture/mac/coremedia_glue.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 static NSString* AVCaptureSessionPreset320x240(); 45 static NSString* AVCaptureSessionPreset640x480(); 46 static NSString* AVCaptureSessionPreset1280x720(); 47 48 // Originally from AVVideoSettings.h but in global namespace. 49 static NSString* AVVideoScalingModeKey(); 50 static NSString* AVVideoScalingModeResizeAspect(); 51 52 static Class AVCaptureSessionClass(); 53 static Class AVCaptureVideoDataOutputClass(); 54 55 private: 56 DISALLOW_IMPLICIT_CONSTRUCTORS(AVFoundationGlue); 57 }; 58 59 // Originally AVCaptureDevice and coming from AVCaptureDevice.h 60 MEDIA_EXPORT 61 @interface CrAVCaptureDevice : NSObject 62 63 - (BOOL)hasMediaType:(NSString*)mediaType; 64 - (NSString*)uniqueID; 65 - (NSString*)localizedName; 66 - (BOOL)supportsAVCaptureSessionPreset:(NSString*)preset; 67 68 @end 69 70 MEDIA_EXPORT 71 @interface CrAVCaptureInput // Originally from AVCaptureInput.h. 72 @end 73 74 MEDIA_EXPORT 75 @interface CrAVCaptureOutput // Originally from AVCaptureOutput.h. 76 @end 77 78 // Originally AVCaptureSession and coming from AVCaptureSession.h. 79 MEDIA_EXPORT 80 @interface CrAVCaptureSession : NSObject 81 82 - (void)release; 83 - (BOOL)canSetSessionPreset:(NSString*)preset; 84 - (void)setSessionPreset:(NSString*)preset; 85 - (NSString*)sessionPreset; 86 - (void)addInput:(CrAVCaptureInput*)input; 87 - (void)removeInput:(CrAVCaptureInput*)input; 88 - (void)addOutput:(CrAVCaptureOutput*)output; 89 - (void)removeOutput:(CrAVCaptureOutput*)output; 90 - (BOOL)isRunning; 91 - (void)startRunning; 92 - (void)stopRunning; 93 94 @end 95 96 // Originally AVCaptureConnection and coming from AVCaptureSession.h. 97 MEDIA_EXPORT 98 @interface CrAVCaptureConnection : NSObject 99 100 - (BOOL)isVideoMinFrameDurationSupported; 101 - (void)setVideoMinFrameDuration:(CoreMediaGlue::CMTime)minFrameRate; 102 - (BOOL)isVideoMaxFrameDurationSupported; 103 - (void)setVideoMaxFrameDuration:(CoreMediaGlue::CMTime)maxFrameRate; 104 105 @end 106 107 // Originally AVCaptureDeviceInput and coming from AVCaptureInput.h. 108 MEDIA_EXPORT 109 @interface CrAVCaptureDeviceInput : CrAVCaptureInput 110 111 @end 112 113 // Originally AVCaptureVideoDataOutputSampleBufferDelegate from 114 // AVCaptureOutput.h. 115 @protocol CrAVCaptureVideoDataOutputSampleBufferDelegate <NSObject> 116 117 @optional 118 119 - (void)captureOutput:(CrAVCaptureOutput*)captureOutput 120 didOutputSampleBuffer:(CoreMediaGlue::CMSampleBufferRef)sampleBuffer 121 fromConnection:(CrAVCaptureConnection*)connection; 122 123 @end 124 125 // Originally AVCaptureVideoDataOutput and coming from AVCaptureOutput.h. 126 MEDIA_EXPORT 127 @interface CrAVCaptureVideoDataOutput : CrAVCaptureOutput 128 129 - (oneway void)release; 130 - (void)setSampleBufferDelegate:(id)sampleBufferDelegate 131 queue:(dispatch_queue_t)sampleBufferCallbackQueue; 132 133 - (void)setVideoSettings:(NSDictionary*)videoSettings; 134 - (NSDictionary*)videoSettings; 135 - (CrAVCaptureConnection*)connectionWithMediaType:(NSString*)mediaType; 136 137 @end 138 139 // Class to provide access to class methods of AVCaptureDevice. 140 MEDIA_EXPORT 141 @interface AVCaptureDeviceGlue : NSObject 142 143 + (NSArray*)devices; 144 145 + (CrAVCaptureDevice*)deviceWithUniqueID:(NSString*)deviceUniqueID; 146 147 @end 148 149 // Class to provide access to class methods of AVCaptureDeviceInput. 150 MEDIA_EXPORT 151 @interface AVCaptureDeviceInputGlue : NSObject 152 153 + (CrAVCaptureDeviceInput*)deviceInputWithDevice:(CrAVCaptureDevice*)device 154 error:(NSError**)outError; 155 156 @end 157 158 #endif // MEDIA_VIDEO_CAPTURE_MAC_AVFOUNDATION_GLUE_H_ 159