Revert "Remove VideoSendStreamInput::PutFrame." This reverts r6229. Test WebRtcVideoChannel2BaseTest.MuteStream fails after r6229. BUG= R=stefan@webrtc.org TBR=mflodman@webrtc.org Review URL: https://webrtc-codereview.appspot.com/19529005 git-svn-id: http://webrtc.googlecode.com/svn/trunk@6230 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/video/full_stack.cc b/webrtc/video/full_stack.cc index cb97cd8..cb0ba55 100644 --- a/webrtc/video/full_stack.cc +++ b/webrtc/video/full_stack.cc
@@ -125,6 +125,10 @@ return receiver_->DeliverPacket(packet, length); } + virtual void PutFrame(const I420VideoFrame& video_frame) OVERRIDE { + ADD_FAILURE() << "PutFrame() should not have been called in this test."; + } + virtual void SwapFrame(I420VideoFrame* video_frame) OVERRIDE { I420VideoFrame* copy = NULL; {
diff --git a/webrtc/video/video_send_stream.cc b/webrtc/video/video_send_stream.cc index ced0b69..7cdb3533 100644 --- a/webrtc/video/video_send_stream.cc +++ b/webrtc/video/video_send_stream.cc
@@ -280,12 +280,24 @@ rtp_rtcp_->Release(); } +void VideoSendStream::PutFrame(const I420VideoFrame& frame) { + input_frame_.CopyFrame(frame); + SwapFrame(&input_frame_); +} + void VideoSendStream::SwapFrame(I420VideoFrame* frame) { + // TODO(pbos): Warn if frame is "too far" into the future, or too old. This + // would help detect if frame's being used without NTP. + // TO REVIEWER: Is there any good check for this? Should it be + // skipped? + if (frame != &input_frame_) + input_frame_.SwapFrame(frame); + // TODO(pbos): Local rendering should not be done on the capture thread. if (config_.local_renderer != NULL) - config_.local_renderer->RenderFrame(*frame, 0); + config_.local_renderer->RenderFrame(input_frame_, 0); - external_capture_->SwapFrame(frame); + external_capture_->SwapFrame(&input_frame_); } VideoSendStreamInput* VideoSendStream::Input() { return this; }
diff --git a/webrtc/video/video_send_stream.h b/webrtc/video/video_send_stream.h index a7e2267..b8f5661 100644 --- a/webrtc/video/video_send_stream.h +++ b/webrtc/video/video_send_stream.h
@@ -57,6 +57,7 @@ bool DeliverRtcp(const uint8_t* packet, size_t length); // From VideoSendStreamInput. + virtual void PutFrame(const I420VideoFrame& frame) OVERRIDE; virtual void SwapFrame(I420VideoFrame* frame) OVERRIDE; // From webrtc::VideoSendStream. @@ -68,6 +69,7 @@ virtual std::string GetCName() OVERRIDE; private: + I420VideoFrame input_frame_; TransportAdapter transport_adapter_; EncodedFrameCallbackAdapter encoded_frame_proxy_; scoped_ptr<CriticalSectionWrapper> codec_lock_;
diff --git a/webrtc/video_send_stream.h b/webrtc/video_send_stream.h index 87c0dac..1a94121 100644 --- a/webrtc/video_send_stream.h +++ b/webrtc/video_send_stream.h
@@ -29,6 +29,7 @@ // These methods do not lock internally and must be called sequentially. // If your application switches input sources synchronization must be done // externally to make sure that any old frames are not delivered concurrently. + virtual void PutFrame(const I420VideoFrame& video_frame) = 0; virtual void SwapFrame(I420VideoFrame* video_frame) = 0; protected: