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/test | |
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/test')
-rw-r--r-- | talk/app/webrtc/test/fakevideotrackrenderer.h | 37 |
1 files changed, 29 insertions, 8 deletions
diff --git a/talk/app/webrtc/test/fakevideotrackrenderer.h b/talk/app/webrtc/test/fakevideotrackrenderer.h index d636a56808..8bd98fa8a9 100644 --- a/talk/app/webrtc/test/fakevideotrackrenderer.h +++ b/talk/app/webrtc/test/fakevideotrackrenderer.h @@ -35,34 +35,55 @@ namespace webrtc { class FakeVideoTrackRenderer : public VideoRendererInterface { public: - explicit FakeVideoTrackRenderer(VideoTrackInterface* video_track) - : video_track_(video_track) { + FakeVideoTrackRenderer(VideoTrackInterface* video_track) + : video_track_(video_track), + can_apply_rotation_(true), + last_frame_(NULL) { + video_track_->AddRenderer(this); + } + FakeVideoTrackRenderer(VideoTrackInterface* video_track, + bool can_apply_rotation) + : video_track_(video_track), + can_apply_rotation_(can_apply_rotation), + last_frame_(NULL) { video_track_->AddRenderer(this); } ~FakeVideoTrackRenderer() { video_track_->RemoveRenderer(this); } - // Implements VideoRendererInterface - virtual void SetSize(int width, int height) { - fake_renderer_.SetSize(width, height, 0); - } + virtual void RenderFrame(const cricket::VideoFrame* video_frame) override { + last_frame_ = const_cast<cricket::VideoFrame*>(video_frame); + + const cricket::VideoFrame* frame = + can_apply_rotation_ ? video_frame + : video_frame->GetCopyWithRotationApplied(); + + if (!fake_renderer_.SetSize(static_cast<int>(frame->GetWidth()), + static_cast<int>(frame->GetHeight()), 0)) { + return; + } - virtual void RenderFrame(const cricket::VideoFrame* frame) { fake_renderer_.RenderFrame(frame); } + virtual bool CanApplyRotation() override { return can_apply_rotation_; } + int errors() const { return fake_renderer_.errors(); } int width() const { return fake_renderer_.width(); } int height() const { return fake_renderer_.height(); } - int num_set_sizes() const { return fake_renderer_.num_set_sizes(); } int num_rendered_frames() const { return fake_renderer_.num_rendered_frames(); } + const cricket::VideoFrame* last_frame() const { return last_frame_; } private: cricket::FakeVideoRenderer fake_renderer_; rtc::scoped_refptr<VideoTrackInterface> video_track_; + bool can_apply_rotation_; + + // Weak reference for frame pointer comparison only. + cricket::VideoFrame* last_frame_; }; } // namespace webrtc |