diff options
author | guoweis@webrtc.org <guoweis@webrtc.org> | 2015-03-10 02:42:50 +0000 |
---|---|---|
committer | guoweis@webrtc.org <guoweis@webrtc.org> | 2015-03-10 02:43:40 +0000 |
commit | 0ad48935fc5b92be6e10924a9ee3b0dc39c79104 (patch) | |
tree | 7abf3faf3faaf9c0f880170ab74053b257350cb2 /talk/app/webrtc/videotrackrenderers.cc | |
parent | dad85aa53bb3e93115e1e1c7ac5b5af992c4bef3 (diff) | |
download | webrtc-0ad48935fc5b92be6e10924a9ee3b0dc39c79104.tar.gz |
Add concept of whether video renderer supports rotation.
Rotation is best done when rendered in GPU, added the shader code which rotates the frame. For renderers which don't support rotation, the rotation will be done before sending down the frame to render. By default, assume renderer can't do rotation.
BUG=4145
R=glaznev@webrtc.org, pthatcher@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/43569004
Cr-Commit-Position: refs/heads/master@{#8660}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8660 4adac7df-926f-26a2-2b94-8c16560cd09d
Diffstat (limited to 'talk/app/webrtc/videotrackrenderers.cc')
-rw-r--r-- | talk/app/webrtc/videotrackrenderers.cc | 25 |
1 files changed, 10 insertions, 15 deletions
diff --git a/talk/app/webrtc/videotrackrenderers.cc b/talk/app/webrtc/videotrackrenderers.cc index 03f080dbf8..08bf05acb7 100644 --- a/talk/app/webrtc/videotrackrenderers.cc +++ b/talk/app/webrtc/videotrackrenderers.cc @@ -26,19 +26,21 @@ */ #include "talk/app/webrtc/videotrackrenderers.h" +#include "talk/media/base/videoframe.h" namespace webrtc { VideoTrackRenderers::VideoTrackRenderers() - : width_(0), - height_(0), - enabled_(true) { + : enabled_(true) { } VideoTrackRenderers::~VideoTrackRenderers() { } void VideoTrackRenderers::AddRenderer(VideoRendererInterface* renderer) { + if (!renderer) { + return; + } rtc::CritScope cs(&critical_section_); std::vector<RenderObserver>::iterator it = renderers_.begin(); for (; it != renderers_.end(); ++it) { @@ -65,14 +67,6 @@ void VideoTrackRenderers::SetEnabled(bool enable) { } bool VideoTrackRenderers::SetSize(int width, int height, int reserved) { - rtc::CritScope cs(&critical_section_); - width_ = width; - height_ = height; - std::vector<RenderObserver>::iterator it = renderers_.begin(); - for (; it != renderers_.end(); ++it) { - it->renderer_->SetSize(width, height); - it->size_set_ = true; - } return true; } @@ -81,13 +75,14 @@ bool VideoTrackRenderers::RenderFrame(const cricket::VideoFrame* frame) { if (!enabled_) { return true; } + std::vector<RenderObserver>::iterator it = renderers_.begin(); for (; it != renderers_.end(); ++it) { - if (!it->size_set_) { - it->renderer_->SetSize(width_, height_); - it->size_set_ = true; + if (it->can_apply_rotation_) { + it->renderer_->RenderFrame(frame); + } else { + it->renderer_->RenderFrame(frame->GetCopyWithRotationApplied()); } - it->renderer_->RenderFrame(frame); } return true; } |