aboutsummaryrefslogtreecommitdiff
path: root/talk/app/webrtc/test
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/test
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/test')
-rw-r--r--talk/app/webrtc/test/fakevideotrackrenderer.h37
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