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