Delete class webrtc::VideoRenderer and its header file.
To replace the SmoothsRenderedFrames method, added a corresponding
flag to VideoReceiveStream::Config instead.
BUG=webrtc:5426
Review URL: https://codereview.webrtc.org/1818023002
Cr-Commit-Position: refs/heads/master@{#12102}
diff --git a/webrtc/DEPS b/webrtc/DEPS
index aebafa7..7f15817e 100644
--- a/webrtc/DEPS
+++ b/webrtc/DEPS
@@ -44,7 +44,10 @@
"video_frame\.h": [
"+webrtc/common_video",
],
- "video_renderer\.h": [
+ "video_receive_stream\.h": [
+ "+webrtc/media/base",
+ ],
+ "video_send_stream\.h": [
"+webrtc/media/base",
],
}
diff --git a/webrtc/call/call_perf_tests.cc b/webrtc/call/call_perf_tests.cc
index 7501ada..9aa50d0 100644
--- a/webrtc/call/call_perf_tests.cc
+++ b/webrtc/call/call_perf_tests.cc
@@ -75,7 +75,7 @@
};
class VideoRtcpAndSyncObserver : public test::RtpRtcpObserver,
- public VideoRenderer {
+ public rtc::VideoSinkInterface<VideoFrame> {
static const int kInSyncThresholdMs = 50;
static const int kStartupTimeMs = 2000;
static const int kMinRunTimeMs = 30000;
@@ -346,7 +346,7 @@
int start_time_ms,
int run_time_ms) {
class CaptureNtpTimeObserver : public test::EndToEndTest,
- public VideoRenderer {
+ public rtc::VideoSinkInterface<VideoFrame> {
public:
CaptureNtpTimeObserver(const FakeNetworkPipe::Config& net_config,
int threshold_ms,
diff --git a/webrtc/common_video/incoming_video_stream.cc b/webrtc/common_video/incoming_video_stream.cc
index b0f105c..0e048a6 100644
--- a/webrtc/common_video/incoming_video_stream.cc
+++ b/webrtc/common_video/incoming_video_stream.cc
@@ -28,7 +28,6 @@
#include "webrtc/system_wrappers/include/event_wrapper.h"
#include "webrtc/system_wrappers/include/tick_util.h"
#include "webrtc/system_wrappers/include/trace.h"
-#include "webrtc/video_renderer.h"
namespace webrtc {
diff --git a/webrtc/media/base/videosinkinterface.h b/webrtc/media/base/videosinkinterface.h
index bb41bdb..df7677b 100644
--- a/webrtc/media/base/videosinkinterface.h
+++ b/webrtc/media/base/videosinkinterface.h
@@ -11,6 +11,9 @@
#ifndef WEBRTC_MEDIA_BASE_VIDEOSINKINTERFACE_H_
#define WEBRTC_MEDIA_BASE_VIDEOSINKINTERFACE_H_
+// TODO(nisse): Consider moving this interface (and possibly
+// VideoSourceInterface too) from media/base to common_video, to
+// reduce dependency cycles.
namespace rtc {
template <typename VideoFrameT>
diff --git a/webrtc/media/engine/webrtcvideoengine2.cc b/webrtc/media/engine/webrtcvideoengine2.cc
index f835c12..fbd5961 100644
--- a/webrtc/media/engine/webrtcvideoengine2.cc
+++ b/webrtc/media/engine/webrtcvideoengine2.cc
@@ -1184,10 +1184,12 @@
config.rtp.remb = send_codec_ ? HasRemb(send_codec_->codec) : false;
config.rtp.transport_cc =
send_codec_ ? HasTransportCc(send_codec_->codec) : false;
+ config.disable_prerenderer_smoothing =
+ video_config_.disable_prerenderer_smoothing;
receive_streams_[ssrc] = new WebRtcVideoReceiveStream(
call_, sp, config, external_decoder_factory_, default_stream,
- recv_codecs_, video_config_.disable_prerenderer_smoothing);
+ recv_codecs_);
return true;
}
@@ -2206,8 +2208,7 @@
const webrtc::VideoReceiveStream::Config& config,
WebRtcVideoDecoderFactory* external_decoder_factory,
bool default_stream,
- const std::vector<VideoCodecSettings>& recv_codecs,
- bool disable_prerenderer_smoothing)
+ const std::vector<VideoCodecSettings>& recv_codecs)
: call_(call),
ssrcs_(sp.ssrcs),
ssrc_groups_(sp.ssrc_groups),
@@ -2215,7 +2216,6 @@
default_stream_(default_stream),
config_(config),
external_decoder_factory_(external_decoder_factory),
- disable_prerenderer_smoothing_(disable_prerenderer_smoothing),
sink_(NULL),
last_width_(-1),
last_height_(-1),
@@ -2434,11 +2434,6 @@
sink_->OnFrame(render_frame);
}
-bool WebRtcVideoChannel2::WebRtcVideoReceiveStream::SmoothsRenderedFrames()
- const {
- return disable_prerenderer_smoothing_;
-}
-
bool WebRtcVideoChannel2::WebRtcVideoReceiveStream::IsDefaultStream() const {
return default_stream_;
}
diff --git a/webrtc/media/engine/webrtcvideoengine2.h b/webrtc/media/engine/webrtcvideoengine2.h
index 3668a18..ff86245 100644
--- a/webrtc/media/engine/webrtcvideoengine2.h
+++ b/webrtc/media/engine/webrtcvideoengine2.h
@@ -31,7 +31,6 @@
#include "webrtc/transport.h"
#include "webrtc/video_frame.h"
#include "webrtc/video_receive_stream.h"
-#include "webrtc/video_renderer.h"
#include "webrtc/video_send_stream.h"
namespace webrtc {
@@ -396,8 +395,10 @@
// Wrapper for the receiver part, contains configs etc. that are needed to
// reconstruct the underlying VideoReceiveStream. Also serves as a wrapper
- // between webrtc::VideoRenderer and cricket::VideoRenderer.
- class WebRtcVideoReceiveStream : public webrtc::VideoRenderer {
+ // between rtc::VideoSinkInterface<webrtc::VideoFrame> and
+ // rtc::VideoSinkInterface<cricket::VideoFrame>.
+ class WebRtcVideoReceiveStream
+ : public rtc::VideoSinkInterface<webrtc::VideoFrame> {
public:
WebRtcVideoReceiveStream(
webrtc::Call* call,
@@ -405,8 +406,7 @@
const webrtc::VideoReceiveStream::Config& config,
WebRtcVideoDecoderFactory* external_decoder_factory,
bool default_stream,
- const std::vector<VideoCodecSettings>& recv_codecs,
- bool disable_prerenderer_smoothing);
+ const std::vector<VideoCodecSettings>& recv_codecs);
~WebRtcVideoReceiveStream();
const std::vector<uint32_t>& GetSsrcs() const;
@@ -420,7 +420,6 @@
void SetRecvParameters(const ChangedRecvParameters& recv_params);
void OnFrame(const webrtc::VideoFrame& frame) override;
- bool SmoothsRenderedFrames() const override;
bool IsDefaultStream() const;
void SetSink(rtc::VideoSinkInterface<cricket::VideoFrame>* sink);
@@ -461,8 +460,6 @@
WebRtcVideoDecoderFactory* const external_decoder_factory_;
std::vector<AllocatedDecoder> allocated_decoders_;
- const bool disable_prerenderer_smoothing_;
-
rtc::CriticalSection sink_lock_;
rtc::VideoSinkInterface<cricket::VideoFrame>* sink_ GUARDED_BY(sink_lock_);
int last_width_ GUARDED_BY(sink_lock_);
diff --git a/webrtc/test/DEPS b/webrtc/test/DEPS
index 27c0e74..e8ed18b 100644
--- a/webrtc/test/DEPS
+++ b/webrtc/test/DEPS
@@ -2,6 +2,7 @@
"+webrtc/base",
"+webrtc/call",
"+webrtc/common_video",
+ "+webrtc/media/base",
"+webrtc/modules/audio_coding",
"+webrtc/modules/audio_device",
"+webrtc/modules/media_file",
diff --git a/webrtc/test/video_renderer.h b/webrtc/test/video_renderer.h
index 3739522..49d2fa3 100644
--- a/webrtc/test/video_renderer.h
+++ b/webrtc/test/video_renderer.h
@@ -12,11 +12,13 @@
#include <stddef.h>
-#include "webrtc/video_renderer.h"
+#include "webrtc/media/base/videosinkinterface.h"
namespace webrtc {
+class VideoFrame;
+
namespace test {
-class VideoRenderer : public webrtc::VideoRenderer {
+class VideoRenderer : public rtc::VideoSinkInterface<VideoFrame> {
public:
// Creates a platform-specific renderer if possible, or a null implementation
// if failing.
diff --git a/webrtc/video/end_to_end_tests.cc b/webrtc/video/end_to_end_tests.cc
index e9e330f..1799e98 100644
--- a/webrtc/video/end_to_end_tests.cc
+++ b/webrtc/video/end_to_end_tests.cc
@@ -159,7 +159,7 @@
// frames in the queue.
static const int kDelayRenderCallbackMs = 1000;
- class Renderer : public VideoRenderer {
+ class Renderer : public rtc::VideoSinkInterface<VideoFrame> {
public:
Renderer() : event_(false, false) {}
@@ -222,7 +222,7 @@
}
TEST_F(EndToEndTest, TransmitsFirstFrame) {
- class Renderer : public VideoRenderer {
+ class Renderer : public rtc::VideoSinkInterface<VideoFrame> {
public:
Renderer() : event_(false, false) {}
@@ -266,7 +266,8 @@
}
TEST_F(EndToEndTest, SendsAndReceivesVP9) {
- class VP9Observer : public test::EndToEndTest, public VideoRenderer {
+ class VP9Observer : public test::EndToEndTest,
+ public rtc::VideoSinkInterface<VideoFrame> {
public:
VP9Observer()
: EndToEndTest(2 * kDefaultTimeoutMs),
@@ -317,7 +318,8 @@
#if defined(WEBRTC_END_TO_END_H264_TESTS)
TEST_F(EndToEndTest, SendsAndReceivesH264) {
- class H264Observer : public test::EndToEndTest, public VideoRenderer {
+ class H264Observer : public test::EndToEndTest,
+ public rtc::VideoSinkInterface<VideoFrame> {
public:
H264Observer()
: EndToEndTest(2 * kDefaultTimeoutMs),
@@ -488,7 +490,8 @@
}
TEST_F(EndToEndTest, CanReceiveFec) {
- class FecRenderObserver : public test::EndToEndTest, public VideoRenderer {
+ class FecRenderObserver : public test::EndToEndTest,
+ public rtc::VideoSinkInterface<VideoFrame> {
public:
FecRenderObserver()
: EndToEndTest(kDefaultTimeoutMs), state_(kFirstPacket) {}
@@ -864,7 +867,7 @@
static const int kWidth = 320;
static const int kHeight = 240;
- class Renderer : public VideoRenderer {
+ class Renderer : public rtc::VideoSinkInterface<VideoFrame> {
public:
Renderer() : event_(false, false) {}
@@ -964,7 +967,8 @@
void EndToEndTest::ReceivesPliAndRecovers(int rtp_history_ms) {
static const int kPacketsToDrop = 1;
- class PliObserver : public test::EndToEndTest, public VideoRenderer {
+ class PliObserver : public test::EndToEndTest,
+ public rtc::VideoSinkInterface<VideoFrame> {
public:
explicit PliObserver(int rtp_history_ms)
: EndToEndTest(kLongTimeoutMs),
@@ -1325,7 +1329,7 @@
// Each renderer verifies that it receives the expected resolution, and as soon
// as every renderer has received a frame, the test finishes.
TEST_F(EndToEndTest, SendsAndReceivesMultipleStreams) {
- class VideoOutputObserver : public VideoRenderer {
+ class VideoOutputObserver : public rtc::VideoSinkInterface<VideoFrame> {
public:
VideoOutputObserver(const MultiStreamTest::CodecSettings& settings,
uint32_t ssrc,
diff --git a/webrtc/video/receive_statistics_proxy.h b/webrtc/video/receive_statistics_proxy.h
index 04bfd7b..10a1be7 100644
--- a/webrtc/video/receive_statistics_proxy.h
+++ b/webrtc/video/receive_statistics_proxy.h
@@ -24,7 +24,6 @@
#include "webrtc/video/report_block_stats.h"
#include "webrtc/video/vie_channel.h"
#include "webrtc/video_receive_stream.h"
-#include "webrtc/video_renderer.h"
namespace webrtc {
diff --git a/webrtc/video/replay.cc b/webrtc/video/replay.cc
index 3bfa7ff..affd033 100644
--- a/webrtc/video/replay.cc
+++ b/webrtc/video/replay.cc
@@ -136,9 +136,10 @@
static const uint32_t kReceiverLocalSsrc = 0x123456;
-class FileRenderPassthrough : public VideoRenderer {
+class FileRenderPassthrough : public rtc::VideoSinkInterface<VideoFrame> {
public:
- FileRenderPassthrough(const std::string& basename, VideoRenderer* renderer)
+ FileRenderPassthrough(const std::string& basename,
+ rtc::VideoSinkInterface<VideoFrame>* renderer)
: basename_(basename),
renderer_(renderer),
file_(nullptr),
@@ -182,7 +183,7 @@
}
const std::string basename_;
- VideoRenderer* const renderer_;
+ rtc::VideoSinkInterface<VideoFrame>* const renderer_;
FILE* file_;
size_t count_;
int last_width_;
diff --git a/webrtc/video/video_capture_input.cc b/webrtc/video/video_capture_input.cc
index e355a74..16263cc 100644
--- a/webrtc/video/video_capture_input.cc
+++ b/webrtc/video/video_capture_input.cc
@@ -24,10 +24,11 @@
namespace webrtc {
namespace internal {
-VideoCaptureInput::VideoCaptureInput(rtc::Event* capture_event,
- VideoRenderer* local_renderer,
- SendStatisticsProxy* stats_proxy,
- OveruseFrameDetector* overuse_detector)
+VideoCaptureInput::VideoCaptureInput(
+ rtc::Event* capture_event,
+ rtc::VideoSinkInterface<VideoFrame>* local_renderer,
+ SendStatisticsProxy* stats_proxy,
+ OveruseFrameDetector* overuse_detector)
: local_renderer_(local_renderer),
stats_proxy_(stats_proxy),
capture_event_(capture_event),
diff --git a/webrtc/video/video_capture_input.h b/webrtc/video/video_capture_input.h
index 90d7a31..a47e877 100644
--- a/webrtc/video/video_capture_input.h
+++ b/webrtc/video/video_capture_input.h
@@ -32,13 +32,12 @@
class Config;
class OveruseFrameDetector;
class SendStatisticsProxy;
-class VideoRenderer;
namespace internal {
class VideoCaptureInput : public webrtc::VideoCaptureInput {
public:
VideoCaptureInput(rtc::Event* capture_event,
- VideoRenderer* local_renderer,
+ rtc::VideoSinkInterface<VideoFrame>* local_renderer,
SendStatisticsProxy* send_stats_proxy,
OveruseFrameDetector* overuse_detector);
~VideoCaptureInput();
@@ -50,7 +49,7 @@
private:
rtc::CriticalSection crit_;
- VideoRenderer* const local_renderer_;
+ rtc::VideoSinkInterface<VideoFrame>* const local_renderer_;
SendStatisticsProxy* const stats_proxy_;
rtc::Event* const capture_event_;
diff --git a/webrtc/video/video_quality_test.cc b/webrtc/video/video_quality_test.cc
index b2c3824..9e16448 100644
--- a/webrtc/video/video_quality_test.cc
+++ b/webrtc/video/video_quality_test.cc
@@ -43,7 +43,7 @@
class VideoAnalyzer : public PacketReceiver,
public Transport,
- public VideoRenderer,
+ public rtc::VideoSinkInterface<VideoFrame>,
public VideoCaptureInput,
public EncodedFrameObserver {
public:
diff --git a/webrtc/video/video_receive_stream.cc b/webrtc/video/video_receive_stream.cc
index cb2515b..9778296 100644
--- a/webrtc/video/video_receive_stream.cc
+++ b/webrtc/video/video_receive_stream.cc
@@ -164,9 +164,7 @@
nullptr,
this,
this)),
- incoming_video_stream_(
- 0,
- config.renderer ? config.renderer->SmoothsRenderedFrames() : false),
+ incoming_video_stream_(0, config.disable_prerenderer_smoothing),
stats_proxy_(config_, clock_),
vie_channel_(&transport_adapter_,
process_thread,
diff --git a/webrtc/video_receive_stream.h b/webrtc/video_receive_stream.h
index 249523c..109c2aa 100644
--- a/webrtc/video_receive_stream.h
+++ b/webrtc/video_receive_stream.h
@@ -21,7 +21,7 @@
#include "webrtc/frame_callback.h"
#include "webrtc/stream.h"
#include "webrtc/transport.h"
-#include "webrtc/video_renderer.h"
+#include "webrtc/media/base/videosinkinterface.h"
namespace webrtc {
@@ -145,13 +145,17 @@
// VideoRenderer will be called for each decoded frame. 'nullptr' disables
// rendering of this stream.
- VideoRenderer* renderer = nullptr;
+ rtc::VideoSinkInterface<VideoFrame>* renderer = nullptr;
// Expected delay needed by the renderer, i.e. the frame will be delivered
// this many milliseconds, if possible, earlier than the ideal render time.
// Only valid if 'renderer' is set.
int render_delay_ms = 10;
+ // If set, pass frames on to the renderer as soon as they are
+ // available.
+ bool disable_prerenderer_smoothing = false;
+
// Identifier for an A/V synchronization group. Empty string to disable.
// TODO(pbos): Synchronize streams in a sync group, not just video streams
// to one of the audio streams.
diff --git a/webrtc/video_renderer.h b/webrtc/video_renderer.h
deleted file mode 100644
index 85c4ac5..0000000
--- a/webrtc/video_renderer.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * 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.
- */
-
-#ifndef WEBRTC_VIDEO_RENDERER_H_
-#define WEBRTC_VIDEO_RENDERER_H_
-
-#include "webrtc/media/base/videosinkinterface.h"
-
-namespace webrtc {
-
-class VideoFrame;
-
-class VideoRenderer : public rtc::VideoSinkInterface<VideoFrame> {
- public:
- // This function returns true if WebRTC should not delay frames for
- // smoothness. In general, this case means the renderer can schedule frames to
- // optimize smoothness.
- virtual bool SmoothsRenderedFrames() const { return false; }
-
- protected:
- virtual ~VideoRenderer() {}
-};
-} // namespace webrtc
-
-#endif // WEBRTC_VIDEO_RENDERER_H_
diff --git a/webrtc/video_send_stream.h b/webrtc/video_send_stream.h
index c58775f..7815acf 100644
--- a/webrtc/video_send_stream.h
+++ b/webrtc/video_send_stream.h
@@ -19,7 +19,7 @@
#include "webrtc/frame_callback.h"
#include "webrtc/stream.h"
#include "webrtc/transport.h"
-#include "webrtc/video_renderer.h"
+#include "webrtc/media/base/videosinkinterface.h"
namespace webrtc {
@@ -149,7 +149,7 @@
// Renderer for local preview. The local renderer will be called even if
// sending hasn't started. 'nullptr' disables local rendering.
- VideoRenderer* local_renderer = nullptr;
+ rtc::VideoSinkInterface<VideoFrame>* local_renderer = nullptr;
// Expected delay needed by the renderer, i.e. the frame will be delivered
// this many milliseconds, if possible, earlier than expected render time.
diff --git a/webrtc/webrtc.gyp b/webrtc/webrtc.gyp
index 5bcb072..8c10f02 100644
--- a/webrtc/webrtc.gyp
+++ b/webrtc/webrtc.gyp
@@ -116,7 +116,6 @@
'stream.h',
'transport.h',
'video_receive_stream.h',
- 'video_renderer.h',
'video_send_stream.h',
'<@(webrtc_audio_sources)',