| Index: webrtc/api/objc/RTCOpenGLVideoRenderer.mm
 | 
| diff --git a/talk/app/webrtc/objc/RTCOpenGLVideoRenderer.mm b/webrtc/api/objc/RTCOpenGLVideoRenderer.mm
 | 
| similarity index 84%
 | 
| copy from talk/app/webrtc/objc/RTCOpenGLVideoRenderer.mm
 | 
| copy to webrtc/api/objc/RTCOpenGLVideoRenderer.mm
 | 
| index cfead91bcafd0eee7261af8750473649ef46e16d..56a6431ffa43c09ee947e2662bd2a49c0cba36e4 100644
 | 
| --- a/talk/app/webrtc/objc/RTCOpenGLVideoRenderer.mm
 | 
| +++ b/webrtc/api/objc/RTCOpenGLVideoRenderer.mm
 | 
| @@ -1,34 +1,13 @@
 | 
|  /*
 | 
| - * 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 "RTCOpenGLVideoRenderer.h"
 | 
|  
 | 
|  #include <string.h>
 | 
| @@ -41,7 +20,7 @@
 | 
|  #import <OpenGL/gl3.h>
 | 
|  #endif
 | 
|  
 | 
| -#import "RTCI420Frame.h"
 | 
| +#import "RTCVideoFrame.h"
 | 
|  
 | 
|  // TODO(tkchin): check and log openGL errors. Methods here return BOOLs in
 | 
|  // anticipation of that happening in the future.
 | 
| @@ -102,7 +81,7 @@ static const char kFragmentShaderSource[] =
 | 
|  
 | 
|  // Compiles a shader of the given |type| with GLSL source |source| and returns
 | 
|  // the shader handle or 0 on error.
 | 
| -GLuint CreateShader(GLenum type, const GLchar* source) {
 | 
| +GLuint CreateShader(GLenum type, const GLchar *source) {
 | 
|    GLuint shader = glCreateShader(type);
 | 
|    if (!shader) {
 | 
|      return 0;
 | 
| @@ -164,9 +143,9 @@ static const GLsizei kNumTextures = 3 * kNumTextureSets;
 | 
|  
 | 
|  @implementation RTCOpenGLVideoRenderer {
 | 
|  #if TARGET_OS_IPHONE
 | 
| -  EAGLContext* _context;
 | 
| +  EAGLContext *_context;
 | 
|  #else
 | 
| -  NSOpenGLContext* _context;
 | 
| +  NSOpenGLContext *_context;
 | 
|  #endif
 | 
|    BOOL _isInitialized;
 | 
|    NSUInteger _currentTextureSet;
 | 
| @@ -187,15 +166,17 @@ static const GLsizei kNumTextures = 3 * kNumTextureSets;
 | 
|    rtc::scoped_ptr<uint8_t[]> _planeBuffer;
 | 
|  }
 | 
|  
 | 
| +@synthesize lastDrawnFrame = _lastDrawnFrame;
 | 
| +
 | 
|  + (void)initialize {
 | 
|    // Disable dithering for performance.
 | 
|    glDisable(GL_DITHER);
 | 
|  }
 | 
|  
 | 
|  #if TARGET_OS_IPHONE
 | 
| -- (instancetype)initWithContext:(EAGLContext*)context {
 | 
| +- (instancetype)initWithContext:(EAGLContext *)context {
 | 
|  #else
 | 
| -- (instancetype)initWithContext:(NSOpenGLContext*)context {
 | 
| +- (instancetype)initWithContext:(NSOpenGLContext *)context {
 | 
|  #endif
 | 
|    NSAssert(context != nil, @"context cannot be nil");
 | 
|    if (self = [super init]) {
 | 
| @@ -204,7 +185,7 @@ static const GLsizei kNumTextures = 3 * kNumTextureSets;
 | 
|    return self;
 | 
|  }
 | 
|  
 | 
| -- (BOOL)drawFrame:(RTCI420Frame*)frame {
 | 
| +- (BOOL)drawFrame:(RTCVideoFrame *)frame {
 | 
|    if (!_isInitialized) {
 | 
|      return NO;
 | 
|    }
 | 
| @@ -325,7 +306,7 @@ static const GLsizei kNumTextures = 3 * kNumTextureSets;
 | 
|    return YES;
 | 
|  }
 | 
|  
 | 
| -- (BOOL)updateTextureSizesForFrame:(RTCI420Frame*)frame {
 | 
| +- (BOOL)updateTextureSizesForFrame:(RTCVideoFrame *)frame {
 | 
|    if (frame.height == _lastDrawnFrame.height &&
 | 
|        frame.width == _lastDrawnFrame.width &&
 | 
|        frame.chromaWidth == _lastDrawnFrame.chromaWidth &&
 | 
| @@ -368,8 +349,9 @@ static const GLsizei kNumTextures = 3 * kNumTextureSets;
 | 
|                   GL_UNSIGNED_BYTE,
 | 
|                   0);
 | 
|    }
 | 
| -  if (frame.yPitch != frame.width || frame.uPitch != frame.chromaWidth ||
 | 
| -      frame.vPitch != frame.chromaWidth) {
 | 
| +  if ((NSUInteger)frame.yPitch != frame.width ||
 | 
| +      (NSUInteger)frame.uPitch != frame.chromaWidth ||
 | 
| +      (NSUInteger)frame.vPitch != frame.chromaWidth) {
 | 
|      _planeBuffer.reset(new uint8_t[frame.width * frame.height]);
 | 
|    } else {
 | 
|      _planeBuffer.reset();
 | 
| @@ -377,12 +359,12 @@ static const GLsizei kNumTextures = 3 * kNumTextureSets;
 | 
|    return YES;
 | 
|  }
 | 
|  
 | 
| -- (void)uploadPlane:(const uint8_t*)plane
 | 
| +- (void)uploadPlane:(const uint8_t *)plane
 | 
|              sampler:(GLint)sampler
 | 
|               offset:(NSUInteger)offset
 | 
| -              width:(NSUInteger)width
 | 
| -             height:(NSUInteger)height
 | 
| -             stride:(NSInteger)stride {
 | 
| +              width:(size_t)width
 | 
| +             height:(size_t)height
 | 
| +             stride:(int32_t)stride {
 | 
|    glActiveTexture(GL_TEXTURE0 + offset);
 | 
|    // When setting texture sampler uniforms, the texture index is used not
 | 
|    // the texture handle.
 | 
| @@ -392,8 +374,8 @@ static const GLsizei kNumTextures = 3 * kNumTextureSets;
 | 
|  #else
 | 
|    BOOL hasUnpackRowLength = YES;
 | 
|  #endif
 | 
| -  const uint8_t* uploadPlane = plane;
 | 
| -  if (stride != width) {
 | 
| +  const uint8_t *uploadPlane = plane;
 | 
| +  if ((size_t)stride != width) {
 | 
|     if (hasUnpackRowLength) {
 | 
|        // GLES3 allows us to specify stride.
 | 
|        glPixelStorei(GL_UNPACK_ROW_LENGTH, stride);
 | 
| @@ -411,8 +393,8 @@ static const GLsizei kNumTextures = 3 * kNumTextureSets;
 | 
|      } else {
 | 
|        // Make an unpadded copy and upload that instead. Quick profiling showed
 | 
|        // that this is faster than uploading row by row using glTexSubImage2D.
 | 
| -      uint8_t* unpaddedPlane = _planeBuffer.get();
 | 
| -      for (NSUInteger y = 0; y < height; ++y) {
 | 
| +      uint8_t *unpaddedPlane = _planeBuffer.get();
 | 
| +      for (size_t y = 0; y < height; ++y) {
 | 
|          memcpy(unpaddedPlane + y * width, plane + y * stride, width);
 | 
|        }
 | 
|        uploadPlane = unpaddedPlane;
 | 
| @@ -429,7 +411,7 @@ static const GLsizei kNumTextures = 3 * kNumTextureSets;
 | 
|                 uploadPlane);
 | 
|  }
 | 
|  
 | 
| -- (BOOL)updateTextureDataForFrame:(RTCI420Frame*)frame {
 | 
| +- (BOOL)updateTextureDataForFrame:(RTCVideoFrame *)frame {
 | 
|    NSUInteger textureOffset = _currentTextureSet * 3;
 | 
|    NSAssert(textureOffset + 3 <= kNumTextures, @"invalid offset");
 | 
|  
 | 
| @@ -483,7 +465,7 @@ static const GLsizei kNumTextures = 3 * kNumTextureSets;
 | 
|    // beginning at the start of the array. The last argument indicates offset
 | 
|    // of data within |gVertices| as supplied to the vertex buffer.
 | 
|    glVertexAttribPointer(
 | 
| -      _position, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(GLfloat), (void*)0);
 | 
| +      _position, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(GLfloat), (void *)0);
 | 
|    glEnableVertexAttribArray(_position);
 | 
|  
 | 
|    // Read texcoord attribute from |gVertices| with size of 2 and stride of 4
 | 
| @@ -494,7 +476,7 @@ static const GLsizei kNumTextures = 3 * kNumTextureSets;
 | 
|                          GL_FLOAT,
 | 
|                          GL_FALSE,
 | 
|                          4 * sizeof(GLfloat),
 | 
| -                        (void*)(2 * sizeof(GLfloat)));
 | 
| +                        (void *)(2 * sizeof(GLfloat)));
 | 
|    glEnableVertexAttribArray(_texcoord);
 | 
|  
 | 
|    return YES;
 | 
| 
 |