1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 23345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Use of this source code is governed by a BSD-style license that can be 33345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef WEBKIT_GLUE_MEDIA_WEB_VIDEO_RENDERER_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define WEBKIT_GLUE_MEDIA_WEB_VIDEO_RENDERER_H_ 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 83345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "media/base/video_frame.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "media/filters/video_renderer_base.h" 10513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "webkit/glue/webmediaplayer_impl.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace webkit_glue { 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// A specialized version of a VideoRenderer designed to be used inside WebKit. 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass WebVideoRenderer : public media::VideoRendererBase { 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WebVideoRenderer() : media::VideoRendererBase() {} 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ~WebVideoRenderer() {} 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 20513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Saves the reference to WebMediaPlayerImpl::Proxy. 21513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void SetWebMediaPlayerImplProxy(WebMediaPlayerImpl::Proxy* proxy) = 0; 22513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This method is called with the same rect as the Paint() method and could 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // be used by future implementations to implement an improved color space + 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // scale code on a separate thread. Since we always do the stretch on the 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // same thread as the Paint method, we just ignore the call for now. 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Method called on the render thread. 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetRect(const gfx::Rect& rect) = 0; 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Paint the current front frame on the |canvas| stretching it to fit the 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // |dest_rect|. 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Method called on the render thread. 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void Paint(SkCanvas* canvas, 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const gfx::Rect& dest_rect) = 0; 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Clients of this class (painter/compositor) should use GetCurrentFrame() 393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // obtain ownership of VideoFrame, it should always relinquish the ownership 403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // by use PutCurrentFrame(). Current frame is not guaranteed to be non-NULL. 413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // It expects clients to use color-fill the background if current frame 423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // is NULL. This could happen when before pipeline is pre-rolled or during 433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // pause/flush/seek. 443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void GetCurrentFrame(scoped_refptr<media::VideoFrame>* frame_out) {} 453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void PutCurrentFrame(scoped_refptr<media::VideoFrame> frame) {} 463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(WebVideoRenderer); 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace webkit_glue 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // WEBKIT_GLUE_MEDIA_WEB_VIDEO_RENDERER_H_ 54