diff --git a/webrtc/video/video_receive_stream.cc b/webrtc/video/video_receive_stream.cc index cee820a7da..770fc96fc3 100644 --- a/webrtc/video/video_receive_stream.cc +++ b/webrtc/video/video_receive_stream.cc @@ -181,7 +181,7 @@ VideoReceiveStream::VideoReceiveStream( rtp_stream_receiver_.IsFecEnabled(), &stats_proxy_, &incoming_video_stream_, - this), + config.pre_render_callback), vie_sync_(&video_receiver_) { LOG(LS_INFO) << "VideoReceiveStream: " << config_.ToString(); @@ -290,17 +290,9 @@ VideoReceiveStream::Stats VideoReceiveStream::GetStats() const { return stats_proxy_.GetStats(); } -void VideoReceiveStream::FrameCallback(VideoFrame* video_frame) { +void VideoReceiveStream::OnFrame(const VideoFrame& video_frame) { stats_proxy_.OnDecodedFrame(); - // Post processing is not supported if the frame is backed by a texture. - if (!video_frame->video_frame_buffer()->native_handle()) { - if (config_.pre_render_callback) - config_.pre_render_callback->FrameCallback(video_frame); - } -} - -void VideoReceiveStream::OnFrame(const VideoFrame& video_frame) { int64_t sync_offset_ms; if (vie_sync_.GetStreamSyncOffsetInMs(video_frame, &sync_offset_ms)) stats_proxy_.OnSyncOffsetUpdated(sync_offset_ms); diff --git a/webrtc/video/video_receive_stream.h b/webrtc/video/video_receive_stream.h index 0ea5385b31..f531a3213f 100644 --- a/webrtc/video/video_receive_stream.h +++ b/webrtc/video/video_receive_stream.h @@ -38,7 +38,6 @@ class VieRemb; namespace internal { class VideoReceiveStream : public webrtc::VideoReceiveStream, - public I420FrameCallback, public rtc::VideoSinkInterface, public EncodedImageCallback, public NackSender, @@ -65,9 +64,6 @@ class VideoReceiveStream : public webrtc::VideoReceiveStream, webrtc::VideoReceiveStream::Stats GetStats() const override; - // Overrides I420FrameCallback. - void FrameCallback(VideoFrame* video_frame) override; - // Overrides rtc::VideoSinkInterface. void OnFrame(const VideoFrame& video_frame) override; diff --git a/webrtc/video/video_stream_decoder.cc b/webrtc/video/video_stream_decoder.cc index 5aab7b246c..4caa9dea03 100644 --- a/webrtc/video/video_stream_decoder.cc +++ b/webrtc/video/video_stream_decoder.cc @@ -77,8 +77,12 @@ VideoStreamDecoder::~VideoStreamDecoder() {} // thread may have held the lock when calling VideoDecoder::Decode, Reset, or // Release. Acquiring the same lock in the path of decode callback can deadlock. int32_t VideoStreamDecoder::FrameToRender(VideoFrame& video_frame) { // NOLINT - if (pre_render_callback_) - pre_render_callback_->FrameCallback(&video_frame); + if (pre_render_callback_) { + // Post processing is not supported if the frame is backed by a texture. + if (!video_frame.video_frame_buffer()->native_handle()) { + pre_render_callback_->FrameCallback(&video_frame); + } + } incoming_video_stream_->OnFrame(video_frame); return 0; diff --git a/webrtc/video_receive_stream.h b/webrtc/video_receive_stream.h index 167df47dff..f8e9888eda 100644 --- a/webrtc/video_receive_stream.h +++ b/webrtc/video_receive_stream.h @@ -168,6 +168,9 @@ class VideoReceiveStream { // Called for each decoded frame. E.g. used when adding effects to the // decoded // stream. 'nullptr' disables the callback. + // TODO(tommi): This seems to be only used by a test or two. Consider + // removing it (and use an appropriate alternative in the tests) as well + // as the associated code in VideoStreamDecoder. I420FrameCallback* pre_render_callback = nullptr; // Target delay in milliseconds. A positive value indicates this stream is