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 #include "media/blink/skcanvas_video_renderer.h" | 5 #include "media/blink/skcanvas_video_renderer.h" |
6 | 6 |
7 #include "gpu/GLES2/gl2extchromium.h" | 7 #include "gpu/GLES2/gl2extchromium.h" |
8 #include "gpu/command_buffer/client/gles2_interface.h" | 8 #include "gpu/command_buffer/client/gles2_interface.h" |
9 #include "gpu/command_buffer/common/mailbox_holder.h" | 9 #include "gpu/command_buffer/common/mailbox_holder.h" |
10 #include "media/base/video_frame.h" | 10 #include "media/base/video_frame.h" |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
146 } | 146 } |
147 GrBackendObject handles[3] = { | 147 GrBackendObject handles[3] = { |
148 source_textures[0], source_textures[1], source_textures[2]}; | 148 source_textures[0], source_textures[1], source_textures[2]}; |
149 | 149 |
150 SkISize yuvSizes[] = { | 150 SkISize yuvSizes[] = { |
151 {ya_tex_size.width(), ya_tex_size.height()}, | 151 {ya_tex_size.width(), ya_tex_size.height()}, |
152 {uv_tex_size.width(), uv_tex_size.height()}, | 152 {uv_tex_size.width(), uv_tex_size.height()}, |
153 {uv_tex_size.width(), uv_tex_size.height()}, | 153 {uv_tex_size.width(), uv_tex_size.height()}, |
154 }; | 154 }; |
155 | 155 |
156 // TODO(dcastagna): Skia currently doesn't support Rec709 YUV conversion. | |
157 DCHECK(!CheckColorSpace(video_frame, media::COLOR_SPACE_HD_REC709)); | |
158 SkYUVColorSpace color_space = kRec601_SkYUVColorSpace; | 156 SkYUVColorSpace color_space = kRec601_SkYUVColorSpace; |
159 if (CheckColorSpace(video_frame, media::COLOR_SPACE_JPEG)) | 157 if (CheckColorSpace(video_frame, media::COLOR_SPACE_JPEG)) |
160 color_space = kJPEG_SkYUVColorSpace; | 158 color_space = kJPEG_SkYUVColorSpace; |
| 159 else if (CheckColorSpace(video_frame, media::COLOR_SPACE_HD_REC709)) |
| 160 color_space = kRec709_SkYUVColorSpace; |
161 | 161 |
162 SkImage* img = SkImage::NewFromYUVTexturesCopy(context_3d.gr_context, | 162 SkImage* img = SkImage::NewFromYUVTexturesCopy(context_3d.gr_context, |
163 color_space, handles, yuvSizes, | 163 color_space, handles, yuvSizes, |
164 kTopLeft_GrSurfaceOrigin); | 164 kTopLeft_GrSurfaceOrigin); |
165 DCHECK(img); | 165 DCHECK(img); |
166 gl->DeleteTextures(3, source_textures); | 166 gl->DeleteTextures(3, source_textures); |
167 SyncPointClientImpl client(gl); | 167 SyncPointClientImpl client(gl); |
168 video_frame->UpdateReleaseSyncPoint(&client); | 168 video_frame->UpdateReleaseSyncPoint(&client); |
169 return make_scoped_ptr(img); | 169 return make_scoped_ptr(img); |
170 } | 170 } |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
225 SkCanvasVideoRenderer::ConvertVideoFrameToRGBPixels( | 225 SkCanvasVideoRenderer::ConvertVideoFrameToRGBPixels( |
226 frame_, pixels, row_bytes); | 226 frame_, pixels, row_bytes); |
227 return kSuccess; | 227 return kSuccess; |
228 } | 228 } |
229 | 229 |
230 bool onGetYUV8Planes(SkISize sizes[3], | 230 bool onGetYUV8Planes(SkISize sizes[3], |
231 void* planes[3], | 231 void* planes[3], |
232 size_t row_bytes[3], | 232 size_t row_bytes[3], |
233 SkYUVColorSpace* color_space) override { | 233 SkYUVColorSpace* color_space) override { |
234 if (!frame_.get() || !media::IsYuvPlanar(frame_->format()) || | 234 if (!frame_.get() || !media::IsYuvPlanar(frame_->format()) || |
235 // TODO(rileya): Skia currently doesn't support Rec709 YUV conversion, | 235 // TODO(rileya): Skia currently doesn't support YUVA conversion. Remove |
236 // or YUVA conversion. Remove this case once it does. As-is we will | 236 // this case once it does. As-is we will fall back on the pure-software |
237 // fall back on the pure-software path in this case. | 237 // path in this case. |
238 CheckColorSpace(frame_, COLOR_SPACE_HD_REC709) || | |
239 frame_->format() == PIXEL_FORMAT_YV12A) { | 238 frame_->format() == PIXEL_FORMAT_YV12A) { |
240 return false; | 239 return false; |
241 } | 240 } |
242 | 241 |
243 if (color_space) { | 242 if (color_space) { |
244 if (CheckColorSpace(frame_, COLOR_SPACE_JPEG)) | 243 if (CheckColorSpace(frame_, COLOR_SPACE_JPEG)) |
245 *color_space = kJPEG_SkYUVColorSpace; | 244 *color_space = kJPEG_SkYUVColorSpace; |
| 245 else if (CheckColorSpace(frame_, COLOR_SPACE_HD_REC709)) |
| 246 *color_space = kRec709_SkYUVColorSpace; |
246 else | 247 else |
247 *color_space = kRec601_SkYUVColorSpace; | 248 *color_space = kRec601_SkYUVColorSpace; |
248 } | 249 } |
249 | 250 |
250 for (int plane = VideoFrame::kYPlane; plane <= VideoFrame::kVPlane; | 251 for (int plane = VideoFrame::kYPlane; plane <= VideoFrame::kVPlane; |
251 ++plane) { | 252 ++plane) { |
252 if (sizes) { | 253 if (sizes) { |
253 const gfx::Size size = | 254 const gfx::Size size = |
254 VideoFrame::PlaneSize(frame_->format(), plane, | 255 VideoFrame::PlaneSize(frame_->format(), plane, |
255 gfx::Size(frame_->visible_rect().width(), | 256 gfx::Size(frame_->visible_rect().width(), |
(...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
673 } | 674 } |
674 | 675 |
675 void SkCanvasVideoRenderer::ResetAcceleratedLastFrame() { | 676 void SkCanvasVideoRenderer::ResetAcceleratedLastFrame() { |
676 accelerated_last_image_.reset(); | 677 accelerated_last_image_.reset(); |
677 accelerated_last_frame_.reset(); | 678 accelerated_last_frame_.reset(); |
678 accelerated_generator_ = nullptr; | 679 accelerated_generator_ = nullptr; |
679 accelerated_last_frame_timestamp_ = media::kNoTimestamp(); | 680 accelerated_last_frame_timestamp_ = media::kNoTimestamp(); |
680 } | 681 } |
681 | 682 |
682 } // namespace media | 683 } // namespace media |
OLD | NEW |