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