summaryrefslogtreecommitdiff
path: root/app/webrtc/objc/RTCEAGLVideoView.m
diff options
context:
space:
mode:
Diffstat (limited to 'app/webrtc/objc/RTCEAGLVideoView.m')
-rw-r--r--app/webrtc/objc/RTCEAGLVideoView.m58
1 files changed, 19 insertions, 39 deletions
diff --git a/app/webrtc/objc/RTCEAGLVideoView.m b/app/webrtc/objc/RTCEAGLVideoView.m
index faacef6..c55c87e 100644
--- a/app/webrtc/objc/RTCEAGLVideoView.m
+++ b/app/webrtc/objc/RTCEAGLVideoView.m
@@ -29,13 +29,12 @@
#error "This file requires ARC support."
#endif
-#import "RTCEAGLVideoView+Internal.h"
+#import "RTCEAGLVideoView.h"
#import <GLKit/GLKit.h>
+#import "RTCI420Frame.h"
#import "RTCOpenGLVideoRenderer.h"
-#import "RTCVideoRenderer.h"
-#import "RTCVideoTrack.h"
// RTCDisplayLinkTimer wraps a CADisplayLink and is set to fire every two screen
// refreshes, which should be 30fps. We wrap the display link in order to avoid
@@ -105,7 +104,6 @@
RTCDisplayLinkTimer* _timer;
GLKView* _glkView;
RTCOpenGLVideoRenderer* _glRenderer;
- RTCVideoRenderer* _videoRenderer;
}
- (instancetype)initWithFrame:(CGRect)frame {
@@ -152,7 +150,6 @@
// GLKViewDelegate method implemented below.
[strongSelf.glkView setNeedsDisplay];
}];
- _videoRenderer = [[RTCVideoRenderer alloc] initWithDelegate:self];
[self setupGL];
}
return self;
@@ -168,18 +165,6 @@
[_timer invalidate];
}
-- (void)setVideoTrack:(RTCVideoTrack*)videoTrack {
- if (_videoTrack == videoTrack) {
- return;
- }
- [_videoTrack removeRenderer:_videoRenderer];
- self.i420Frame = nil;
- _videoTrack = videoTrack;
- [_videoTrack addRenderer:_videoRenderer];
- // TODO(tkchin): potentially handle changes in track state - e.g. render
- // black if track fails.
-}
-
#pragma mark - UIView
- (void)layoutSubviews {
@@ -197,14 +182,31 @@
[_glRenderer drawFrame:self.i420Frame];
}
+#pragma mark - RTCVideoRenderer
+
+// These methods may be called on non-main thread.
+- (void)setSize:(CGSize)size {
+ __weak RTCEAGLVideoView* weakSelf = self;
+ dispatch_async(dispatch_get_main_queue(), ^{
+ RTCEAGLVideoView* strongSelf = weakSelf;
+ [strongSelf.delegate videoView:strongSelf didChangeVideoSize:size];
+ });
+}
+
+- (void)renderFrame:(RTCI420Frame*)frame {
+ self.i420Frame = frame;
+}
+
#pragma mark - Private
- (void)setupGL {
+ self.i420Frame = nil;
[_glRenderer setupGL];
_timer.isPaused = NO;
}
- (void)teardownGL {
+ self.i420Frame = nil;
_timer.isPaused = YES;
[_glkView deleteDrawable];
[_glRenderer teardownGL];
@@ -219,25 +221,3 @@
}
@end
-
-@implementation RTCEAGLVideoView (Internal)
-
-#pragma mark - RTCVideoRendererDelegate
-
-// These methods are called when the video track has frame information to
-// provide. This occurs on non-main thread.
-- (void)renderer:(RTCVideoRenderer*)renderer
- didSetSize:(CGSize)size {
- __weak RTCEAGLVideoView* weakSelf = self;
- dispatch_async(dispatch_get_main_queue(), ^{
- RTCEAGLVideoView* strongSelf = weakSelf;
- [strongSelf.delegate videoView:strongSelf didChangeVideoSize:size];
- });
-}
-
-- (void)renderer:(RTCVideoRenderer*)renderer
- didReceiveFrame:(RTCI420Frame*)frame {
- self.i420Frame = frame;
-}
-
-@end