1// Copyright (c) 2012 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 MEDIA_FILTERS_SKCANVAS_VIDEO_RENDERER_H_ 6#define MEDIA_FILTERS_SKCANVAS_VIDEO_RENDERER_H_ 7 8#include "base/memory/ref_counted.h" 9#include "base/time/time.h" 10#include "media/base/media_export.h" 11#include "media/base/video_rotation.h" 12#include "third_party/skia/include/core/SkBitmap.h" 13#include "third_party/skia/include/core/SkXfermode.h" 14#include "ui/gfx/rect.h" 15 16class SkCanvas; 17 18namespace media { 19 20class VideoFrame; 21class VideoImageGenerator; 22 23// Handles rendering of VideoFrames to SkCanvases, doing any necessary YUV 24// conversion and caching of resulting RGB bitmaps. 25class MEDIA_EXPORT SkCanvasVideoRenderer { 26 public: 27 SkCanvasVideoRenderer(); 28 ~SkCanvasVideoRenderer(); 29 30 // Paints |video_frame| on |canvas|, scaling the result to fit dimensions 31 // specified by |dest_rect|. 32 // 33 // Black will be painted on |canvas| if |video_frame| is null. 34 void Paint(const scoped_refptr<VideoFrame>& video_frame, 35 SkCanvas* canvas, 36 const gfx::RectF& dest_rect, 37 uint8 alpha, 38 SkXfermode::Mode mode, 39 VideoRotation video_rotation); 40 41 // Copy |video_frame| on |canvas|. 42 void Copy(const scoped_refptr<VideoFrame>&, SkCanvas* canvas); 43 44 private: 45 VideoImageGenerator* generator_; 46 47 // An RGB bitmap and corresponding timestamp of the previously converted 48 // video frame data. 49 SkBitmap last_frame_; 50 base::TimeDelta last_frame_timestamp_; 51 52 DISALLOW_COPY_AND_ASSIGN(SkCanvasVideoRenderer); 53}; 54 55} // namespace media 56 57#endif // MEDIA_FILTERS_SKCANVAS_VIDEO_RENDERER_H_ 58