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

Unified Diff: webrtc/modules/video_render/ios/video_render_ios_view.mm

Issue 1923613003: Revert of Delete video_render module. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 8 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
Index: webrtc/modules/video_render/ios/video_render_ios_view.mm
diff --git a/webrtc/modules/video_render/ios/video_render_ios_view.mm b/webrtc/modules/video_render/ios/video_render_ios_view.mm
new file mode 100644
index 0000000000000000000000000000000000000000..b106ffa5c4f925a8f59999394e8b5e1b4fd68107
--- /dev/null
+++ b/webrtc/modules/video_render/ios/video_render_ios_view.mm
@@ -0,0 +1,163 @@
+/*
+ * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
+ *
+ * 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
+
+#include <memory>
+
+#include "webrtc/modules/video_render/ios/video_render_ios_view.h"
+#include "webrtc/system_wrappers/include/trace.h"
+
+using namespace webrtc;
+
+@implementation VideoRenderIosView {
+ EAGLContext* _context;
+ std::unique_ptr<webrtc::OpenGles20> _gles_renderer20;
+ int _frameBufferWidth;
+ int _frameBufferHeight;
+ unsigned int _defaultFrameBuffer;
+ unsigned int _colorRenderBuffer;
+}
+
+@synthesize context = context_;
+
++ (Class)layerClass {
+ return [CAEAGLLayer class];
+}
+
+- (id)initWithCoder:(NSCoder*)coder {
+ // init super class
+ self = [super initWithCoder:coder];
+ if (self) {
+ _gles_renderer20.reset(new OpenGles20());
+ }
+ return self;
+}
+
+- (id)init {
+ // init super class
+ self = [super init];
+ if (self) {
+ _gles_renderer20.reset(new OpenGles20());
+ }
+ return self;
+}
+
+- (id)initWithFrame:(CGRect)frame {
+ // init super class
+ self = [super initWithFrame:frame];
+ if (self) {
+ _gles_renderer20.reset(new OpenGles20());
+ }
+ return self;
+}
+
+- (void)dealloc {
+ if (_defaultFrameBuffer) {
+ glDeleteFramebuffers(1, &_defaultFrameBuffer);
+ _defaultFrameBuffer = 0;
+ }
+
+ if (_colorRenderBuffer) {
+ glDeleteRenderbuffers(1, &_colorRenderBuffer);
+ _colorRenderBuffer = 0;
+ }
+
+ [EAGLContext setCurrentContext:nil];
+}
+
+- (NSString*)description {
+ return [NSString stringWithFormat:
+ @"A WebRTC implemented subclass of UIView."
+ "+Class method is overwritten, along with custom methods"];
+}
+
+- (BOOL)createContext {
+ // create OpenGLES context from self layer class
+ CAEAGLLayer* eagl_layer = (CAEAGLLayer*)self.layer;
+ eagl_layer.opaque = YES;
+ eagl_layer.drawableProperties =
+ [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:NO],
+ kEAGLDrawablePropertyRetainedBacking,
+ kEAGLColorFormatRGBA8,
+ kEAGLDrawablePropertyColorFormat,
+ nil];
+ _context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
+
+ if (!_context) {
+ return NO;
+ }
+
+ if (![EAGLContext setCurrentContext:_context]) {
+ return NO;
+ }
+
+ // generates and binds the OpenGLES buffers
+ glGenFramebuffers(1, &_defaultFrameBuffer);
+ glBindFramebuffer(GL_FRAMEBUFFER, _defaultFrameBuffer);
+
+ // Create color render buffer and allocate backing store.
+ glGenRenderbuffers(1, &_colorRenderBuffer);
+ glBindRenderbuffer(GL_RENDERBUFFER, _colorRenderBuffer);
+ [_context renderbufferStorage:GL_RENDERBUFFER
+ fromDrawable:(CAEAGLLayer*)self.layer];
+ glGetRenderbufferParameteriv(
+ GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &_frameBufferWidth);
+ glGetRenderbufferParameteriv(
+ GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &_frameBufferHeight);
+ glFramebufferRenderbuffer(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_RENDERBUFFER,
+ _colorRenderBuffer);
+
+ if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
+ return NO;
+ }
+
+ // set the frame buffer
+ glBindFramebuffer(GL_FRAMEBUFFER, _defaultFrameBuffer);
+ glViewport(0, 0, self.frame.size.width, self.frame.size.height);
+
+ return _gles_renderer20->Setup([self bounds].size.width,
+ [self bounds].size.height);
+}
+
+- (BOOL)presentFramebuffer {
+ if (![_context presentRenderbuffer:GL_RENDERBUFFER]) {
+ WEBRTC_TRACE(kTraceWarning,
+ kTraceVideoRenderer,
+ 0,
+ "%s:%d [context present_renderbuffer] "
+ "returned false",
+ __FUNCTION__,
+ __LINE__);
+ }
+ return YES;
+}
+
+- (BOOL)renderFrame:(VideoFrame*)frameToRender {
+ if (![EAGLContext setCurrentContext:_context]) {
+ return NO;
+ }
+
+ return _gles_renderer20->Render(*frameToRender);
+}
+
+- (BOOL)setCoordinatesForZOrder:(const float)zOrder
+ Left:(const float)left
+ Top:(const float)top
+ Right:(const float)right
+ Bottom:(const float)bottom {
+ return _gles_renderer20->SetCoordinates(zOrder, left, top, right, bottom);
+}
+
+@end
« no previous file with comments | « webrtc/modules/video_render/ios/video_render_ios_view.h ('k') | webrtc/modules/video_render/linux/video_render_linux_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698