| Index: media/filters/ffmpeg_demuxer.cc
|
| diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc
|
| index ee899f0de0a0f9193514865b0834bf7fb38acef2..70f269f1139d08815830f35c9f4c3239c92aefd2 100644
|
| --- a/media/filters/ffmpeg_demuxer.cc
|
| +++ b/media/filters/ffmpeg_demuxer.cc
|
| @@ -95,6 +95,7 @@ FFmpegDemuxerStream::FFmpegDemuxerStream(
|
| }
|
|
|
| void FFmpegDemuxerStream::EnqueuePacket(ScopedAVPacket packet) {
|
| +
|
| DCHECK(message_loop_->BelongsToCurrentThread());
|
|
|
| if (stopped_ || end_of_stream_) {
|
| @@ -108,11 +109,26 @@ void FFmpegDemuxerStream::EnqueuePacket(ScopedAVPacket packet) {
|
| LOG(ERROR) << "Format conversion failed.";
|
| }
|
|
|
| + // Get side data if any. For now, the only type of side_data is VP8 Alpha. We
|
| + // keep this generic so that other side_data types in the future can be
|
| + // handled the same way as well.
|
| + uint8* side_data;
|
| + int side_data_size = 0;
|
| + av_packet_split_side_data(packet.get());
|
| + side_data = av_packet_get_side_data(packet.get(),
|
| + AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL,
|
| + &side_data_size);
|
| +
|
| // 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.
|
| scoped_refptr<DecoderBuffer> buffer;
|
| - buffer = DecoderBuffer::CopyFrom(packet->data, packet->size);
|
| + if (side_data_size > 0) {
|
| + buffer = DecoderBuffer::CopyFrom(packet.get()->data, packet.get()->size,
|
| + side_data, side_data_size);
|
| + } else {
|
| + buffer = DecoderBuffer::CopyFrom(packet.get()->data, packet.get()->size);
|
| + }
|
|
|
| if ((type() == DemuxerStream::AUDIO && audio_config_.is_encrypted()) ||
|
| (type() == DemuxerStream::VIDEO && video_config_.is_encrypted())) {
|
|
|