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