Index: webkit/renderer/media/crypto/ppapi/libvpx_cdm_video_decoder.cc |
diff --git a/webkit/renderer/media/crypto/ppapi/libvpx_cdm_video_decoder.cc b/webkit/renderer/media/crypto/ppapi/libvpx_cdm_video_decoder.cc |
deleted file mode 100644 |
index beb365cd565220aeac28bf685bd20d89d0bec1b1..0000000000000000000000000000000000000000 |
--- a/webkit/renderer/media/crypto/ppapi/libvpx_cdm_video_decoder.cc |
+++ /dev/null |
@@ -1,196 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "webkit/renderer/media/crypto/ppapi/libvpx_cdm_video_decoder.h" |
- |
-#include "base/logging.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "media/base/buffers.h" |
-#include "media/base/limits.h" |
- |
-// Include libvpx header files. |
-// VPX_CODEC_DISABLE_COMPAT excludes parts of the libvpx API that provide |
-// backwards compatibility for legacy applications using the library. |
-#define VPX_CODEC_DISABLE_COMPAT 1 |
-extern "C" { |
-#include "third_party/libvpx/source/libvpx/vpx/vp8dx.h" |
-#include "third_party/libvpx/source/libvpx/vpx/vpx_decoder.h" |
-} |
- |
-#include "webkit/renderer/media/crypto/ppapi/cdm/content_decryption_module.h" |
- |
-// Enable USE_COPYPLANE_WITH_LIBVPX to use |CopyPlane()| instead of memcpy to |
-// copy video frame data. |
-// #define USE_COPYPLANE_WITH_LIBVPX 1 |
- |
-namespace webkit_media { |
- |
-static const int kDecodeThreads = 2; |
- |
-LibvpxCdmVideoDecoder::LibvpxCdmVideoDecoder(cdm::Host* host) |
- : is_initialized_(false), |
- host_(host), |
- vpx_codec_(NULL), |
- vpx_image_(NULL) { |
-} |
- |
-LibvpxCdmVideoDecoder::~LibvpxCdmVideoDecoder() { |
- Deinitialize(); |
-} |
- |
-bool LibvpxCdmVideoDecoder::Initialize(const cdm::VideoDecoderConfig& config) { |
- DVLOG(1) << "Initialize()"; |
- |
- if (!IsValidOutputConfig(config.format, config.coded_size)) { |
- LOG(ERROR) << "Initialize(): invalid video decoder configuration."; |
- return false; |
- } |
- |
- if (is_initialized_) { |
- LOG(ERROR) << "Initialize(): Already initialized."; |
- return false; |
- } |
- |
- vpx_codec_ = new vpx_codec_ctx(); |
- vpx_codec_dec_cfg_t vpx_config = {0}; |
- vpx_config.w = config.coded_size.width; |
- vpx_config.h = config.coded_size.height; |
- vpx_config.threads = kDecodeThreads; |
- |
- vpx_codec_err_t status = vpx_codec_dec_init(vpx_codec_, |
- vpx_codec_vp8_dx(), |
- &vpx_config, |
- 0); |
- if (status != VPX_CODEC_OK) { |
- LOG(ERROR) << "InitializeLibvpx(): vpx_codec_dec_init failed, ret=" |
- << status; |
- delete vpx_codec_; |
- vpx_codec_ = NULL; |
- } |
- |
- is_initialized_ = true; |
- return true; |
-} |
- |
-void LibvpxCdmVideoDecoder::Deinitialize() { |
- DVLOG(1) << "Deinitialize()"; |
- |
- if (vpx_codec_) { |
- vpx_codec_destroy(vpx_codec_); |
- vpx_codec_ = NULL; |
- } |
- |
- is_initialized_ = false; |
-} |
- |
-void LibvpxCdmVideoDecoder::Reset() { |
- DVLOG(1) << "Reset()"; |
-} |
- |
-// static |
-bool LibvpxCdmVideoDecoder::IsValidOutputConfig(cdm::VideoFormat format, |
- const cdm::Size& data_size) { |
- return ((format == cdm::kYv12 || format == cdm::kI420) && |
- (data_size.width % 2) == 0 && (data_size.height % 2) == 0 && |
- data_size.width > 0 && data_size.height > 0 && |
- data_size.width <= media::limits::kMaxDimension && |
- data_size.height <= media::limits::kMaxDimension && |
- data_size.width * data_size.height <= media::limits::kMaxCanvas); |
-} |
- |
-cdm::Status LibvpxCdmVideoDecoder::DecodeFrame( |
- const uint8_t* compressed_frame, |
- int32_t compressed_frame_size, |
- int64_t timestamp, |
- cdm::VideoFrame* decoded_frame) { |
- DVLOG(1) << "DecodeFrame()"; |
- DCHECK(decoded_frame); |
- |
- // Pass |compressed_frame| to libvpx. |
- void* user_priv = reinterpret_cast<void*>(×tamp); |
- vpx_codec_err_t status = vpx_codec_decode(vpx_codec_, |
- compressed_frame, |
- compressed_frame_size, |
- user_priv, |
- 0); |
- if (status != VPX_CODEC_OK) { |
- LOG(ERROR) << "DecodeFrameLibvpx(): vpx_codec_decode failed, status=" |
- << status; |
- return cdm::kDecodeError; |
- } |
- |
- // Gets pointer to decoded data. |
- vpx_codec_iter_t iter = NULL; |
- vpx_image_ = vpx_codec_get_frame(vpx_codec_, &iter); |
- if (!vpx_image_) |
- return cdm::kNeedMoreData; |
- |
- if (vpx_image_->user_priv != reinterpret_cast<void*>(×tamp)) { |
- LOG(ERROR) << "DecodeFrameLibvpx() invalid output timestamp."; |
- return cdm::kDecodeError; |
- } |
- decoded_frame->SetTimestamp(timestamp); |
- |
- if (!CopyVpxImageTo(decoded_frame)) { |
- LOG(ERROR) << "DecodeFrameLibvpx() could not copy vpx image to output " |
- << "buffer."; |
- return cdm::kDecodeError; |
- } |
- |
- return cdm::kSuccess; |
-} |
- |
-bool LibvpxCdmVideoDecoder::CopyVpxImageTo(cdm::VideoFrame* cdm_video_frame) { |
- DCHECK(cdm_video_frame); |
- DCHECK_EQ(vpx_image_->fmt, VPX_IMG_FMT_I420); |
- DCHECK_EQ(vpx_image_->d_w % 2, 0U); |
- DCHECK_EQ(vpx_image_->d_h % 2, 0U); |
- |
- const int y_size = vpx_image_->stride[VPX_PLANE_Y] * vpx_image_->d_h; |
- const int uv_rows = vpx_image_->d_h / 2; |
- const int u_size = vpx_image_->stride[VPX_PLANE_U] * uv_rows; |
- const int v_size = vpx_image_->stride[VPX_PLANE_V] * uv_rows; |
- const int space_required = y_size + u_size + v_size; |
- |
- DCHECK(!cdm_video_frame->FrameBuffer()); |
- cdm_video_frame->SetFrameBuffer(host_->Allocate(space_required)); |
- if (!cdm_video_frame->FrameBuffer()) { |
- LOG(ERROR) << "CopyVpxImageTo() cdm::Host::Allocate failed."; |
- return false; |
- } |
- cdm_video_frame->FrameBuffer()->SetSize(space_required); |
- |
- memcpy(cdm_video_frame->FrameBuffer()->Data(), |
- vpx_image_->planes[VPX_PLANE_Y], |
- y_size); |
- memcpy(cdm_video_frame->FrameBuffer()->Data() + y_size, |
- vpx_image_->planes[VPX_PLANE_U], |
- u_size); |
- memcpy(cdm_video_frame->FrameBuffer()->Data() + y_size + u_size, |
- vpx_image_->planes[VPX_PLANE_V], |
- v_size); |
- |
- cdm_video_frame->SetFormat(cdm::kYv12); |
- |
- cdm::Size video_frame_size; |
- video_frame_size.width = vpx_image_->d_w; |
- video_frame_size.height = vpx_image_->d_h; |
- cdm_video_frame->SetSize(video_frame_size); |
- |
- cdm_video_frame->SetPlaneOffset(cdm::VideoFrame::kYPlane, 0); |
- cdm_video_frame->SetPlaneOffset(cdm::VideoFrame::kUPlane, y_size); |
- cdm_video_frame->SetPlaneOffset(cdm::VideoFrame::kVPlane, |
- y_size + u_size); |
- |
- cdm_video_frame->SetStride(cdm::VideoFrame::kYPlane, |
- vpx_image_->stride[VPX_PLANE_Y]); |
- cdm_video_frame->SetStride(cdm::VideoFrame::kUPlane, |
- vpx_image_->stride[VPX_PLANE_U]); |
- cdm_video_frame->SetStride(cdm::VideoFrame::kVPlane, |
- vpx_image_->stride[VPX_PLANE_V]); |
- |
- return true; |
-} |
- |
-} // namespace webkit_media |