blob: 81e7888f3bcd4bfa5fc128717c59e280da2208d5 [file] [log] [blame]
Jon Hjelle891a4462016-01-21 11:42:05 -08001/*
2 * Copyright 2015 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11#import "RTCVideoRendererAdapter.h"
12
13#import "webrtc/api/objc/RTCVideoFrame+Private.h"
14#import "webrtc/api/objc/RTCVideoRendererAdapter+Private.h"
15
16namespace webrtc {
17
Niels Möller8f597622016-03-23 10:33:07 +010018class VideoRendererAdapter
19 : public rtc::VideoSinkInterface<cricket::VideoFrame> {
Jon Hjelle891a4462016-01-21 11:42:05 -080020 public:
21 VideoRendererAdapter(RTCVideoRendererAdapter* adapter) {
22 adapter_ = adapter;
23 size_ = CGSizeZero;
24 }
25
Niels Möller8f597622016-03-23 10:33:07 +010026 void OnFrame(const cricket::VideoFrame& nativeVideoFrame) override {
Jon Hjelle891a4462016-01-21 11:42:05 -080027 const cricket::VideoFrame *frame =
Niels Möller8f597622016-03-23 10:33:07 +010028 nativeVideoFrame.GetCopyWithRotationApplied();
nisse71a0c2f2016-04-04 00:57:29 -070029 CGSize current_size = CGSizeMake(frame->width(), frame->height());
Jon Hjelle891a4462016-01-21 11:42:05 -080030 if (!CGSizeEqualToSize(size_, current_size)) {
31 size_ = current_size;
32 [adapter_.videoRenderer setSize:size_];
33 }
34 RTCVideoFrame *videoFrame =
35 [[RTCVideoFrame alloc] initWithNativeFrame:frame];
36 [adapter_.videoRenderer renderFrame:videoFrame];
37 }
38
39 private:
40 __weak RTCVideoRendererAdapter *adapter_;
41 CGSize size_;
42};
43}
44
45@implementation RTCVideoRendererAdapter {
46 rtc::scoped_ptr<webrtc::VideoRendererAdapter> _adapter;
47}
48
49@synthesize videoRenderer = _videoRenderer;
50
51- (instancetype)initWithNativeRenderer:(id<RTCVideoRenderer>)videoRenderer {
52 NSParameterAssert(videoRenderer);
53 if (self = [super init]) {
54 _videoRenderer = videoRenderer;
55 _adapter.reset(new webrtc::VideoRendererAdapter(self));
56 }
57 return self;
58}
59
Niels Möller8f597622016-03-23 10:33:07 +010060- (rtc::VideoSinkInterface<cricket::VideoFrame> *)nativeVideoRenderer {
Jon Hjelle891a4462016-01-21 11:42:05 -080061 return _adapter.get();
62}
63
64@end