Upstream version 10.38.222.0
[platform/framework/web/crosswalk.git] / src / media / video / capture / mac / avfoundation_glue.h
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
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_VIDEO_CAPTURE_MAC_AVFOUNDATION_GLUE_H_