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