Bug 1397141 - part4 : change mLastError type to MediaResult r=jya

Change mLastError type to MediaResult and send it as parameter to PDM::CreateVideoDecoder
in order to get detailed error description.

MozReview-Commit-ID: 4sIRXTHsrzr

--HG--
extra : rebase_source : 23d72cc72f5683305745024de913f44298d717d5
This commit is contained in:
Alastor Wu 2017-09-13 15:05:52 +08:00
Родитель b89748ad91
Коммит 1df67c03cc
3 изменённых файлов: 17 добавлений и 9 удалений

Просмотреть файл

@ -291,13 +291,16 @@ PDMFactory::CreateDecoderWithPDM(PlatformDecoderModule* aPDM,
if (MP4Decoder::IsH264(config.mMimeType) && !aParams.mUseNullDecoder) {
RefPtr<H264Converter> h = new H264Converter(aPDM, aParams);
const nsresult rv = h->GetLastError();
if (NS_SUCCEEDED(rv) || rv == NS_ERROR_NOT_INITIALIZED) {
const MediaResult result = h->GetLastError();
if (NS_SUCCEEDED(result) || result == NS_ERROR_NOT_INITIALIZED) {
// The H264Converter either successfully created the wrapped decoder,
// or there wasn't enough AVCC data to do so. Otherwise, there was some
// problem, for example WMF DLLs were missing.
m = h.forget();
}
if (NS_FAILED(result) && aParams.mError) {
*aParams.mError = result;
}
} else {
m = aPDM->CreateVideoDecoder(aParams);
}

Просмотреть файл

@ -259,15 +259,16 @@ H264Converter::CreateDecoder(const VideoInfo& aConfig,
// WMF H.264 Video Decoder and Apple ATDecoder do not support YUV444 format.
if (spsdata.profile_idc == 244 /* Hi444PP */ ||
spsdata.chroma_format_idc == PDMFactory::kYUV444) {
mLastError = NS_ERROR_FAILURE;
mLastError = MediaResult(NS_ERROR_FAILURE,
RESULT_DETAIL("Not support for YUV444 format."));
if (aDiagnostics) {
aDiagnostics->SetVideoNotSupported();
}
return NS_ERROR_FAILURE;
}
} else {
// SPS was invalid.
mLastError = NS_ERROR_FAILURE;
mLastError = MediaResult(NS_ERROR_FAILURE,
RESULT_DETAIL("Invalid SPS NAL."));
return NS_ERROR_FAILURE;
}
@ -280,11 +281,15 @@ H264Converter::CreateDecoder(const VideoInfo& aConfig,
mGMPCrashHelper,
mType,
mOnWaitingForKeyEvent,
mDecoderOptions
mDecoderOptions,
&mLastError
});
if (!mDecoder) {
mLastError = NS_ERROR_FAILURE;
MOZ_ASSERT(NS_FAILED(mLastError));
mLastError = MediaResult(mLastError.Code(),
RESULT_DETAIL("Unable to create H264 decoder, reason = %s.",
mLastError.Description().get()));
return NS_ERROR_FAILURE;
}

Просмотреть файл

@ -59,7 +59,7 @@ public:
// Default so no conversion is performed.
return ConversionRequired::kNeedAVCC;
}
nsresult GetLastError() const { return mLastError; }
MediaResult GetLastError() const { return mLastError; }
private:
// Will create the required MediaDataDecoder if need AVCC and we have a SPS NAL.
@ -99,7 +99,7 @@ private:
RefPtr<GMPCrashHelper> mGMPCrashHelper;
Maybe<bool> mNeedAVCC;
nsresult mLastError;
MediaResult mLastError;
bool mNeedKeyframe = true;
const TrackInfo::TrackType mType;
MediaEventProducer<TrackInfo::TrackType>* const mOnWaitingForKeyEvent;