Index: media/filters/ffmpeg_demuxer.cc |
diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc |
index 535116ffebd3e4b000f1818ca44d84f8c8f1cc17..af2a7826bc5faa6d56ff131407f8eda5a2b2a6d9 100644 |
--- a/media/filters/ffmpeg_demuxer.cc |
+++ b/media/filters/ffmpeg_demuxer.cc |
@@ -36,7 +36,8 @@ FFmpegDemuxerStream::FFmpegDemuxerStream( |
stream_(stream), |
type_(UNKNOWN), |
stopped_(false), |
- last_packet_timestamp_(kNoTimestamp()) { |
+ last_packet_timestamp_(kNoTimestamp()), |
+ bitstream_converter_enabled_(false) { |
DCHECK(demuxer_); |
// Determine our media format. |
@@ -56,6 +57,11 @@ FFmpegDemuxerStream::FFmpegDemuxerStream( |
// Calculate the duration. |
duration_ = ConvertStreamTimestamp(stream->time_base, stream->duration); |
+ |
+ if (stream_->codec->codec_id == CODEC_ID_H264) { |
+ bitstream_converter_.reset( |
+ new FFmpegH264ToAnnexBBitstreamConverter(stream_->codec)); |
+ } |
} |
bool FFmpegDemuxerStream::HasPendingReads() { |
@@ -81,7 +87,7 @@ void FFmpegDemuxerStream::EnqueuePacket( |
buffer = DecoderBuffer::CreateEOSBuffer(); |
} else { |
// Convert the packet if there is a bitstream filter. |
- if (packet->data && bitstream_converter_.get() && |
+ if (packet->data && bitstream_converter_enabled_ && |
!bitstream_converter_->ConvertPacket(packet.get())) { |
LOG(ERROR) << "Format converstion failed."; |
} |
@@ -209,12 +215,8 @@ void FFmpegDemuxerStream::FulfillPendingRead() { |
void FFmpegDemuxerStream::EnableBitstreamConverter() { |
base::AutoLock auto_lock(lock_); |
- // Called by hardware decoder to require different bitstream converter. |
- // Currently we assume that converter is determined by codec_id; |
- DCHECK(stream_); |
- DCHECK_EQ(stream_->codec->codec_id, CODEC_ID_H264); |
- bitstream_converter_.reset( |
- new FFmpegH264ToAnnexBBitstreamConverter(stream_->codec)); |
+ CHECK(bitstream_converter_.get()); |
+ bitstream_converter_enabled_ = true; |
} |
const AudioDecoderConfig& FFmpegDemuxerStream::audio_decoder_config() { |