Implement I420FrameCallbacks in Call. BUG=2425 R=mflodman@webrtc.org Review URL: https://webrtc-codereview.appspot.com/2393004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@5005 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/video_engine/internal/video_receive_stream.cc b/webrtc/video_engine/internal/video_receive_stream.cc index c92cc8d..a6a5875 100644 --- a/webrtc/video_engine/internal/video_receive_stream.cc +++ b/webrtc/video_engine/internal/video_receive_stream.cc
@@ -19,6 +19,7 @@ #include "webrtc/video_engine/include/vie_capture.h" #include "webrtc/video_engine/include/vie_codec.h" #include "webrtc/video_engine/include/vie_external_codec.h" +#include "webrtc/video_engine/include/vie_image_process.h" #include "webrtc/video_engine/include/vie_network.h" #include "webrtc/video_engine/include/vie_render.h" #include "webrtc/video_engine/include/vie_rtp_rtcp.h" @@ -86,21 +87,28 @@ render_ = webrtc::ViERender::GetInterface(video_engine); assert(render_ != NULL); - if (render_->AddRenderer(channel_, kVideoI420, this) != 0) { - abort(); - } + render_->AddRenderer(channel_, kVideoI420, this); + + image_process_ = ViEImageProcess::GetInterface(video_engine); + image_process_->RegisterPreRenderCallback(channel_, + config_.pre_render_callback); clock_ = Clock::GetRealTimeClock(); } VideoReceiveStream::~VideoReceiveStream() { + image_process_->DeRegisterPreEncodeCallback(channel_); + render_->RemoveRenderer(channel_); + for (size_t i = 0; i < config_.external_decoders.size(); ++i) { external_codec_->DeRegisterExternalReceiveCodec( channel_, config_.external_decoders[i].payload_type); } + network_->DeregisterSendTransport(channel_); + image_process_->Release(); video_engine_base_->Release(); external_codec_->Release(); codec_->Release(); @@ -170,15 +178,8 @@ video_frame.set_timestamp(timestamp); video_frame.set_render_time_ms(render_time); - if (config_.post_decode_callback != NULL) { - config_.post_decode_callback->FrameCallback(&video_frame); - } - - if (config_.renderer != NULL) { - // TODO(pbos): Add timing to RenderFrame call - config_.renderer->RenderFrame(video_frame, - render_time - clock_->TimeInMilliseconds()); - } + config_.renderer->RenderFrame(video_frame, + render_time - clock_->TimeInMilliseconds()); return 0; }
diff --git a/webrtc/video_engine/internal/video_receive_stream.h b/webrtc/video_engine/internal/video_receive_stream.h index b6b5319..b5d095c 100644 --- a/webrtc/video_engine/internal/video_receive_stream.h +++ b/webrtc/video_engine/internal/video_receive_stream.h
@@ -25,6 +25,7 @@ class ViEBase; class ViECodec; class ViEExternalCodec; +class ViEImageProcess; class ViENetwork; class ViERender; class ViERTP_RTCP; @@ -66,6 +67,7 @@ ViENetwork* network_; ViERender* render_; ViERTP_RTCP* rtp_rtcp_; + ViEImageProcess* image_process_; int channel_;
diff --git a/webrtc/video_engine/internal/video_send_stream.cc b/webrtc/video_engine/internal/video_send_stream.cc index 55921c2..d238b95 100644 --- a/webrtc/video_engine/internal/video_send_stream.cc +++ b/webrtc/video_engine/internal/video_send_stream.cc
@@ -19,6 +19,7 @@ #include "webrtc/video_engine/include/vie_capture.h" #include "webrtc/video_engine/include/vie_codec.h" #include "webrtc/video_engine/include/vie_external_codec.h" +#include "webrtc/video_engine/include/vie_image_process.h" #include "webrtc/video_engine/include/vie_network.h" #include "webrtc/video_engine/include/vie_rtp_rtcp.h" #include "webrtc/video_engine/new_include/video_send_stream.h" @@ -190,11 +191,16 @@ video_engine_base_->RegisterCpuOveruseObserver(channel_, overuse_observer_.get()); } + + image_process_ = ViEImageProcess::GetInterface(video_engine); + image_process_->RegisterPreEncodeCallback(channel_, + config_.pre_encode_callback); } VideoSendStream::~VideoSendStream() { + image_process_->DeRegisterPreEncodeCallback(channel_); + network_->DeregisterSendTransport(channel_); - video_engine_base_->DeleteChannel(channel_); capture_->DisconnectCaptureDevice(channel_); capture_->ReleaseCaptureDevice(capture_id_); @@ -204,6 +210,9 @@ config_.codec.plType); } + video_engine_base_->DeleteChannel(channel_); + + image_process_->Release(); video_engine_base_->Release(); capture_->Release(); codec_->Release(); @@ -220,10 +229,6 @@ I420VideoFrame frame_copy; frame_copy.CopyFrame(frame); - if (config_.pre_encode_callback != NULL) { - config_.pre_encode_callback->FrameCallback(&frame_copy); - } - ViEVideoFrameI420 vf; // TODO(pbos): This represents a memcpy step and is only required because
diff --git a/webrtc/video_engine/internal/video_send_stream.h b/webrtc/video_engine/internal/video_send_stream.h index 1241b48..27027ef 100644 --- a/webrtc/video_engine/internal/video_send_stream.h +++ b/webrtc/video_engine/internal/video_send_stream.h
@@ -26,6 +26,7 @@ class ViECodec; class ViEExternalCapture; class ViEExternalCodec; +class ViEImageProcess; class ViENetwork; class ViERTP_RTCP; @@ -72,6 +73,7 @@ ViEExternalCodec* external_codec_; ViENetwork* network_; ViERTP_RTCP* rtp_rtcp_; + ViEImageProcess* image_process_; int channel_; int capture_id_;