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

Unified Diff: media/cdm/ppapi/external_clear_key/clear_key_cdm.cc

Issue 2543623003: media: Allow config change between clear and encrypted streams (Closed)
Patch Set: comments addressed Created 3 years, 10 months 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
« no previous file with comments | « content/renderer/pepper/content_decryptor_delegate.cc ('k') | media/filters/decoder_stream.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/cdm/ppapi/external_clear_key/clear_key_cdm.cc
diff --git a/media/cdm/ppapi/external_clear_key/clear_key_cdm.cc b/media/cdm/ppapi/external_clear_key/clear_key_cdm.cc
index 7adacf0a1d57882c153f77cdf236eec4c634b3bd..655fd6a8a5e7ee06222a762ec1fe5feecbd842ba 100644
--- a/media/cdm/ppapi/external_clear_key/clear_key_cdm.cc
+++ b/media/cdm/ppapi/external_clear_key/clear_key_cdm.cc
@@ -99,24 +99,30 @@ static scoped_refptr<media::DecoderBuffer> CopyDecoderBufferFrom(
// TODO(xhwang): Get rid of this copy.
scoped_refptr<media::DecoderBuffer> output_buffer =
media::DecoderBuffer::CopyFrom(input_buffer.data, input_buffer.data_size);
+ output_buffer->set_timestamp(
+ base::TimeDelta::FromMicroseconds(input_buffer.timestamp));
- std::vector<media::SubsampleEntry> subsamples;
- for (uint32_t i = 0; i < input_buffer.num_subsamples; ++i) {
- subsamples.push_back(
- media::SubsampleEntry(input_buffer.subsamples[i].clear_bytes,
- input_buffer.subsamples[i].cipher_bytes));
- }
+ // TODO(xhwang): Unify how to check whether a buffer is encrypted.
+ // See http://crbug.com/675003
+ if (input_buffer.iv_size != 0) {
+ DCHECK_GT(input_buffer.key_id_size, 0u);
+ std::vector<media::SubsampleEntry> subsamples;
+ for (uint32_t i = 0; i < input_buffer.num_subsamples; ++i) {
+ subsamples.push_back(
+ media::SubsampleEntry(input_buffer.subsamples[i].clear_bytes,
+ input_buffer.subsamples[i].cipher_bytes));
+ }
- std::unique_ptr<media::DecryptConfig> decrypt_config(new media::DecryptConfig(
- std::string(reinterpret_cast<const char*>(input_buffer.key_id),
- input_buffer.key_id_size),
- std::string(reinterpret_cast<const char*>(input_buffer.iv),
- input_buffer.iv_size),
- subsamples));
+ std::unique_ptr<media::DecryptConfig> decrypt_config(
+ new media::DecryptConfig(
+ std::string(reinterpret_cast<const char*>(input_buffer.key_id),
+ input_buffer.key_id_size),
+ std::string(reinterpret_cast<const char*>(input_buffer.iv),
+ input_buffer.iv_size),
+ subsamples));
- output_buffer->set_decrypt_config(std::move(decrypt_config));
- output_buffer->set_timestamp(
- base::TimeDelta::FromMicroseconds(input_buffer.timestamp));
+ output_buffer->set_decrypt_config(std::move(decrypt_config));
+ }
return output_buffer;
}
@@ -729,7 +735,10 @@ cdm::Status ClearKeyCdm::DecryptToMediaDecoderBuffer(
scoped_refptr<media::DecoderBuffer> buffer =
CopyDecoderBufferFrom(encrypted_buffer);
- if (buffer->end_of_stream()) {
+ // TODO(xhwang): Unify how to check whether a buffer is encrypted.
+ // See http://crbug.com/675003
+ if (buffer->end_of_stream() || !buffer->decrypt_config() ||
+ !buffer->decrypt_config()->is_encrypted()) {
*decrypted_buffer = buffer;
return cdm::kSuccess;
}
« no previous file with comments | « content/renderer/pepper/content_decryptor_delegate.cc ('k') | media/filters/decoder_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698