Delete VideoRendererInterface.

Use in chromium was deleted a few days ago.

BUG=webrtc:5426
R=magjed@webrtc.org, pbos@webrtc.org, perkj@webrtc.org, pthatcher@webrtc.org, tkchin@webrtc.org

Review URL: https://codereview.webrtc.org/1817473002 .

Cr-Commit-Position: refs/heads/master@{#12099}
This commit is contained in:
Niels Möller
2016-03-23 10:33:07 +01:00
parent c8f952deaa
commit 8f59762897
17 changed files with 55 additions and 154 deletions

View File

@ -33,7 +33,7 @@
@property(nonatomic, readonly) id<RTCVideoRenderer> videoRenderer; @property(nonatomic, readonly) id<RTCVideoRenderer> videoRenderer;
@property(nonatomic, readonly) @property(nonatomic, readonly)
webrtc::VideoRendererInterface* nativeVideoRenderer; rtc::VideoSinkInterface<cricket::VideoFrame> *nativeVideoRenderer;
- (instancetype)initWithVideoRenderer:(id<RTCVideoRenderer>)videoRenderer; - (instancetype)initWithVideoRenderer:(id<RTCVideoRenderer>)videoRenderer;

View File

@ -36,15 +36,16 @@
namespace webrtc { namespace webrtc {
class RTCVideoRendererNativeAdapter : public VideoRendererInterface { class RTCVideoRendererNativeAdapter
: public rtc::VideoSinkInterface<cricket::VideoFrame> {
public: public:
RTCVideoRendererNativeAdapter(RTCVideoRendererAdapter* adapter) { RTCVideoRendererNativeAdapter(RTCVideoRendererAdapter* adapter) {
_adapter = adapter; _adapter = adapter;
_size = CGSizeZero; _size = CGSizeZero;
} }
void RenderFrame(const cricket::VideoFrame* videoFrame) override { void OnFrame(const cricket::VideoFrame& videoFrame) override {
const cricket::VideoFrame* frame = videoFrame->GetCopyWithRotationApplied(); const cricket::VideoFrame* frame = videoFrame.GetCopyWithRotationApplied();
CGSize currentSize = CGSizeMake(frame->GetWidth(), frame->GetHeight()); CGSize currentSize = CGSizeMake(frame->GetWidth(), frame->GetHeight());
if (!CGSizeEqualToSize(_size, currentSize)) { if (!CGSizeEqualToSize(_size, currentSize)) {
_size = currentSize; _size = currentSize;
@ -74,7 +75,7 @@ class RTCVideoRendererNativeAdapter : public VideoRendererInterface {
return self; return self;
} }
- (webrtc::VideoRendererInterface*)nativeVideoRenderer { - (rtc::VideoSinkInterface<cricket::VideoFrame> *)nativeVideoRenderer {
return _adapter.get(); return _adapter.get();
} }

View File

@ -78,7 +78,7 @@
- (void)dealloc { - (void)dealloc {
for (RTCVideoRendererAdapter *adapter in _adapters) { for (RTCVideoRendererAdapter *adapter in _adapters) {
self.nativeVideoTrack->RemoveRenderer(adapter.nativeVideoRenderer); self.nativeVideoTrack->RemoveSink(adapter.nativeVideoRenderer);
} }
} }
@ -91,7 +91,8 @@
RTCVideoRendererAdapter* adapter = RTCVideoRendererAdapter* adapter =
[[RTCVideoRendererAdapter alloc] initWithVideoRenderer:renderer]; [[RTCVideoRendererAdapter alloc] initWithVideoRenderer:renderer];
[_adapters addObject:adapter]; [_adapters addObject:adapter];
self.nativeVideoTrack->AddRenderer(adapter.nativeVideoRenderer); self.nativeVideoTrack->AddOrUpdateSink(adapter.nativeVideoRenderer,
rtc::VideoSinkWants());
} }
- (void)removeRenderer:(id<RTCVideoRenderer>)renderer { - (void)removeRenderer:(id<RTCVideoRenderer>)renderer {
@ -107,7 +108,7 @@
if (indexToRemove == NSNotFound) { if (indexToRemove == NSNotFound) {
return; return;
} }
self.nativeVideoTrack->RemoveRenderer(adapter.nativeVideoRenderer); self.nativeVideoTrack->RemoveSink(adapter.nativeVideoRenderer);
[_adapters removeObjectAtIndex:indexToRemove]; [_adapters removeObjectAtIndex:indexToRemove];
} }

View File

@ -31,7 +31,7 @@ import javax.microedition.khronos.egl.EGLContext;
* renderFrame() is asynchronous to avoid blocking the calling thread. * renderFrame() is asynchronous to avoid blocking the calling thread.
* This class is thread safe and handles access from potentially four different threads: * This class is thread safe and handles access from potentially four different threads:
* Interaction from the main app in init, release, setMirror, and setScalingtype. * Interaction from the main app in init, release, setMirror, and setScalingtype.
* Interaction from C++ webrtc::VideoRendererInterface in renderFrame and canApplyRotation. * Interaction from C++ rtc::VideoSinkInterface in renderFrame.
* Interaction from the Activity lifecycle in surfaceCreated, surfaceChanged, and surfaceDestroyed. * Interaction from the Activity lifecycle in surfaceCreated, surfaceChanged, and surfaceDestroyed.
* Interaction with the layout framework in onMeasure and onSizeChanged. * Interaction with the layout framework in onMeasure and onSizeChanged.
*/ */

View File

@ -106,7 +106,6 @@ using webrtc::SetSessionDescriptionObserver;
using webrtc::StatsObserver; using webrtc::StatsObserver;
using webrtc::StatsReport; using webrtc::StatsReport;
using webrtc::StatsReports; using webrtc::StatsReports;
using webrtc::VideoRendererInterface;
using webrtc::VideoTrackSourceInterface; using webrtc::VideoTrackSourceInterface;
using webrtc::VideoTrackInterface; using webrtc::VideoTrackInterface;
using webrtc::VideoTrackVector; using webrtc::VideoTrackVector;
@ -731,32 +730,10 @@ class StatsObserverWrapper : public StatsObserver {
const jmethodID j_value_ctor_; const jmethodID j_value_ctor_;
}; };
// Adapter presenting a cricket::VideoRenderer as a // Wrapper dispatching rtc::VideoSinkInterface to a Java VideoRenderer
// webrtc::VideoRendererInterface.
class VideoRendererWrapper : public VideoRendererInterface {
public:
static VideoRendererWrapper* Create(cricket::VideoRenderer* renderer) {
if (renderer)
return new VideoRendererWrapper(renderer);
return NULL;
}
virtual ~VideoRendererWrapper() {}
void RenderFrame(const cricket::VideoFrame* video_frame) override {
ScopedLocalRefFrame local_ref_frame(AttachCurrentThreadIfNeeded());
renderer_->RenderFrame(video_frame->GetCopyWithRotationApplied());
}
private:
explicit VideoRendererWrapper(cricket::VideoRenderer* renderer)
: renderer_(renderer) {}
scoped_ptr<cricket::VideoRenderer> renderer_;
};
// Wrapper dispatching webrtc::VideoRendererInterface to a Java VideoRenderer
// instance. // instance.
class JavaVideoRendererWrapper : public VideoRendererInterface { class JavaVideoRendererWrapper
: public rtc::VideoSinkInterface<cricket::VideoFrame> {
public: public:
JavaVideoRendererWrapper(JNIEnv* jni, jobject j_callbacks) JavaVideoRendererWrapper(JNIEnv* jni, jobject j_callbacks)
: j_callbacks_(jni, j_callbacks), : j_callbacks_(jni, j_callbacks),
@ -776,11 +753,11 @@ class JavaVideoRendererWrapper : public VideoRendererInterface {
virtual ~JavaVideoRendererWrapper() {} virtual ~JavaVideoRendererWrapper() {}
void RenderFrame(const cricket::VideoFrame* video_frame) override { void OnFrame(const cricket::VideoFrame& video_frame) override {
ScopedLocalRefFrame local_ref_frame(jni()); ScopedLocalRefFrame local_ref_frame(jni());
jobject j_frame = (video_frame->GetNativeHandle() != nullptr) jobject j_frame = (video_frame.GetNativeHandle() != nullptr)
? CricketToJavaTextureFrame(video_frame) ? CricketToJavaTextureFrame(&video_frame)
: CricketToJavaI420Frame(video_frame); : CricketToJavaI420Frame(&video_frame);
// |j_callbacks_| is responsible for releasing |j_frame| with // |j_callbacks_| is responsible for releasing |j_frame| with
// VideoRenderer.renderFrameDone(). // VideoRenderer.renderFrameDone().
jni()->CallVoidMethod(*j_callbacks_, j_render_frame_id_, j_frame); jni()->CallVoidMethod(*j_callbacks_, j_render_frame_id_, j_frame);
@ -1997,15 +1974,20 @@ JOW(jboolean, MediaStreamTrack_nativeSetEnabled)(
JOW(void, VideoTrack_nativeAddRenderer)( JOW(void, VideoTrack_nativeAddRenderer)(
JNIEnv* jni, jclass, JNIEnv* jni, jclass,
jlong j_video_track_pointer, jlong j_renderer_pointer) { jlong j_video_track_pointer, jlong j_renderer_pointer) {
reinterpret_cast<VideoTrackInterface*>(j_video_track_pointer)->AddRenderer( reinterpret_cast<VideoTrackInterface*>(j_video_track_pointer)
reinterpret_cast<VideoRendererInterface*>(j_renderer_pointer)); ->AddOrUpdateSink(
reinterpret_cast<rtc::VideoSinkInterface<cricket::VideoFrame>*>(
j_renderer_pointer),
rtc::VideoSinkWants());
} }
JOW(void, VideoTrack_nativeRemoveRenderer)( JOW(void, VideoTrack_nativeRemoveRenderer)(
JNIEnv* jni, jclass, JNIEnv* jni, jclass,
jlong j_video_track_pointer, jlong j_renderer_pointer) { jlong j_video_track_pointer, jlong j_renderer_pointer) {
reinterpret_cast<VideoTrackInterface*>(j_video_track_pointer)->RemoveRenderer( reinterpret_cast<VideoTrackInterface*>(j_video_track_pointer)
reinterpret_cast<VideoRendererInterface*>(j_renderer_pointer)); ->RemoveSink(
reinterpret_cast<rtc::VideoSinkInterface<cricket::VideoFrame>*>(
j_renderer_pointer));
} }
JOW(jlong, CallSessionFileRotatingLogSink_nativeAddSink)( JOW(jlong, CallSessionFileRotatingLogSink_nativeAddSink)(

View File

@ -13,7 +13,7 @@ package org.webrtc;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
/** /**
* Java version of VideoRendererInterface. In addition to allowing clients to * Java version of VideoSinkInterface. In addition to allowing clients to
* define their own rendering behavior (by passing in a Callbacks object), this * define their own rendering behavior (by passing in a Callbacks object), this
* class also provides a createGui() method for creating a GUI-rendering window * class also provides a createGui() method for creating a GUI-rendering window
* on various platforms. * on various platforms.
@ -106,7 +106,7 @@ public class VideoRenderer {
public static native void nativeCopyPlane(ByteBuffer src, int width, public static native void nativeCopyPlane(ByteBuffer src, int width,
int height, int srcStride, ByteBuffer dst, int dstStride); int height, int srcStride, ByteBuffer dst, int dstStride);
/** The real meat of VideoRendererInterface. */ /** The real meat of VideoSinkInterface. */
public static interface Callbacks { public static interface Callbacks {
// |frame| might have pending rotation and implementation of Callbacks // |frame| might have pending rotation and implementation of Callbacks
// should handle that by applying rotation during rendering. The callee // should handle that by applying rotation during rendering. The callee

View File

@ -99,26 +99,6 @@ class MediaStreamTrackInterface : public rtc::RefCountInterface,
virtual ~MediaStreamTrackInterface() {} virtual ~MediaStreamTrackInterface() {}
}; };
// Interface for rendering VideoFrames from a VideoTrack
class VideoRendererInterface
: public rtc::VideoSinkInterface<cricket::VideoFrame> {
public:
// |frame| may have pending rotation. For clients which can't apply rotation,
// |frame|->GetCopyWithRotationApplied() will return a frame that has the
// rotation applied.
virtual void RenderFrame(const cricket::VideoFrame* frame) = 0;
// Intended to replace RenderFrame.
void OnFrame(const cricket::VideoFrame& frame) override {
RenderFrame(&frame);
}
protected:
// The destructor is protected to prevent deletion via the interface.
// This is so that we allow reference counted classes, where the destructor
// should never be public, to implement the interface.
virtual ~VideoRendererInterface() {}
};
// VideoTrackSourceInterface is a reference counted source used for VideoTracks. // VideoTrackSourceInterface is a reference counted source used for VideoTracks.
// The same source can be used in multiple VideoTracks. // The same source can be used in multiple VideoTracks.
class VideoTrackSourceInterface class VideoTrackSourceInterface
@ -157,16 +137,6 @@ class VideoTrackInterface
: public MediaStreamTrackInterface, : public MediaStreamTrackInterface,
public rtc::VideoSourceInterface<cricket::VideoFrame> { public rtc::VideoSourceInterface<cricket::VideoFrame> {
public: public:
// AddRenderer and RemoveRenderer are for backwards compatibility
// only. They are obsoleted by the methods of
// rtc::VideoSourceInterface.
virtual void AddRenderer(VideoRendererInterface* renderer) {
AddOrUpdateSink(renderer, rtc::VideoSinkWants());
}
virtual void RemoveRenderer(VideoRendererInterface* renderer) {
RemoveSink(renderer);
}
// Register a video sink for this track. // Register a video sink for this track.
void AddOrUpdateSink(rtc::VideoSinkInterface<cricket::VideoFrame>* sink, void AddOrUpdateSink(rtc::VideoSinkInterface<cricket::VideoFrame>* sink,
const rtc::VideoSinkWants& wants) override{}; const rtc::VideoSinkWants& wants) override{};

View File

@ -46,8 +46,6 @@ BEGIN_PROXY_MAP(VideoTrack)
PROXY_METHOD1(bool, set_enabled, bool) PROXY_METHOD1(bool, set_enabled, bool)
PROXY_METHOD1(bool, set_state, TrackState) PROXY_METHOD1(bool, set_state, TrackState)
PROXY_METHOD1(void, AddRenderer, VideoRendererInterface*)
PROXY_METHOD1(void, RemoveRenderer, VideoRendererInterface*)
PROXY_METHOD2(void, PROXY_METHOD2(void,
AddOrUpdateSink, AddOrUpdateSink,
rtc::VideoSinkInterface<cricket::VideoFrame>*, rtc::VideoSinkInterface<cricket::VideoFrame>*,

View File

@ -26,12 +26,12 @@ NS_ASSUME_NONNULL_BEGIN
@property(nonatomic, readonly) id<RTCVideoRenderer> videoRenderer; @property(nonatomic, readonly) id<RTCVideoRenderer> videoRenderer;
/** /**
* The native VideoRendererInterface surface exposed by this adapter. Calls made * The native VideoSinkInterface surface exposed by this adapter. Calls made
* to this interface will be adapted and passed to the RTCVideoRenderer supplied * to this interface will be adapted and passed to the RTCVideoRenderer supplied
* during construction. This pointer is unsafe and owned by this class. * during construction. This pointer is unsafe and owned by this class.
*/ */
@property(nonatomic, readonly) @property(nonatomic, readonly)
webrtc::VideoRendererInterface *nativeVideoRenderer; rtc::VideoSinkInterface<cricket::VideoFrame> *nativeVideoRenderer;
/** Initialize an RTCVideoRendererAdapter with an RTCVideoRenderer. */ /** Initialize an RTCVideoRendererAdapter with an RTCVideoRenderer. */
- (instancetype)initWithNativeRenderer:(id<RTCVideoRenderer>)videoRenderer - (instancetype)initWithNativeRenderer:(id<RTCVideoRenderer>)videoRenderer

View File

@ -13,8 +13,8 @@
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
/* /*
* Creates a webrtc::VideoRendererInterface surface for an RTCVideoRenderer. The * Creates a rtc::VideoSinkInterface surface for an RTCVideoRenderer. The
* webrtc::VideoRendererInterface is used by WebRTC rendering code - this * rtc::VideoSinkInterface is used by WebRTC rendering code - this
* adapter adapts calls made to that interface to the RTCVideoRenderer supplied * adapter adapts calls made to that interface to the RTCVideoRenderer supplied
* during construction. * during construction.
*/ */

View File

@ -15,16 +15,17 @@
namespace webrtc { namespace webrtc {
class VideoRendererAdapter : public VideoRendererInterface { class VideoRendererAdapter
: public rtc::VideoSinkInterface<cricket::VideoFrame> {
public: public:
VideoRendererAdapter(RTCVideoRendererAdapter* adapter) { VideoRendererAdapter(RTCVideoRendererAdapter* adapter) {
adapter_ = adapter; adapter_ = adapter;
size_ = CGSizeZero; size_ = CGSizeZero;
} }
void RenderFrame(const cricket::VideoFrame *nativeVideoFrame) override { void OnFrame(const cricket::VideoFrame& nativeVideoFrame) override {
const cricket::VideoFrame *frame = const cricket::VideoFrame *frame =
nativeVideoFrame->GetCopyWithRotationApplied(); nativeVideoFrame.GetCopyWithRotationApplied();
CGSize current_size = CGSizeMake(frame->GetWidth(), frame->GetHeight()); CGSize current_size = CGSizeMake(frame->GetWidth(), frame->GetHeight());
if (!CGSizeEqualToSize(size_, current_size)) { if (!CGSizeEqualToSize(size_, current_size)) {
size_ = current_size; size_ = current_size;
@ -56,7 +57,7 @@ class VideoRendererAdapter : public VideoRendererInterface {
return self; return self;
} }
- (webrtc::VideoRendererInterface *)nativeVideoRenderer { - (rtc::VideoSinkInterface<cricket::VideoFrame> *)nativeVideoRenderer {
return _adapter.get(); return _adapter.get();
} }

View File

@ -52,7 +52,7 @@
- (void)dealloc { - (void)dealloc {
for (RTCVideoRendererAdapter *adapter in _adapters) { for (RTCVideoRendererAdapter *adapter in _adapters) {
self.nativeVideoTrack->RemoveRenderer(adapter.nativeVideoRenderer); self.nativeVideoTrack->RemoveSink(adapter.nativeVideoRenderer);
} }
} }
@ -79,7 +79,8 @@
RTCVideoRendererAdapter* adapter = RTCVideoRendererAdapter* adapter =
[[RTCVideoRendererAdapter alloc] initWithNativeRenderer:renderer]; [[RTCVideoRendererAdapter alloc] initWithNativeRenderer:renderer];
[_adapters addObject:adapter]; [_adapters addObject:adapter];
self.nativeVideoTrack->AddRenderer(adapter.nativeVideoRenderer); self.nativeVideoTrack->AddOrUpdateSink(adapter.nativeVideoRenderer,
rtc::VideoSinkWants());
} }
- (void)removeRenderer:(id<RTCVideoRenderer>)renderer { - (void)removeRenderer:(id<RTCVideoRenderer>)renderer {
@ -97,7 +98,7 @@
} }
RTCVideoRendererAdapter *adapterToRemove = RTCVideoRendererAdapter *adapterToRemove =
[_adapters objectAtIndex:indexToRemove]; [_adapters objectAtIndex:indexToRemove];
self.nativeVideoTrack->RemoveRenderer(adapterToRemove.nativeVideoRenderer); self.nativeVideoTrack->RemoveSink(adapterToRemove.nativeVideoRenderer);
[_adapters removeObjectAtIndex:indexToRemove]; [_adapters removeObjectAtIndex:indexToRemove];
} }

View File

@ -44,33 +44,6 @@ class FakeVideoTrackRenderer
rtc::scoped_refptr<VideoTrackInterface> video_track_; rtc::scoped_refptr<VideoTrackInterface> video_track_;
}; };
// Similar class, testing the deprecated AddRenderer/RemoveRenderer methods.
class FakeVideoTrackRendererOld : public VideoRendererInterface {
public:
FakeVideoTrackRendererOld(VideoTrackInterface* video_track)
: video_track_(video_track) {
video_track_->AddRenderer(this);
}
~FakeVideoTrackRendererOld() { video_track_->RemoveRenderer(this); }
virtual void RenderFrame(const cricket::VideoFrame* video_frame) override {
fake_renderer_.RenderFrame(video_frame);
}
int errors() const { return fake_renderer_.errors(); }
int width() const { return fake_renderer_.width(); }
int height() const { return fake_renderer_.height(); }
bool black_frame() const { return fake_renderer_.black_frame(); }
int num_rendered_frames() const {
return fake_renderer_.num_rendered_frames();
}
private:
cricket::FakeVideoRenderer fake_renderer_;
rtc::scoped_refptr<VideoTrackInterface> video_track_;
};
} // namespace webrtc } // namespace webrtc
#endif // WEBRTC_API_TEST_FAKEVIDEOTRACKRENDERER_H_ #endif // WEBRTC_API_TEST_FAKEVIDEOTRACKRENDERER_H_

View File

@ -20,7 +20,6 @@
#include "webrtc/media/engine/webrtcvideoframe.h" #include "webrtc/media/engine/webrtcvideoframe.h"
using webrtc::FakeVideoTrackRenderer; using webrtc::FakeVideoTrackRenderer;
using webrtc::FakeVideoTrackRendererOld;
using webrtc::MediaSourceInterface; using webrtc::MediaSourceInterface;
using webrtc::MediaStreamTrackInterface; using webrtc::MediaStreamTrackInterface;
using webrtc::VideoTrackSource; using webrtc::VideoTrackSource;
@ -74,30 +73,6 @@ TEST_F(VideoTrackTest, RenderVideo) {
EXPECT_EQ(2, renderer_2->num_rendered_frames()); EXPECT_EQ(2, renderer_2->num_rendered_frames());
} }
// Test adding renderers to a video track and render to them by
// providing frames to the source. Uses the old VideoTrack interface
// with AddRenderer and RemoveRenderer.
TEST_F(VideoTrackTest, RenderVideoOld) {
// FakeVideoTrackRenderer register itself to |video_track_|
rtc::scoped_ptr<FakeVideoTrackRendererOld> renderer_1(
new FakeVideoTrackRendererOld(video_track_.get()));
capturer_.CaptureFrame();
EXPECT_EQ(1, renderer_1->num_rendered_frames());
// FakeVideoTrackRenderer register itself to |video_track_|
rtc::scoped_ptr<FakeVideoTrackRenderer> renderer_2(
new FakeVideoTrackRenderer(video_track_.get()));
capturer_.CaptureFrame();
EXPECT_EQ(2, renderer_1->num_rendered_frames());
EXPECT_EQ(1, renderer_2->num_rendered_frames());
renderer_1.reset(nullptr);
capturer_.CaptureFrame();
EXPECT_EQ(2, renderer_2->num_rendered_frames());
}
// Test that disabling the track results in blacked out frames. // Test that disabling the track results in blacked out frames.
TEST_F(VideoTrackTest, DisableTrackBlackout) { TEST_F(VideoTrackTest, DisableTrackBlackout) {
rtc::scoped_ptr<FakeVideoTrackRenderer> renderer( rtc::scoped_ptr<FakeVideoTrackRenderer> renderer(

View File

@ -77,9 +77,8 @@ class GtkMainWnd : public MainWindow {
webrtc::VideoTrackInterface* track_to_render); webrtc::VideoTrackInterface* track_to_render);
virtual ~VideoRenderer(); virtual ~VideoRenderer();
// VideoRendererInterface implementation // VideoSinkInterface implementation
virtual void SetSize(int width, int height); void OnFrame(const cricket::VideoFrame& frame) override;
virtual void OnFrame(const cricket::VideoFrame& frame);
const uint8_t* image() const { return image_.get(); } const uint8_t* image() const { return image_.get(); }
@ -92,6 +91,7 @@ class GtkMainWnd : public MainWindow {
} }
protected: protected:
void SetSize(int width, int height);
rtc::scoped_ptr<uint8_t[]> image_; rtc::scoped_ptr<uint8_t[]> image_;
int width_; int width_;
int height_; int height_;

View File

@ -576,11 +576,11 @@ MainWnd::VideoRenderer::VideoRenderer(
bmi_.bmiHeader.biHeight = -height; bmi_.bmiHeader.biHeight = -height;
bmi_.bmiHeader.biSizeImage = width * height * bmi_.bmiHeader.biSizeImage = width * height *
(bmi_.bmiHeader.biBitCount >> 3); (bmi_.bmiHeader.biBitCount >> 3);
rendered_track_->AddRenderer(this); rendered_track_->AddOrUpdateSink(this, rtc::VideoSinkWants());
} }
MainWnd::VideoRenderer::~VideoRenderer() { MainWnd::VideoRenderer::~VideoRenderer() {
rendered_track_->RemoveRenderer(this); rendered_track_->RemoveSink(this);
::DeleteCriticalSection(&buffer_lock_); ::DeleteCriticalSection(&buffer_lock_);
} }
@ -598,16 +598,14 @@ void MainWnd::VideoRenderer::SetSize(int width, int height) {
image_.reset(new uint8_t[bmi_.bmiHeader.biSizeImage]); image_.reset(new uint8_t[bmi_.bmiHeader.biSizeImage]);
} }
void MainWnd::VideoRenderer::RenderFrame( void MainWnd::VideoRenderer::OnFrame(
const cricket::VideoFrame* video_frame) { const cricket::VideoFrame& video_frame) {
if (!video_frame)
return;
{ {
AutoLock<VideoRenderer> lock(this); AutoLock<VideoRenderer> lock(this);
const cricket::VideoFrame* frame = const cricket::VideoFrame* frame =
video_frame->GetCopyWithRotationApplied(); video_frame.GetCopyWithRotationApplied();
SetSize(static_cast<int>(frame->GetWidth()), SetSize(static_cast<int>(frame->GetWidth()),
static_cast<int>(frame->GetHeight())); static_cast<int>(frame->GetHeight()));

View File

@ -102,7 +102,7 @@ class MainWnd : public MainWindow {
HWND handle() const { return wnd_; } HWND handle() const { return wnd_; }
class VideoRenderer : public webrtc::VideoRendererInterface { class VideoRenderer : public rtc::VideoSinkInterface<cricket::VideoFrame> {
public: public:
VideoRenderer(HWND wnd, int width, int height, VideoRenderer(HWND wnd, int width, int height,
webrtc::VideoTrackInterface* track_to_render); webrtc::VideoTrackInterface* track_to_render);
@ -116,14 +116,15 @@ class MainWnd : public MainWindow {
::LeaveCriticalSection(&buffer_lock_); ::LeaveCriticalSection(&buffer_lock_);
} }
// VideoRendererInterface implementation // VideoSinkInterface implementation
virtual void SetSize(int width, int height); void OnFrame(const cricket::VideoFrame& frame) override;
virtual void RenderFrame(const cricket::VideoFrame* frame);
const BITMAPINFO& bmi() const { return bmi_; } const BITMAPINFO& bmi() const { return bmi_; }
const uint8_t* image() const { return image_.get(); } const uint8_t* image() const { return image_.get(); }
protected: protected:
void SetSize(int width, int height);
enum { enum {
SET_SIZE, SET_SIZE,
RENDER_FRAME, RENDER_FRAME,