Chromium Code Reviews| 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; |
|
scherkus (not reviewing)
2013/04/04 22:54:00
nit: I'd declare + assign on same line
vignesh
2013/04/05 19:06:58
Done.
|
| + 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())) { |