Index: webkit/media/crypto/ppapi/clear_key_cdm.cc |
diff --git a/webkit/media/crypto/ppapi/clear_key_cdm.cc b/webkit/media/crypto/ppapi/clear_key_cdm.cc |
index 406a93497b4e40edafd9e934a55bef622ce22a13..6e6c96c476071d7da1185f7bf770b1fbb7a54eaf 100644 |
--- a/webkit/media/crypto/ppapi/clear_key_cdm.cc |
+++ b/webkit/media/crypto/ppapi/clear_key_cdm.cc |
@@ -236,8 +236,13 @@ cdm::Status ClearKeyCdm::Decrypt( |
cdm::Status ClearKeyCdm::InitializeVideoDecoder( |
const cdm::VideoDecoderConfig& video_decoder_config) { |
+#if !defined(CLEAR_KEY_CDM_USE_FAKE_DECODER) |
+ NOTIMPLEMENTED(); |
+ return cdm::kSessionError; |
+#else |
video_size_ = video_decoder_config.coded_size; |
return cdm::kSuccess; |
+#endif |
} |
void ClearKeyCdm::ResetDecoder(cdm::StreamType) { |
@@ -271,25 +276,37 @@ cdm::Status ClearKeyCdm::DecryptAndDecodeFrame( |
if (status == media::Decryptor::kNoKey) |
return cdm::kNoKey; |
+#if !defined(CLEAR_KEY_CDM_USE_FAKE_DECODER) |
+ NOTIMPLEMENTED(); |
+ return cdm::kDecodeError; |
+#else |
GenerateFakeVideoFrame(decoder_buffer->GetTimestamp(), video_frame); |
return cdm::kSuccess; |
+#endif |
} |
+#if defined(CLEAR_KEY_CDM_USE_FAKE_DECODER) |
void ClearKeyCdm::GenerateFakeVideoFrame(base::TimeDelta timestamp, |
cdm::VideoFrame* video_frame) { |
+ // 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; |
- int alignment = 8; |
- int padding = 16; |
- int y_stride = (width + alignment - 1) / alignment * alignment + padding; |
- int uv_stride = (width / 2 + alignment - 1) / alignment * alignment + padding; |
+ DCHECK(width % 2 == 0); |
+ DCHECK(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 plane_padding = 128; |
int y_offset = 0; |
- int v_offset = y_stride * y_rows + plane_padding; |
- int u_offset = v_offset + uv_stride * uv_rows + plane_padding; |
- int frame_size = u_offset + uv_stride * uv_rows + plane_padding; |
+ 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; |
video_frame->set_format(cdm::kYv12); |
video_frame->set_size(video_size_); |
@@ -308,5 +325,6 @@ void ClearKeyCdm::GenerateFakeVideoFrame(base::TimeDelta timestamp, |
memset(reinterpret_cast<void*>(video_frame->frame_buffer()->data()), |
color, frame_size); |
} |
+#endif // CLEAR_KEY_CDM_USE_FAKE_DECODER |
} // namespace webkit_media |