diff options
Diffstat (limited to 'app/webrtc/objc/RTCEAGLVideoView.m')
-rw-r--r-- | app/webrtc/objc/RTCEAGLVideoView.m | 58 |
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 |