Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(633)

Unified Diff: webkit/media/crypto/ppapi/fake_cdm_video_decoder.cc

Issue 11316045: Add a libvpx video decoder to ClearKeyCdm and move the fake video decoder to its own class. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase, fix incorrect DCHECK and fix include order. Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webkit/media/crypto/ppapi/fake_cdm_video_decoder.cc
diff --git a/webkit/media/crypto/ppapi/fake_cdm_video_decoder.cc b/webkit/media/crypto/ppapi/fake_cdm_video_decoder.cc
new file mode 100644
index 0000000000000000000000000000000000000000..6effd9df5cfaa95792f4943f46120ab32417ccd0
--- /dev/null
+++ b/webkit/media/crypto/ppapi/fake_cdm_video_decoder.cc
@@ -0,0 +1,90 @@
+// Copyright (c) 2012 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/media/crypto/ppapi/fake_cdm_video_decoder.h"
+
+#include "base/logging.h"
+#include "webkit/media/crypto/ppapi/content_decryption_module.h"
+
+namespace webkit_media {
+
+FakeCdmVideoDecoder::FakeCdmVideoDecoder(cdm::Allocator* allocator)
+ : is_initialized_(false),
+ allocator_(allocator) {
+}
+
+FakeCdmVideoDecoder::~FakeCdmVideoDecoder() {
+ Deinitialize();
+}
+
+bool FakeCdmVideoDecoder::Initialize(const cdm::VideoDecoderConfig& config) {
+ DVLOG(1) << "Initialize()";
+
+ video_size_ = config.coded_size;
+ is_initialized_ = true;
+ return true;
+}
+
+void FakeCdmVideoDecoder::Deinitialize() {
+ DVLOG(1) << "Deinitialize()";
+ is_initialized_ = false;
+}
+
+void FakeCdmVideoDecoder::Reset() {
+ DVLOG(1) << "Reset()";
+}
+
+// Creates a YV12 video frame.
+cdm::Status FakeCdmVideoDecoder::DecodeFrame(const uint8_t* compressed_frame,
+ int32_t compressed_frame_size,
+ int64_t timestamp,
+ cdm::VideoFrame* decoded_frame) {
+ DVLOG(1) << "DecodeFrame()";
+
+ // The fake decoder does not buffer any frames internally. So if the input is
+ // empty (EOS), just return kNeedMoreData.
+ if (!decoded_frame)
+ return cdm::kNeedMoreData;
+
+ // Choose non-zero alignment and padding on purpose for testing.
+ const int kAlignment = 8;
+ const int kPadding = 16;
+ const int kPlanePadding = 128;
+
+ int width = video_size_.width;
+ int height = video_size_.height;
+ DCHECK_EQ(width % 2, 0);
+ DCHECK_EQ(height % 2, 0);
+
+ int y_stride = (width + kAlignment - 1) / kAlignment * kAlignment + kPadding;
+ int uv_stride =
+ (width / 2 + kAlignment - 1) / kAlignment * kAlignment + kPadding;
+ int y_rows = height;
+ int uv_rows = height / 2;
+ int y_offset = 0;
+ int v_offset = y_stride * y_rows + kPlanePadding;
+ int u_offset = v_offset + uv_stride * uv_rows + kPlanePadding;
+ int frame_size = u_offset + uv_stride * uv_rows + kPlanePadding;
+
+ decoded_frame->set_format(cdm::kYv12);
+ decoded_frame->set_size(video_size_);
+ decoded_frame->set_frame_buffer(allocator_->Allocate(frame_size));
+ decoded_frame->set_plane_offset(cdm::VideoFrame::kYPlane, y_offset);
+ decoded_frame->set_plane_offset(cdm::VideoFrame::kVPlane, v_offset);
+ decoded_frame->set_plane_offset(cdm::VideoFrame::kUPlane, u_offset);
+ decoded_frame->set_stride(cdm::VideoFrame::kYPlane, y_stride);
+ decoded_frame->set_stride(cdm::VideoFrame::kVPlane, uv_stride);
+ decoded_frame->set_stride(cdm::VideoFrame::kUPlane, uv_stride);
+ decoded_frame->set_timestamp(timestamp);
+
+ static unsigned char color = 0;
+ color += 10;
+
+ memset(reinterpret_cast<void*>(decoded_frame->frame_buffer()->data()),
+ color, frame_size);
+
+ return cdm::kSuccess;
+}
+
+} // namespace webkit_media
« no previous file with comments | « webkit/media/crypto/ppapi/fake_cdm_video_decoder.h ('k') | webkit/media/crypto/ppapi/ffmpeg_cdm_video_decoder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698