2b18e1eca17e0028f2bd8fc2a510857c763ee6fa
[platform/framework/web/crosswalk.git] / src / third_party / webrtc / modules / video_capture / mac / qtkit / video_capture_qtkit_info_objc.mm
1 /*
2  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10
11 #pragma mark **** imports/includes
12
13 #import "webrtc/modules/video_capture/mac/qtkit/video_capture_qtkit_info_objc.h"
14
15 #include "webrtc/system_wrappers/interface/trace.h"
16
17 using namespace webrtc;
18
19 #pragma mark **** hidden class interface
20
21 @implementation VideoCaptureMacQTKitInfoObjC
22
23 // ****************** over-written OS methods ***********************
24 #pragma mark **** over-written OS methods
25
26 /// ***** Objective-C. Similar to C++ constructor, although invoked manually
27 /// ***** Potentially returns an instance of self
28 -(id)init{
29     self = [super init];
30     if(nil != self){
31         [self checkOSSupported];
32         [self initializeVariables];
33     }
34     else
35     {
36         return nil;
37     }
38     return self;
39 }
40
41 /// ***** Objective-C. Similar to C++ destructor
42 /// ***** Returns nothing
43 - (void)dealloc {
44
45     [_captureDevicesInfo release];
46
47     [super dealloc];
48 }
49
50 // ****************** public methods ******************
51 #pragma mark **** public method implementations
52
53 /// ***** Creates a message box with Cocoa framework
54 /// ***** Returns 0 on success, -1 otherwise.
55 - (NSNumber*)displayCaptureSettingsDialogBoxWithDevice:(const char*)deviceUniqueIdUTF8
56                     AndTitle:(const char*)dialogTitleUTF8
57                     AndParentWindow:(void*) parentWindow
58                     AtX:(uint32_t)positionX
59                     AndY:(uint32_t) positionY
60 {
61     NSString* strTitle = [NSString stringWithFormat:@"%s", dialogTitleUTF8];
62     NSString* strButton = @"Alright";
63     NSAlert* alert = [NSAlert alertWithMessageText:strTitle
64                       defaultButton:strButton
65                       alternateButton:nil otherButton:nil
66                       informativeTextWithFormat:@"Device %s is capturing", deviceUniqueIdUTF8];
67     [alert setAlertStyle:NSInformationalAlertStyle];
68     [alert runModal];
69     return [NSNumber numberWithInt:0];
70 }
71
72 - (NSNumber*)getCaptureDeviceCount{
73     [self getCaptureDevices];
74     return [NSNumber numberWithInt:_captureDeviceCountInfo];
75 }
76
77
78 - (NSNumber*)getDeviceNamesFromIndex:(uint32_t)index
79     DefaultName:(char*)deviceName
80     WithLength:(uint32_t)deviceNameLength
81     AndUniqueID:(char*)deviceUniqueID
82     WithLength:(uint32_t)deviceUniqueIDLength
83     AndProductID:(char*)deviceProductID
84     WithLength:(uint32_t)deviceProductIDLength
85 {
86     if(NO == _OSSupportedInfo)
87     {
88         return [NSNumber numberWithInt:0];
89     }
90
91     if(index >= (uint32_t)_captureDeviceCountInfo)
92     {
93         return [NSNumber numberWithInt:-1];
94     }
95
96     QTCaptureDevice* tempCaptureDevice =
97         (QTCaptureDevice*)[_captureDevicesInfo objectAtIndex:index];
98     if(!tempCaptureDevice)
99     {
100         return [NSNumber numberWithInt:-1];
101     }
102
103     memset(deviceName, 0, deviceNameLength);
104     memset(deviceUniqueID, 0, deviceUniqueIDLength);
105
106     bool successful = NO;
107
108     NSString* tempString = [tempCaptureDevice localizedDisplayName];
109     successful = [tempString getCString:(char*)deviceName
110                   maxLength:deviceNameLength encoding:NSUTF8StringEncoding];
111     if(NO == successful)
112     {
113         memset(deviceName, 0, deviceNameLength);
114         return [NSNumber numberWithInt:-1];
115     }
116
117     tempString = [tempCaptureDevice uniqueID];
118     successful = [tempString getCString:(char*)deviceUniqueID
119                   maxLength:deviceUniqueIDLength encoding:NSUTF8StringEncoding];
120     if(NO == successful)
121     {
122         memset(deviceUniqueID, 0, deviceNameLength);
123         return [NSNumber numberWithInt:-1];
124     }
125
126     return [NSNumber numberWithInt:0];
127
128 }
129
130 // ****************** "private" category functions below here  ******************
131 #pragma mark **** "private" method implementations
132
133 - (NSNumber*)initializeVariables
134 {
135     if(NO == _OSSupportedInfo)
136     {
137         return [NSNumber numberWithInt:0];
138     }
139
140     _poolInfo = [[NSAutoreleasePool alloc]init];
141     _captureDeviceCountInfo = 0;
142     [self getCaptureDevices];
143
144     return [NSNumber numberWithInt:0];
145 }
146
147 // ***** Checks to see if the QTCaptureSession framework is available in the OS
148 // ***** If it is not, isOSSupprted = NO
149 // ***** Throughout the rest of the class isOSSupprted is checked and functions
150 // ***** are/aren't called depending
151 // ***** The user can use weak linking to the QTKit framework and run on older
152 // ***** versions of the OS
153 // ***** I.E. Backwards compaitibility
154 // ***** Returns nothing. Sets member variable
155 - (void)checkOSSupported
156 {
157     Class osSupportedTest = NSClassFromString(@"QTCaptureSession");
158     if(nil == osSupportedTest)
159     {
160       _OSSupportedInfo = NO;
161     }
162     else
163     {
164       _OSSupportedInfo = YES;
165     }
166 }
167
168 /// ***** Retrieves the number of capture devices currently available
169 /// ***** Stores them in an NSArray instance
170 /// ***** Returns 0 on success, -1 otherwise.
171 - (NSNumber*)getCaptureDevices
172 {
173     if(NO == _OSSupportedInfo)
174     {
175         return [NSNumber numberWithInt:0];
176     }
177
178     if(_captureDevicesInfo)
179     {
180         [_captureDevicesInfo release];
181     }
182     _captureDevicesInfo = [[NSArray alloc]
183                             initWithArray:[QTCaptureDevice
184                                            inputDevicesWithMediaType:QTMediaTypeVideo]];
185
186     _captureDeviceCountInfo = _captureDevicesInfo.count;
187
188     return [NSNumber numberWithInt:0];
189 }
190
191 @end