| Index: chromecast/media/cma/ipc_streamer/decoder_buffer_base_marshaller.cc
|
| diff --git a/chromecast/media/cma/ipc_streamer/decoder_buffer_base_marshaller.cc b/chromecast/media/cma/ipc_streamer/decoder_buffer_base_marshaller.cc
|
| index 14eb742495f1ed97dd648749e14ba1252257d641..dc1f8f5714e926e16f254295000ddfe72d73b0ee 100644
|
| --- a/chromecast/media/cma/ipc_streamer/decoder_buffer_base_marshaller.cc
|
| +++ b/chromecast/media/cma/ipc_streamer/decoder_buffer_base_marshaller.cc
|
| @@ -141,8 +141,24 @@ void DecoderBufferBaseMarshaller::Write(
|
| (buffer->decrypt_config() != NULL &&
|
| buffer->decrypt_config()->iv().size() > 0);
|
| CHECK(msg->WritePod(has_decrypt_config));
|
| - if (has_decrypt_config)
|
| - DecryptConfigMarshaller::Write(*buffer->decrypt_config(), msg);
|
| +
|
| + if (has_decrypt_config) {
|
| + // DecryptConfig may contain 0 subsamples if all content is encrypted.
|
| + // Map this case to a single fully-encrypted "subsample" for more consistent
|
| + // backend handling.
|
| + if (buffer->decrypt_config()->subsamples().empty()) {
|
| + std::vector< ::media::SubsampleEntry> encrypted_subsample_list(1);
|
| + encrypted_subsample_list[0].clear_bytes = 0;
|
| + encrypted_subsample_list[0].cypher_bytes = buffer->data_size();
|
| + ::media::DecryptConfig full_sample_config(
|
| + buffer->decrypt_config()->key_id(),
|
| + buffer->decrypt_config()->iv(),
|
| + encrypted_subsample_list);
|
| + DecryptConfigMarshaller::Write(full_sample_config, msg);
|
| + } else {
|
| + DecryptConfigMarshaller::Write(*buffer->decrypt_config(), msg);
|
| + }
|
| + }
|
|
|
| CHECK(msg->WritePod(buffer->data_size()));
|
| CHECK(msg->WriteBuffer(buffer->data(), buffer->data_size()));
|
|
|