| Index: media/filters/ffmpeg_demuxer.cc
|
| diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc
|
| index 5ab7c21f0dbdd2fe1a638e7b6948249367d989d9..98268b8c6d0051e14e81a7b68bf98b49ad074734 100644
|
| --- a/media/filters/ffmpeg_demuxer.cc
|
| +++ b/media/filters/ffmpeg_demuxer.cc
|
| @@ -116,6 +116,7 @@ void FFmpegDemuxerStream::EnqueuePacket(ScopedAVPacket packet) {
|
| // keep this generic so that other side_data types in the future can be
|
| // handled the same way as well.
|
| av_packet_split_side_data(packet.get());
|
| +
|
| scoped_refptr<DecoderBuffer> buffer;
|
|
|
| if (type() == DemuxerStream::TEXT) {
|
| @@ -145,14 +146,30 @@ void FFmpegDemuxerStream::EnqueuePacket(ScopedAVPacket packet) {
|
| AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL,
|
| &side_data_size);
|
|
|
| + scoped_ptr<DecryptConfig> decrypt_config;
|
| + int data_offset = 0;
|
| + if ((type() == DemuxerStream::AUDIO && audio_config_.is_encrypted()) ||
|
| + (type() == DemuxerStream::VIDEO && video_config_.is_encrypted())) {
|
| + if (!WebMCreateDecryptConfig(
|
| + packet->data, packet->size,
|
| + reinterpret_cast<const uint8*>(encryption_key_id_.data()),
|
| + encryption_key_id_.size(),
|
| + &decrypt_config,
|
| + &data_offset)) {
|
| + LOG(ERROR) << "Creation of DecryptConfig failed.";
|
| + }
|
| + }
|
| +
|
| // If a packet is returned by FFmpeg's av_parser_parse2() the packet will
|
| // reference inner memory of FFmpeg. As such we should transfer the packet
|
| // into memory we control.
|
| if (side_data_size > 0) {
|
| - buffer = DecoderBuffer::CopyFrom(packet.get()->data, packet.get()->size,
|
| + buffer = DecoderBuffer::CopyFrom(packet.get()->data + data_offset,
|
| + packet.get()->size - data_offset,
|
| side_data, side_data_size);
|
| } else {
|
| - buffer = DecoderBuffer::CopyFrom(packet.get()->data, packet.get()->size);
|
| + buffer = DecoderBuffer::CopyFrom(packet.get()->data + data_offset,
|
| + packet.get()->size - data_offset);
|
| }
|
|
|
| int skip_samples_size = 0;
|
| @@ -171,17 +188,9 @@ void FFmpegDemuxerStream::EnqueuePacket(ScopedAVPacket packet) {
|
| discard_padding_samples * 1000000.0 /
|
| audio_decoder_config().samples_per_second()));
|
| }
|
| - }
|
|
|
| - if ((type() == DemuxerStream::AUDIO && audio_config_.is_encrypted()) ||
|
| - (type() == DemuxerStream::VIDEO && video_config_.is_encrypted())) {
|
| - scoped_ptr<DecryptConfig> config(WebMCreateDecryptConfig(
|
| - packet->data, packet->size,
|
| - reinterpret_cast<const uint8*>(encryption_key_id_.data()),
|
| - encryption_key_id_.size()));
|
| - if (!config)
|
| - LOG(ERROR) << "Creation of DecryptConfig failed.";
|
| - buffer->set_decrypt_config(config.Pass());
|
| + if (decrypt_config)
|
| + buffer->set_decrypt_config(decrypt_config.Pass());
|
| }
|
|
|
| buffer->set_timestamp(ConvertStreamTimestamp(
|
|
|