• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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