Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1152)

Unified Diff: webrtc/api/objc/RTCEAGLVideoView.m

Issue 1542473003: Move Objective-C video renderers to webrtc/api/objc. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@updateI420Frame
Patch Set: Merge master Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/api/objc/RTCEAGLVideoView.h ('k') | webrtc/api/objc/RTCNSGLVideoView.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/api/objc/RTCEAGLVideoView.m
diff --git a/talk/app/webrtc/objc/RTCEAGLVideoView.m b/webrtc/api/objc/RTCEAGLVideoView.m
similarity index 71%
copy from talk/app/webrtc/objc/RTCEAGLVideoView.m
copy to webrtc/api/objc/RTCEAGLVideoView.m
index d19462c9d97576b841df86cd6f1872fc738de2ba..e664ede455492c339180c406eeeb9ff90b06d831 100644
--- a/talk/app/webrtc/objc/RTCEAGLVideoView.m
+++ b/webrtc/api/objc/RTCEAGLVideoView.m
@@ -1,39 +1,18 @@
/*
- * libjingle
- * Copyright 2014 Google Inc.
+ * Copyright 2015 The WebRTC project authors. All Rights Reserved.
*
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
- * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
*/
-#if !defined(__has_feature) || !__has_feature(objc_arc)
-#error "This file requires ARC support."
-#endif
-
#import "RTCEAGLVideoView.h"
#import <GLKit/GLKit.h>
-#import "RTCI420Frame.h"
+#import "RTCVideoFrame.h"
#import "RTCOpenGLVideoRenderer.h"
// RTCDisplayLinkTimer wraps a CADisplayLink and is set to fire every two screen
@@ -50,7 +29,7 @@
@end
@implementation RTCDisplayLinkTimer {
- CADisplayLink* _displayLink;
+ CADisplayLink *_displayLink;
void (^_timerHandler)(void);
}
@@ -86,7 +65,7 @@
[_displayLink invalidate];
}
-- (void)displayLinkDidFire:(CADisplayLink*)displayLink {
+- (void)displayLinkDidFire:(CADisplayLink *)displayLink {
_timerHandler();
}
@@ -105,22 +84,25 @@
// its own |isDirty| flag.
@interface RTCEAGLVideoView () <GLKViewDelegate>
-// |i420Frame| is set when we receive a frame from a worker thread and is read
+// |videoFrame| is set when we receive a frame from a worker thread and is read
// from the display link callback so atomicity is required.
-@property(atomic, strong) RTCI420Frame* i420Frame;
-@property(nonatomic, readonly) GLKView* glkView;
-@property(nonatomic, readonly) RTCOpenGLVideoRenderer* glRenderer;
+@property(atomic, strong) RTCVideoFrame *videoFrame;
+@property(nonatomic, readonly) GLKView *glkView;
+@property(nonatomic, readonly) RTCOpenGLVideoRenderer *glRenderer;
@end
@implementation RTCEAGLVideoView {
- RTCDisplayLinkTimer* _timer;
- GLKView* _glkView;
- RTCOpenGLVideoRenderer* _glRenderer;
+ RTCDisplayLinkTimer *_timer;
// This flag should only be set and read on the main thread (e.g. by
// setNeedsDisplay)
BOOL _isDirty;
}
+@synthesize delegate = _delegate;
+@synthesize videoFrame = _videoFrame;
+@synthesize glkView = _glkView;
+@synthesize glRenderer = _glRenderer;
+
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
[self configure];
@@ -136,7 +118,7 @@
}
- (void)configure {
- EAGLContext* glContext =
+ EAGLContext *glContext =
[[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3];
if (!glContext) {
glContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
@@ -157,7 +139,7 @@
// Listen to application state in order to clean up OpenGL before app goes
// away.
- NSNotificationCenter* notificationCenter =
+ NSNotificationCenter *notificationCenter =
[NSNotificationCenter defaultCenter];
[notificationCenter addObserver:self
selector:@selector(willResignActive)
@@ -171,9 +153,9 @@
// Frames are received on a separate thread, so we poll for current frame
// using a refresh rate proportional to screen refresh frequency. This
// occurs on the main thread.
- __weak RTCEAGLVideoView* weakSelf = self;
+ __weak RTCEAGLVideoView *weakSelf = self;
_timer = [[RTCDisplayLinkTimer alloc] initWithTimerHandler:^{
- RTCEAGLVideoView* strongSelf = weakSelf;
+ RTCEAGLVideoView *strongSelf = weakSelf;
[strongSelf displayLinkTimerDidFire];
}];
[self setupGL];
@@ -210,25 +192,25 @@
// This method is called when the GLKView's content is dirty and needs to be
// redrawn. This occurs on main thread.
-- (void)glkView:(GLKView*)view drawInRect:(CGRect)rect {
+- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {
// The renderer will draw the frame to the framebuffer corresponding to the
// one used by |view|.
- [_glRenderer drawFrame:self.i420Frame];
+ [_glRenderer drawFrame:self.videoFrame];
}
#pragma mark - RTCVideoRenderer
// These methods may be called on non-main thread.
- (void)setSize:(CGSize)size {
- __weak RTCEAGLVideoView* weakSelf = self;
+ __weak RTCEAGLVideoView *weakSelf = self;
dispatch_async(dispatch_get_main_queue(), ^{
- RTCEAGLVideoView* strongSelf = weakSelf;
+ RTCEAGLVideoView *strongSelf = weakSelf;
[strongSelf.delegate videoView:strongSelf didChangeVideoSize:size];
});
}
-- (void)renderFrame:(RTCI420Frame*)frame {
- self.i420Frame = frame;
+- (void)renderFrame:(RTCVideoFrame *)frame {
+ self.videoFrame = frame;
}
#pragma mark - Private
@@ -236,7 +218,7 @@
- (void)displayLinkTimerDidFire {
// Don't render unless video frame have changed or the view content
// has explicitly been marked dirty.
- if (!_isDirty && _glRenderer.lastDrawnFrame == self.i420Frame) {
+ if (!_isDirty && _glRenderer.lastDrawnFrame == self.videoFrame) {
return;
}
@@ -254,13 +236,13 @@
}
- (void)setupGL {
- self.i420Frame = nil;
+ self.videoFrame = nil;
[_glRenderer setupGL];
_timer.isPaused = NO;
}
- (void)teardownGL {
- self.i420Frame = nil;
+ self.videoFrame = nil;
_timer.isPaused = YES;
[_glkView deleteDrawable];
[_glRenderer teardownGL];
« no previous file with comments | « webrtc/api/objc/RTCEAGLVideoView.h ('k') | webrtc/api/objc/RTCNSGLVideoView.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698