aboutsummaryrefslogtreecommitdiff
path: root/talk/app/webrtc/videotrackrenderers.cc
diff options
context:
space:
mode:
authorguoweis@webrtc.org <guoweis@webrtc.org>2015-03-10 02:42:50 +0000
committerguoweis@webrtc.org <guoweis@webrtc.org>2015-03-10 02:43:40 +0000
commit0ad48935fc5b92be6e10924a9ee3b0dc39c79104 (patch)
tree7abf3faf3faaf9c0f880170ab74053b257350cb2 /talk/app/webrtc/videotrackrenderers.cc
parentdad85aa53bb3e93115e1e1c7ac5b5af992c4bef3 (diff)
downloadwebrtc-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.cc25
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;
}