Chromium Code Reviews| 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 4820555fdaba1d18ea61d0822c495218786d4f62..2bbf942a61dd5c0bae62564f11be0be30ba7d06d 100644 |
| --- a/media/cdm/ppapi/external_clear_key/clear_key_cdm.cc |
| +++ b/media/cdm/ppapi/external_clear_key/clear_key_cdm.cc |
| @@ -95,24 +95,28 @@ 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)); |
| - } |
| + if (input_buffer.iv_size != 0) { |
|
ddorwin
2017/02/12 04:28:52
Should we have a similar TODO as below here?
Or a
xhwang
2017/02/14 23:59:32
Done.
|
| + 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; |
| } |
| @@ -673,7 +677,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; |
| } |