author | Jean-Yves Avenard <jyavenard@mozilla.com> |
Thu, 13 Aug 2020 02:15:58 +0000 | |
changeset 544500 | d6c1978bcabea9bbadd17764a249a504577e3ca9 |
parent 544499 | 791287b954142d17ae82c82ce9a4cf992d36eeea |
child 544501 | a0b9da32637e3aa75aa5386a66ac21030d1c6f1a |
push id | 124072 |
push user | jyavenard@mozilla.com |
push date | Thu, 13 Aug 2020 04:30:00 +0000 |
treeherder | autoland@d6c1978bcabe [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | jolin |
bugs | 1657521 |
milestone | 81.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
dom/media/platforms/PlatformDecoderModule.h | file | annotate | diff | comparison | revisions | |
dom/media/platforms/wrappers/MediaChangeMonitor.cpp | file | annotate | diff | comparison | revisions |
--- a/dom/media/platforms/PlatformDecoderModule.h +++ b/dom/media/platforms/PlatformDecoderModule.h @@ -61,17 +61,17 @@ struct MOZ_STACK_CLASS CreateDecoderPara using OptionSet = EnumSet<Option>; struct UseNullDecoder { UseNullDecoder() = default; explicit UseNullDecoder(bool aUseNullDecoder) : mUse(aUseNullDecoder) {} bool mUse = false; }; - // Do not wrap H264 decoder in a H264Converter. + // Do not wrap decoder in a MediaChangeMonitor. struct NoWrapper { NoWrapper() = default; explicit NoWrapper(bool aDontUseWrapper) : mDontUseWrapper(aDontUseWrapper) {} bool mDontUseWrapper = false; }; struct VideoFrameRate {
--- a/dom/media/platforms/wrappers/MediaChangeMonitor.cpp +++ b/dom/media/platforms/wrappers/MediaChangeMonitor.cpp @@ -466,20 +466,29 @@ MediaResult MediaChangeMonitor::CreateDe MediaResult error = NS_OK; mDecoder = mPDM->CreateVideoDecoder( {mCurrentConfig, mTaskQueue, aDiagnostics, mImageContainer, mKnowsCompositor, mGMPCrashHelper, mType, mOnWaitingForKeyEvent, mDecoderOptions, mRate, &error}); if (!mDecoder) { - if (NS_FAILED(error)) { - // The decoder supports CreateDecoderParam::mError, returns the value. - return error; - } else { + // We failed to create a decoder with the existing PDM; attempt once again + // with a PDMFactory. + RefPtr<PDMFactory> factory = new PDMFactory(); + mDecoder = factory->CreateDecoder( + {mCurrentConfig, mTaskQueue, aDiagnostics, mImageContainer, + mKnowsCompositor, mGMPCrashHelper, mType, mOnWaitingForKeyEvent, + mDecoderOptions, mRate, &error, CreateDecoderParams::NoWrapper(true)}); + + if (!mDecoder) { + if (NS_FAILED(error)) { + // The decoder supports CreateDecoderParam::mError, returns the value. + return error; + } return MediaResult(NS_ERROR_DOM_MEDIA_FATAL_ERR, RESULT_DETAIL("Unable to create decoder")); } } DDLINKCHILD("decoder", mDecoder.get()); mDecoderInitialized = false;