Index: media/filters/decrypting_demuxer_stream.cc |
diff --git a/media/filters/decrypting_demuxer_stream.cc b/media/filters/decrypting_demuxer_stream.cc |
index c4e6b8478380de81a70ee42ac894d376a3cf770a..02d8d89ba82210c9d18aef79f6d4349b6261c530 100644 |
--- a/media/filters/decrypting_demuxer_stream.cc |
+++ b/media/filters/decrypting_demuxer_stream.cc |
@@ -241,7 +241,7 @@ void DecryptingDemuxerStream::DecryptBuffer( |
if (buffer->decrypt_config()->iv().empty()) { |
DVLOG(2) << "DoDecryptBuffer() - clear buffer."; |
scoped_refptr<DecoderBuffer> decrypted = DecoderBuffer::CopyFrom( |
- buffer->data(), buffer->data_size()); |
+ buffer->data(), buffer->data_size(), buffer->is_keyframe()); |
decrypted->set_timestamp(buffer->timestamp()); |
decrypted->set_duration(buffer->duration()); |
state_ = kIdle; |
@@ -307,8 +307,15 @@ void DecryptingDemuxerStream::DeliverBuffer( |
} |
DCHECK_EQ(status, Decryptor::kSuccess); |
+ |
+ // Copy the keyframe flag from the encrypted to decrypted buffer, assuming |
+ // that the decryptor initialized the flag to false. |
+ if (pending_buffer_to_decrypt_->is_keyframe()) |
+ decrypted_buffer->set_is_keyframe(true); |
+ |
pending_buffer_to_decrypt_ = NULL; |
state_ = kIdle; |
+ |
base::ResetAndReturn(&read_cb_).Run(kOk, decrypted_buffer); |
} |