Bug 1139779: Part3. Use dispay size extracted from SPS NAL. r=edwin

This also adds proper aspect ratio support.
This commit is contained in:
Jean-Yves Avenard 2015-03-10 21:19:41 +11:00
parent d52091b08c
commit 71076fcf84
2 changed files with 11 additions and 1 deletions

View File

@ -11,6 +11,7 @@
#include "mp4_demuxer/mp4_demuxer.h"
#include "mp4_demuxer/AnnexB.h"
#include "mp4_demuxer/H264.h"
#include "FFmpegH264Decoder.h"
@ -31,8 +32,15 @@ FFmpegH264Decoder<LIBAV_VER>::FFmpegH264Decoder(
: FFmpegDataDecoder(aTaskQueue, GetCodecId(aConfig.mime_type))
, mCallback(aCallback)
, mImageContainer(aImageContainer)
, mDisplayWidth(aConfig.display_width)
, mDisplayHeight(aConfig.display_height)
{
MOZ_COUNT_CTOR(FFmpegH264Decoder);
mp4_demuxer::SPSData spsdata;
if (mp4_demuxer::H264::DecodeSPSFromExtraData(aConfig.extra_data, spsdata)) {
mDisplayWidth = spsdata.display_width;
mDisplayHeight = spsdata.display_height;
}
}
nsresult
@ -91,7 +99,7 @@ FFmpegH264Decoder<LIBAV_VER>::DoDecodeFrame(mp4_demuxer::MP4Sample* aSample)
// If we've decoded a frame then we need to output it
if (decoded) {
VideoInfo info;
info.mDisplay = nsIntSize(mCodecContext->width, mCodecContext->height);
info.mDisplay = nsIntSize(mDisplayWidth, mDisplayHeight);
info.mStereoMode = StereoMode::MONO;
info.mHasVideo = true;

View File

@ -62,6 +62,8 @@ private:
MediaDataDecoderCallback* mCallback;
nsRefPtr<ImageContainer> mImageContainer;
uint32_t mDisplayWidth;
uint32_t mDisplayHeight;
};
} // namespace mozilla