Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(897)

Unified Diff: media/filters/ffmpeg_demuxer.cc

Issue 12263013: media: Add support for playback of VP8 Alpha video streams (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: adding pipeline integration test for vp8a Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/filters/ffmpeg_demuxer.cc
diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc
index ee899f0de0a0f9193514865b0834bf7fb38acef2..9139f6576798e9a7f1b3a57ed5659a8257df11de 100644
--- a/media/filters/ffmpeg_demuxer.cc
+++ b/media/filters/ffmpeg_demuxer.cc
@@ -95,6 +95,7 @@ FFmpegDemuxerStream::FFmpegDemuxerStream(
}
void FFmpegDemuxerStream::EnqueuePacket(ScopedAVPacket packet) {
+
scherkus (not reviewing) 2013/04/10 00:22:24 remove extra blank line
vignesh 2013/04/10 17:59:16 Done.
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.
+ av_packet_split_side_data(packet.get());
+ int side_data_size = 0;
+ uint8* 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())) {

Powered by Google App Engine
This is Rietveld 408576698