| Index: media/crypto/aes_decryptor.cc
|
| diff --git a/media/crypto/aes_decryptor.cc b/media/crypto/aes_decryptor.cc
|
| index e5858003f21b6fd38c3212568991f6e1336bc2fd..27272c67e03c1f15f1bbfbf2d7dbdbc4835655cf 100644
|
| --- a/media/crypto/aes_decryptor.cc
|
| +++ b/media/crypto/aes_decryptor.cc
|
| @@ -285,17 +285,24 @@ void AesDecryptor::Decrypt(const scoped_refptr<DecoderBuffer>& encrypted,
|
| return;
|
| }
|
|
|
| - // TODO(strobe): Currently, presence of checksum is used to indicate the use
|
| - // of normal or WebM decryption keys. Consider a more explicit signaling
|
| - // mechanism and the removal of the webm_decryption_key member.
|
| - crypto::SymmetricKey* decryption_key = (checksum_size > 0) ?
|
| - key->webm_decryption_key() : key->decryption_key();
|
| - scoped_refptr<DecoderBuffer> decrypted =
|
| - DecryptData(*encrypted, decryption_key);
|
| - if (!decrypted) {
|
| - DVLOG(1) << "Decryption failed.";
|
| - decrypt_cb.Run(kError, NULL);
|
| - return;
|
| + scoped_refptr<DecoderBuffer> decrypted;
|
| + // An empty iv string signals that the frame is unencrypted.
|
| + if (encrypted->GetDecryptConfig()->iv().empty()) {
|
| + int data_offset = encrypted->GetDecryptConfig()->data_offset();
|
| + decrypted = DecoderBuffer::CopyFrom(encrypted->GetData() + data_offset,
|
| + encrypted->GetDataSize() - data_offset);
|
| + } else {
|
| + // TODO(strobe): Currently, presence of checksum is used to indicate the use
|
| + // of normal or WebM decryption keys. Consider a more explicit signaling
|
| + // mechanism and the removal of the webm_decryption_key member.
|
| + crypto::SymmetricKey* decryption_key = (checksum_size > 0) ?
|
| + key->webm_decryption_key() : key->decryption_key();
|
| + decrypted = DecryptData(*encrypted, decryption_key);
|
| + if (!decrypted) {
|
| + DVLOG(1) << "Decryption failed.";
|
| + decrypt_cb.Run(kError, NULL);
|
| + return;
|
| + }
|
| }
|
|
|
| decrypted->SetTimestamp(encrypted->GetTimestamp());
|
|
|