Cleanup RTCVideoRenderer interface.

RTCVideoRenderer should be a protocol not a class. This change includes
an adapter for use with the C++ apis. The video views have been refactored
to implement that protocol.

BUG=3795
R=glaznev@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/23279004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@7626 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/talk/examples/objc/AppRTCDemo/ios/APPRTCViewController.m b/talk/examples/objc/AppRTCDemo/ios/APPRTCViewController.m
index 8042762..d8d9714 100644
--- a/talk/examples/objc/AppRTCDemo/ios/APPRTCViewController.m
+++ b/talk/examples/objc/AppRTCDemo/ios/APPRTCViewController.m
@@ -34,6 +34,7 @@
 #import <AVFoundation/AVFoundation.h>
 #import "APPRTCConnectionManager.h"
 #import "RTCEAGLVideoView.h"
+#import "RTCVideoTrack.h"
 
 // Padding space for local video view with its parent.
 static CGFloat const kLocalViewPadding = 20;
@@ -47,6 +48,8 @@
 
 @implementation APPRTCViewController {
   APPRTCConnectionManager* _connectionManager;
+  RTCVideoTrack* _localVideoTrack;
+  RTCVideoTrack* _remoteVideoTrack;
   CGSize _localVideoSize;
   CGSize _remoteVideoSize;
 }
@@ -101,13 +104,15 @@
 
 - (void)connectionManager:(APPRTCConnectionManager*)manager
     didReceiveLocalVideoTrack:(RTCVideoTrack*)localVideoTrack {
+  _localVideoTrack = localVideoTrack;
+  [_localVideoTrack addRenderer:self.localVideoView];
   self.localVideoView.hidden = NO;
-  self.localVideoView.videoTrack = localVideoTrack;
 }
 
 - (void)connectionManager:(APPRTCConnectionManager*)manager
     didReceiveRemoteVideoTrack:(RTCVideoTrack*)remoteVideoTrack {
-  self.remoteVideoView.videoTrack = remoteVideoTrack;
+  _remoteVideoTrack = remoteVideoTrack;
+  [_remoteVideoTrack addRenderer:self.remoteVideoView];
 }
 
 - (void)connectionManagerDidReceiveHangup:(APPRTCConnectionManager*)manager {
@@ -193,8 +198,16 @@
   self.instructionsView.hidden = NO;
   self.logView.hidden = YES;
   self.logView.text = nil;
-  self.localVideoView.videoTrack = nil;
-  self.remoteVideoView.videoTrack = nil;
+  if (_localVideoTrack) {
+    [_localVideoTrack removeRenderer:self.localVideoView];
+    _localVideoTrack = nil;
+    [self.localVideoView renderFrame:nil];
+  }
+  if (_remoteVideoTrack) {
+    [_remoteVideoTrack removeRenderer:self.remoteVideoView];
+    _remoteVideoTrack = nil;
+    [self.remoteVideoView renderFrame:nil];
+  }
   self.blackView.hidden = YES;
 }