| 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 "webkit/media/crypto/ppapi/libvpx_cdm_video_decoder.h" | 5 #include "webkit/media/crypto/ppapi/libvpx_cdm_video_decoder.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "media/base/buffers.h" | 9 #include "media/base/buffers.h" |
| 10 #include "media/base/limits.h" | 10 #include "media/base/limits.h" |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 for (int i = 0; i < rows; ++i) { | 43 for (int i = 0; i < rows; ++i) { |
| 44 const int source_offset = i * source_stride; | 44 const int source_offset = i * source_stride; |
| 45 const int target_offset = i * target_stride; | 45 const int target_offset = i * target_stride; |
| 46 memcpy(target + target_offset, | 46 memcpy(target + target_offset, |
| 47 source + source_offset, | 47 source + source_offset, |
| 48 copy_bytes_per_row); | 48 copy_bytes_per_row); |
| 49 } | 49 } |
| 50 } | 50 } |
| 51 #endif // USE_COPYPLANE_WITH_LIBVPX | 51 #endif // USE_COPYPLANE_WITH_LIBVPX |
| 52 | 52 |
| 53 LibvpxCdmVideoDecoder::LibvpxCdmVideoDecoder(cdm::Allocator* allocator) | 53 LibvpxCdmVideoDecoder::LibvpxCdmVideoDecoder(cdm::Host* host) |
| 54 : is_initialized_(false), | 54 : is_initialized_(false), |
| 55 allocator_(allocator), | 55 host_(host), |
| 56 vpx_codec_(NULL), | 56 vpx_codec_(NULL), |
| 57 vpx_image_(NULL) { | 57 vpx_image_(NULL) { |
| 58 } | 58 } |
| 59 | 59 |
| 60 LibvpxCdmVideoDecoder::~LibvpxCdmVideoDecoder() { | 60 LibvpxCdmVideoDecoder::~LibvpxCdmVideoDecoder() { |
| 61 Deinitialize(); | 61 Deinitialize(); |
| 62 } | 62 } |
| 63 | 63 |
| 64 bool LibvpxCdmVideoDecoder::Initialize(const cdm::VideoDecoderConfig& config) { | 64 bool LibvpxCdmVideoDecoder::Initialize(const cdm::VideoDecoderConfig& config) { |
| 65 DVLOG(1) << "Initialize()"; | 65 DVLOG(1) << "Initialize()"; |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 168 DCHECK_EQ(vpx_image_->fmt, VPX_IMG_FMT_I420); | 168 DCHECK_EQ(vpx_image_->fmt, VPX_IMG_FMT_I420); |
| 169 DCHECK_EQ(vpx_image_->d_w % 2, 0U); | 169 DCHECK_EQ(vpx_image_->d_w % 2, 0U); |
| 170 DCHECK_EQ(vpx_image_->d_h % 2, 0U); | 170 DCHECK_EQ(vpx_image_->d_h % 2, 0U); |
| 171 | 171 |
| 172 #if defined(USE_COPYPLANE_WITH_LIBVPX) | 172 #if defined(USE_COPYPLANE_WITH_LIBVPX) |
| 173 const int y_size = vpx_image_->d_w * vpx_image_->d_h; | 173 const int y_size = vpx_image_->d_w * vpx_image_->d_h; |
| 174 const int uv_size = y_size / 2; | 174 const int uv_size = y_size / 2; |
| 175 const int space_required = y_size + (uv_size * 2); | 175 const int space_required = y_size + (uv_size * 2); |
| 176 | 176 |
| 177 DCHECK(!cdm_video_frame->FrameBuffer()); | 177 DCHECK(!cdm_video_frame->FrameBuffer()); |
| 178 cdm_video_frame->SetFrameBuffer(allocator_->Allocate(space_required)); | 178 cdm_video_frame->SetFrameBuffer(host_->Allocate(space_required)); |
| 179 if (!cdm_video_frame->FrameBuffer()) { | 179 if (!cdm_video_frame->FrameBuffer()) { |
| 180 LOG(ERROR) << "CopyVpxImageTo() cdm::Allocator::Allocate failed."; | 180 LOG(ERROR) << "CopyVpxImageTo() cdm::Host::Allocate failed."; |
| 181 return false; | 181 return false; |
| 182 } | 182 } |
| 183 cdm_video_frame->FrameBuffer()->SetSize(space_required); | 183 cdm_video_frame->FrameBuffer()->SetSize(space_required); |
| 184 | 184 |
| 185 CopyPlane(vpx_image_->planes[VPX_PLANE_Y], | 185 CopyPlane(vpx_image_->planes[VPX_PLANE_Y], |
| 186 vpx_image_->stride[VPX_PLANE_Y], | 186 vpx_image_->stride[VPX_PLANE_Y], |
| 187 vpx_image_->d_w, | 187 vpx_image_->d_w, |
| 188 vpx_image_->d_h, | 188 vpx_image_->d_h, |
| 189 vpx_image_->d_w, | 189 vpx_image_->d_w, |
| 190 cdm_video_frame->FrameBuffer()->Data()); | 190 cdm_video_frame->FrameBuffer()->Data()); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 221 cdm_video_frame->SetStride(cdm::VideoFrame::kUPlane, uv_stride); | 221 cdm_video_frame->SetStride(cdm::VideoFrame::kUPlane, uv_stride); |
| 222 cdm_video_frame->SetStride(cdm::VideoFrame::kVPlane, uv_stride); | 222 cdm_video_frame->SetStride(cdm::VideoFrame::kVPlane, uv_stride); |
| 223 #else | 223 #else |
| 224 const int y_size = vpx_image_->stride[VPX_PLANE_Y] * vpx_image_->d_h; | 224 const int y_size = vpx_image_->stride[VPX_PLANE_Y] * vpx_image_->d_h; |
| 225 const int uv_rows = vpx_image_->d_h / 2; | 225 const int uv_rows = vpx_image_->d_h / 2; |
| 226 const int u_size = vpx_image_->stride[VPX_PLANE_U] * uv_rows; | 226 const int u_size = vpx_image_->stride[VPX_PLANE_U] * uv_rows; |
| 227 const int v_size = vpx_image_->stride[VPX_PLANE_V] * uv_rows; | 227 const int v_size = vpx_image_->stride[VPX_PLANE_V] * uv_rows; |
| 228 const int space_required = y_size + u_size + v_size; | 228 const int space_required = y_size + u_size + v_size; |
| 229 | 229 |
| 230 DCHECK(!cdm_video_frame->FrameBuffer()); | 230 DCHECK(!cdm_video_frame->FrameBuffer()); |
| 231 cdm_video_frame->SetFrameBuffer(allocator_->Allocate(space_required)); | 231 cdm_video_frame->SetFrameBuffer(host_->Allocate(space_required)); |
| 232 if (!cdm_video_frame->FrameBuffer()) { | 232 if (!cdm_video_frame->FrameBuffer()) { |
| 233 LOG(ERROR) << "CopyVpxImageTo() cdm::Allocator::Allocate failed."; | 233 LOG(ERROR) << "CopyVpxImageTo() cdm::Host::Allocate failed."; |
| 234 return false; | 234 return false; |
| 235 } | 235 } |
| 236 cdm_video_frame->FrameBuffer()->SetSize(space_required); | 236 cdm_video_frame->FrameBuffer()->SetSize(space_required); |
| 237 | 237 |
| 238 memcpy(cdm_video_frame->FrameBuffer()->Data(), | 238 memcpy(cdm_video_frame->FrameBuffer()->Data(), |
| 239 vpx_image_->planes[VPX_PLANE_Y], | 239 vpx_image_->planes[VPX_PLANE_Y], |
| 240 y_size); | 240 y_size); |
| 241 memcpy(cdm_video_frame->FrameBuffer()->Data() + y_size, | 241 memcpy(cdm_video_frame->FrameBuffer()->Data() + y_size, |
| 242 vpx_image_->planes[VPX_PLANE_U], | 242 vpx_image_->planes[VPX_PLANE_U], |
| 243 u_size); | 243 u_size); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 262 cdm_video_frame->SetStride(cdm::VideoFrame::kUPlane, | 262 cdm_video_frame->SetStride(cdm::VideoFrame::kUPlane, |
| 263 vpx_image_->stride[VPX_PLANE_U]); | 263 vpx_image_->stride[VPX_PLANE_U]); |
| 264 cdm_video_frame->SetStride(cdm::VideoFrame::kVPlane, | 264 cdm_video_frame->SetStride(cdm::VideoFrame::kVPlane, |
| 265 vpx_image_->stride[VPX_PLANE_V]); | 265 vpx_image_->stride[VPX_PLANE_V]); |
| 266 #endif // USE_COPYPLANE_WITH_LIBVPX | 266 #endif // USE_COPYPLANE_WITH_LIBVPX |
| 267 | 267 |
| 268 return true; | 268 return true; |
| 269 } | 269 } |
| 270 | 270 |
| 271 } // namespace webkit_media | 271 } // namespace webkit_media |
| OLD | NEW |