OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef MEDIA_BLINK_SKCANVAS_VIDEO_RENDERER_H_ | 5 #ifndef MEDIA_BLINK_SKCANVAS_VIDEO_RENDERER_H_ |
6 #define MEDIA_BLINK_SKCANVAS_VIDEO_RENDERER_H_ | 6 #define MEDIA_BLINK_SKCANVAS_VIDEO_RENDERER_H_ |
7 | 7 |
8 #include "base/memory/ref_counted.h" | 8 #include "base/memory/ref_counted.h" |
9 #include "base/time/time.h" | 9 #include "base/time/time.h" |
10 #include "base/timer/timer.h" | 10 #include "base/timer/timer.h" |
11 #include "media/base/media_export.h" | 11 #include "media/base/media_export.h" |
12 #include "media/base/video_rotation.h" | 12 #include "media/base/video_rotation.h" |
13 #include "media/filters/context_3d.h" | 13 #include "media/filters/context_3d.h" |
14 #include "third_party/skia/include/core/SkBitmap.h" | 14 #include "third_party/skia/include/core/SkBitmap.h" |
| 15 #include "third_party/skia/include/core/SkImage.h" |
15 #include "third_party/skia/include/core/SkXfermode.h" | 16 #include "third_party/skia/include/core/SkXfermode.h" |
16 #include "ui/gfx/geometry/rect.h" | 17 #include "ui/gfx/geometry/rect.h" |
17 | 18 |
18 class SkCanvas; | 19 class SkCanvas; |
19 | 20 |
20 namespace media { | 21 namespace media { |
21 | 22 |
22 class VideoFrame; | 23 class VideoFrame; |
23 class VideoImageGenerator; | 24 class VideoImageGenerator; |
24 | 25 |
(...skipping 29 matching lines...) Expand all Loading... |
54 // should point into a buffer large enough to hold as many 32 bit RGBA pixels | 55 // should point into a buffer large enough to hold as many 32 bit RGBA pixels |
55 // as are in the visible_rect() area of the frame. | 56 // as are in the visible_rect() area of the frame. |
56 static void ConvertVideoFrameToRGBPixels( | 57 static void ConvertVideoFrameToRGBPixels( |
57 const scoped_refptr<media::VideoFrame>& video_frame, | 58 const scoped_refptr<media::VideoFrame>& video_frame, |
58 void* rgb_pixels, | 59 void* rgb_pixels, |
59 size_t row_bytes); | 60 size_t row_bytes); |
60 | 61 |
61 // Copy the contents of texture of |video_frame| to texture |texture|. | 62 // Copy the contents of texture of |video_frame| to texture |texture|. |
62 // |level|, |internal_format|, |type| specify target texture |texture|. | 63 // |level|, |internal_format|, |type| specify target texture |texture|. |
63 // The format of |video_frame| must be VideoFrame::NATIVE_TEXTURE. | 64 // The format of |video_frame| must be VideoFrame::NATIVE_TEXTURE. |
64 static void CopyVideoFrameTextureToGLTexture(gpu::gles2::GLES2Interface* gl, | 65 static void CopyVideoFrameSingleTextureToGLTexture( |
65 VideoFrame* video_frame, | 66 gpu::gles2::GLES2Interface* gl, |
66 unsigned int texture, | 67 VideoFrame* video_frame, |
67 unsigned int internal_format, | 68 unsigned int texture, |
68 unsigned int type, | 69 unsigned int internal_format, |
69 bool premultiply_alpha, | 70 unsigned int type, |
70 bool flip_y); | 71 bool premultiply_alpha, |
| 72 bool flip_y); |
71 | 73 |
72 private: | 74 private: |
73 void ResetLastFrame(); | 75 void ResetLastFrame(); |
74 void ResetAcceleratedLastFrame(); | 76 void ResetAcceleratedLastFrame(); |
75 | 77 |
76 // An RGB bitmap and corresponding timestamp of the previously converted | 78 // An RGB bitmap and corresponding timestamp of the previously converted |
77 // video frame data by software color space conversion. | 79 // video frame data by software color space conversion. |
78 SkBitmap last_frame_; | 80 SkBitmap last_frame_; |
79 base::TimeDelta last_frame_timestamp_; | 81 base::TimeDelta last_frame_timestamp_; |
80 // If |last_frame_| is not used for a while, it's deleted to save memory. | 82 // If |last_frame_| is not used for a while, it's deleted to save memory. |
81 base::DelayTimer<SkCanvasVideoRenderer> frame_deleting_timer_; | 83 base::DelayTimer<SkCanvasVideoRenderer> frame_deleting_timer_; |
82 | 84 |
83 // This is a hardware accelerated copy of the frame generated by | 85 // This is a hardware accelerated copy of the frame generated by |
84 // |accelerated_generator_|. | 86 // |accelerated_generator_|. |
85 // It's used when |canvas| parameter in Paint() is Ganesh canvas. | 87 // It's used when |canvas| parameter in Paint() is Ganesh canvas. |
86 // Note: all GrContext in SkCanvas instances are same. | 88 // Note: all GrContext in SkCanvas instances are same. |
| 89 scoped_ptr<SkImage> accelerated_last_image_; |
87 SkBitmap accelerated_last_frame_; | 90 SkBitmap accelerated_last_frame_; |
88 VideoImageGenerator* accelerated_generator_; | 91 VideoImageGenerator* accelerated_generator_; |
89 base::TimeDelta accelerated_last_frame_timestamp_; | 92 base::TimeDelta accelerated_last_frame_timestamp_; |
90 base::DelayTimer<SkCanvasVideoRenderer> accelerated_frame_deleting_timer_; | 93 base::DelayTimer<SkCanvasVideoRenderer> accelerated_frame_deleting_timer_; |
91 | 94 |
92 DISALLOW_COPY_AND_ASSIGN(SkCanvasVideoRenderer); | 95 DISALLOW_COPY_AND_ASSIGN(SkCanvasVideoRenderer); |
93 }; | 96 }; |
94 | 97 |
95 } // namespace media | 98 } // namespace media |
96 | 99 |
97 #endif // MEDIA_BLINK_SKCANVAS_VIDEO_RENDERER_H_ | 100 #endif // MEDIA_BLINK_SKCANVAS_VIDEO_RENDERER_H_ |
OLD | NEW |