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