diff --git a/dom/media/fmp4/PlatformDecoderModule.cpp b/dom/media/fmp4/PlatformDecoderModule.cpp index 516fa3bfe86a..a1bdc6222eda 100644 --- a/dom/media/fmp4/PlatformDecoderModule.cpp +++ b/dom/media/fmp4/PlatformDecoderModule.cpp @@ -149,9 +149,10 @@ PlatformDecoderModule::CreatePDM() #endif #ifdef MOZ_FFMPEG if (sFFmpegDecoderEnabled) { - nsRefPtr m(FFmpegRuntimeLinker::CreateDecoderModule()); + nsRefPtr m = FFmpegRuntimeLinker::CreateDecoderModule(); if (m) { - return m.forget(); + nsRefPtr m2(new AVCCDecoderModule(m)); + return m2.forget(); } } #endif diff --git a/dom/media/fmp4/ffmpeg/FFmpegDecoderModule.h b/dom/media/fmp4/ffmpeg/FFmpegDecoderModule.h index fed889f456ae..dbb62dbd527c 100644 --- a/dom/media/fmp4/ffmpeg/FFmpegDecoderModule.h +++ b/dom/media/fmp4/ffmpeg/FFmpegDecoderModule.h @@ -63,6 +63,11 @@ public: return FFmpegH264Decoder::GetCodecId(aMimeType) != AV_CODEC_ID_NONE; } + virtual bool DecoderNeedsAVCC(const mp4_demuxer::VideoDecoderConfig& aConfig) MOZ_OVERRIDE + { + return true; + } + }; } // namespace mozilla diff --git a/dom/media/fmp4/ffmpeg/FFmpegH264Decoder.cpp b/dom/media/fmp4/ffmpeg/FFmpegH264Decoder.cpp index 6c26c75cfae0..00dd224f26e7 100644 --- a/dom/media/fmp4/ffmpeg/FFmpegH264Decoder.cpp +++ b/dom/media/fmp4/ffmpeg/FFmpegH264Decoder.cpp @@ -36,6 +36,7 @@ FFmpegH264Decoder::FFmpegH264Decoder( , mDisplayHeight(aConfig.display_height) { MOZ_COUNT_CTOR(FFmpegH264Decoder); + mExtraData = aConfig.extra_data; mp4_demuxer::SPSData spsdata; if (mp4_demuxer::H264::DecodeSPSFromExtraData(aConfig.extra_data, spsdata)) { mDisplayWidth = spsdata.display_width; @@ -61,12 +62,6 @@ FFmpegH264Decoder::DoDecodeFrame(mp4_demuxer::MP4Sample* aSample) AVPacket packet; av_init_packet(&packet); - if (!mp4_demuxer::AnnexB::ConvertSampleToAnnexB(aSample)) { - NS_WARNING("FFmpeg h264 decoder failed to convert sample to Annex B."); - mCallback->Error(); - return DecodeResult::DECODE_ERROR; - } - if (!aSample->Pad(FF_INPUT_BUFFER_PADDING_SIZE)) { NS_WARNING("FFmpeg h264 decoder failed to allocate sample."); mCallback->Error();