OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright 2014 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2014 The WebRTC Project Authors. All rights reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 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 | 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 | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
11 #import "APPRTCViewController.h" | 11 #import "APPRTCViewController.h" |
12 | 12 |
13 #import <AVFoundation/AVFoundation.h> | 13 #import <AVFoundation/AVFoundation.h> |
14 | 14 |
15 #import "WebRTC/RTCNSGLVideoView.h" | 15 #import "WebRTC/RTCNSGLVideoView.h" |
16 #import "WebRTC/RTCVideoTrack.h" | 16 #import "WebRTC/RTCVideoTrack.h" |
17 | 17 |
18 #import "ARDAppClient.h" | 18 #import "ARDAppClient.h" |
19 | 19 |
20 static NSUInteger const kContentWidth = 1280; | 20 static NSUInteger const kContentWidth = 1280; |
21 static NSUInteger const kContentHeight = 720; | 21 static NSUInteger const kContentHeight = 720; |
22 static NSUInteger const kRoomFieldWidth = 80; | 22 static NSUInteger const kRoomFieldWidth = 80; |
23 static NSUInteger const kLogViewHeight = 280; | 23 static NSUInteger const kLogViewHeight = 280; |
24 static NSUInteger const kPreviewWidth = 490; | |
24 | 25 |
25 @class APPRTCMainView; | 26 @class APPRTCMainView; |
26 @protocol APPRTCMainViewDelegate | 27 @protocol APPRTCMainViewDelegate |
27 | 28 |
28 - (void)appRTCMainView:(APPRTCMainView*)mainView | 29 - (void)appRTCMainView:(APPRTCMainView*)mainView |
29 didEnterRoomId:(NSString*)roomId; | 30 didEnterRoomId:(NSString*)roomId; |
30 | 31 |
31 @end | 32 @end |
32 | 33 |
33 @interface APPRTCMainView : NSView | 34 @interface APPRTCMainView : NSView |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
67 } | 68 } |
68 | 69 |
69 - (void)updateConstraints { | 70 - (void)updateConstraints { |
70 NSParameterAssert( | 71 NSParameterAssert( |
71 _roomField != nil && _scrollView != nil && _remoteVideoView != nil); | 72 _roomField != nil && _scrollView != nil && _remoteVideoView != nil); |
72 [self removeConstraints:[self constraints]]; | 73 [self removeConstraints:[self constraints]]; |
73 NSDictionary* viewsDictionary = | 74 NSDictionary* viewsDictionary = |
74 NSDictionaryOfVariableBindings(_roomLabel, | 75 NSDictionaryOfVariableBindings(_roomLabel, |
75 _roomField, | 76 _roomField, |
76 _scrollView, | 77 _scrollView, |
77 _remoteVideoView); | 78 _remoteVideoView, |
79 _localVideoView); | |
78 | 80 |
79 NSSize remoteViewSize = [self remoteVideoViewSize]; | 81 NSSize remoteViewSize = [self remoteVideoViewSize]; |
80 NSDictionary* metrics = @{ | 82 NSDictionary* metrics = @{ |
81 @"kLogViewHeight" : @(kLogViewHeight), | 83 @"kLogViewHeight" : @(kLogViewHeight), |
84 @"kPreviewWidth" : @(kPreviewWidth), | |
82 @"kRoomFieldWidth" : @(kRoomFieldWidth), | 85 @"kRoomFieldWidth" : @(kRoomFieldWidth), |
83 @"remoteViewWidth" : @(remoteViewSize.width), | 86 @"remoteViewWidth" : @(remoteViewSize.width), |
84 @"remoteViewHeight" : @(remoteViewSize.height), | 87 @"remoteViewHeight" : @(remoteViewSize.height), |
88 @"localViewHeight" : @(remoteViewSize.height), | |
89 @"scrollViewWidth" : @(kContentWidth - kPreviewWidth), | |
85 }; | 90 }; |
86 // Declare this separately to avoid compiler warning about splitting string | 91 // Declare this separately to avoid compiler warning about splitting string |
87 // within an NSArray expression. | 92 // within an NSArray expression. |
88 NSString* verticalConstraint = | 93 NSString* verticalConstraint = |
89 @"V:|-[_roomLabel]-[_roomField]-[_scrollView(kLogViewHeight)]" | 94 @"V:|-[_roomLabel]-[_roomField]-[_scrollView(kLogViewHeight)]" |
90 "-[_remoteVideoView(remoteViewHeight)]-|"; | 95 "-[_remoteVideoView(remoteViewHeight)]-|"; |
91 NSArray* constraintFormats = @[ | 96 NSArray* constraintFormats = @[ |
92 verticalConstraint, | 97 verticalConstraint, |
98 @"V:[_localVideoView]-[_remoteVideoView]", | |
99 @"V:[_localVideoView(kLogViewHeight)]", | |
93 @"|-[_roomLabel]", | 100 @"|-[_roomLabel]", |
94 @"|-[_roomField(kRoomFieldWidth)]", | 101 @"|-[_roomField(kRoomFieldWidth)]", |
95 @"|-[_scrollView(remoteViewWidth)]-|", | 102 @"|-[_scrollView(scrollViewWidth)]", |
103 @"[_scrollView]-[_localVideoView]", | |
96 @"|-[_remoteVideoView(remoteViewWidth)]-|", | 104 @"|-[_remoteVideoView(remoteViewWidth)]-|", |
105 @"[_localVideoView(kPreviewWidth)]-|", | |
97 ]; | 106 ]; |
98 for (NSString* constraintFormat in constraintFormats) { | 107 for (NSString* constraintFormat in constraintFormats) { |
99 NSArray* constraints = | 108 NSArray* constraints = |
100 [NSLayoutConstraint constraintsWithVisualFormat:constraintFormat | 109 [NSLayoutConstraint constraintsWithVisualFormat:constraintFormat |
101 options:0 | 110 options:0 |
102 metrics:metrics | 111 metrics:metrics |
103 views:viewsDictionary]; | 112 views:viewsDictionary]; |
104 for (NSLayoutConstraint* constraint in constraints) { | 113 for (NSLayoutConstraint* constraint in constraints) { |
105 [self addConstraint:constraint]; | 114 [self addConstraint:constraint]; |
106 } | 115 } |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
183 0 | 192 0 |
184 }; | 193 }; |
185 NSOpenGLPixelFormat* pixelFormat = | 194 NSOpenGLPixelFormat* pixelFormat = |
186 [[NSOpenGLPixelFormat alloc] initWithAttributes:attributes]; | 195 [[NSOpenGLPixelFormat alloc] initWithAttributes:attributes]; |
187 _remoteVideoView = [[RTCNSGLVideoView alloc] initWithFrame:NSZeroRect | 196 _remoteVideoView = [[RTCNSGLVideoView alloc] initWithFrame:NSZeroRect |
188 pixelFormat:pixelFormat]; | 197 pixelFormat:pixelFormat]; |
189 [_remoteVideoView setTranslatesAutoresizingMaskIntoConstraints:NO]; | 198 [_remoteVideoView setTranslatesAutoresizingMaskIntoConstraints:NO]; |
190 _remoteVideoView.delegate = self; | 199 _remoteVideoView.delegate = self; |
191 [self addSubview:_remoteVideoView]; | 200 [self addSubview:_remoteVideoView]; |
192 | 201 |
193 // TODO(tkchin): create local video view. | 202 _localVideoView = [[RTCNSGLVideoView alloc] initWithFrame:NSZeroRect |
194 // https://code.google.com/p/webrtc/issues/detail?id=3417. | 203 pixelFormat:pixelFormat]; |
204 [_localVideoView setTranslatesAutoresizingMaskIntoConstraints:NO]; | |
205 _localVideoView.delegate = self; | |
206 [self addSubview:_localVideoView]; | |
195 } | 207 } |
196 | 208 |
197 - (NSSize)remoteVideoViewSize { | 209 - (NSSize)remoteVideoViewSize { |
198 if (_remoteVideoSize.width > 0 && _remoteVideoSize.height > 0) { | 210 NSInteger w = MAX(_remoteVideoSize.width, kContentWidth); |
tkchin_webrtc
2016/08/26 22:55:30
nits: width, height
(w / 16)
| |
199 return _remoteVideoSize; | 211 NSInteger h = (w/16) * 9; |
200 } else { | 212 return NSMakeSize(w, h); |
201 return NSMakeSize(kContentWidth, kContentHeight); | |
202 } | |
203 } | |
204 | |
205 - (NSSize)localVideoViewSize { | |
206 return NSZeroSize; | |
207 } | 213 } |
208 | 214 |
209 @end | 215 @end |
210 | 216 |
211 @interface APPRTCViewController () | 217 @interface APPRTCViewController () |
212 <ARDAppClientDelegate, APPRTCMainViewDelegate> | 218 <ARDAppClientDelegate, APPRTCMainViewDelegate> |
213 @property(nonatomic, readonly) APPRTCMainView* mainView; | 219 @property(nonatomic, readonly) APPRTCMainView* mainView; |
214 @end | 220 @end |
215 | 221 |
216 @implementation APPRTCViewController { | 222 @implementation APPRTCViewController { |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
253 } | 259 } |
254 } | 260 } |
255 | 261 |
256 - (void)appClient:(ARDAppClient *)client | 262 - (void)appClient:(ARDAppClient *)client |
257 didChangeConnectionState:(RTCIceConnectionState)state { | 263 didChangeConnectionState:(RTCIceConnectionState)state { |
258 } | 264 } |
259 | 265 |
260 - (void)appClient:(ARDAppClient *)client | 266 - (void)appClient:(ARDAppClient *)client |
261 didReceiveLocalVideoTrack:(RTCVideoTrack *)localVideoTrack { | 267 didReceiveLocalVideoTrack:(RTCVideoTrack *)localVideoTrack { |
262 _localVideoTrack = localVideoTrack; | 268 _localVideoTrack = localVideoTrack; |
269 [_localVideoTrack addRenderer:self.mainView.localVideoView]; | |
263 } | 270 } |
264 | 271 |
265 - (void)appClient:(ARDAppClient *)client | 272 - (void)appClient:(ARDAppClient *)client |
266 didReceiveRemoteVideoTrack:(RTCVideoTrack *)remoteVideoTrack { | 273 didReceiveRemoteVideoTrack:(RTCVideoTrack *)remoteVideoTrack { |
267 _remoteVideoTrack = remoteVideoTrack; | 274 _remoteVideoTrack = remoteVideoTrack; |
268 [_remoteVideoTrack addRenderer:self.mainView.remoteVideoView]; | 275 [_remoteVideoTrack addRenderer:self.mainView.remoteVideoView]; |
269 } | 276 } |
270 | 277 |
271 - (void)appClient:(ARDAppClient *)client | 278 - (void)appClient:(ARDAppClient *)client |
272 didError:(NSError *)error { | 279 didError:(NSError *)error { |
(...skipping 22 matching lines...) Expand all Loading... | |
295 } | 302 } |
296 | 303 |
297 - (void)showAlertWithMessage:(NSString*)message { | 304 - (void)showAlertWithMessage:(NSString*)message { |
298 NSAlert* alert = [[NSAlert alloc] init]; | 305 NSAlert* alert = [[NSAlert alloc] init]; |
299 [alert setMessageText:message]; | 306 [alert setMessageText:message]; |
300 [alert runModal]; | 307 [alert runModal]; |
301 } | 308 } |
302 | 309 |
303 - (void)resetUI { | 310 - (void)resetUI { |
304 [_remoteVideoTrack removeRenderer:self.mainView.remoteVideoView]; | 311 [_remoteVideoTrack removeRenderer:self.mainView.remoteVideoView]; |
312 [_localVideoTrack removeRenderer:self.mainView.localVideoView]; | |
305 _remoteVideoTrack = nil; | 313 _remoteVideoTrack = nil; |
314 _localVideoTrack = nil; | |
306 [self.mainView.remoteVideoView renderFrame:nil]; | 315 [self.mainView.remoteVideoView renderFrame:nil]; |
316 [self.mainView.localVideoView renderFrame:nil]; | |
307 } | 317 } |
308 | 318 |
309 - (void)disconnect { | 319 - (void)disconnect { |
310 [self resetUI]; | 320 [self resetUI]; |
311 [_client disconnect]; | 321 [_client disconnect]; |
312 } | 322 } |
313 | 323 |
314 @end | 324 @end |
OLD | NEW |