Chromium Code Reviews| Index: media/crypto/aes_decryptor.cc |
| diff --git a/media/crypto/aes_decryptor.cc b/media/crypto/aes_decryptor.cc |
| index e5858003f21b6fd38c3212568991f6e1336bc2fd..c2cf2a9c060e5b7f13bdf64a69179da560d1e399 100644 |
| --- a/media/crypto/aes_decryptor.cc |
| +++ b/media/crypto/aes_decryptor.cc |
| @@ -285,17 +285,26 @@ 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(); |
| + const uint8* frame = |
| + reinterpret_cast<const uint8*>(encrypted->GetData() + data_offset); |
| + int frame_size = encrypted->GetDataSize() - data_offset; |
| + decrypted = DecoderBuffer::CopyFrom(frame, frame_size); |
|
xhwang
2012/08/01 00:45:41
decrypted = DecoderBuffer::CopyFrom(encrypted->Get
fgalligan1
2012/08/01 01:36:10
Done.
|
| + } 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()); |