Bug 1343437 - MFR::NotifyError reports non-fatal MediaResult as warning - r?jya
MozReview-Commit-ID: F16oZ2HwyeW
--- a/dom/media/MediaFormatReader.cpp
+++ b/dom/media/MediaFormatReader.cpp
@@ -1734,18 +1734,35 @@ MediaFormatReader::NotifyNewOutput(
}
void
MediaFormatReader::NotifyError(TrackType aTrack, const MediaResult& aError)
{
MOZ_ASSERT(OnTaskQueue());
NS_WARNING(aError.Description().get());
LOGV("%s Decoding error", TrackTypeToStr(aTrack));
- auto& decoder = GetDecoderData(aTrack);
- decoder.mError = decoder.HasFatalError() ? decoder.mError : Some(aError);
+ auto& decoderData = GetDecoderData(aTrack);
+ // If the decoder data already contained a fatal error, don't overwrite it...
+ if (!decoderData.HasFatalError()) {
+ // ... but if there was no fatal error yet, store this latest error.
+ decoderData.mError = Some(aError);
+ if (aError != NS_ERROR_DOM_MEDIA_NEED_NEW_DECODER
+ && !decoderData.HasFatalError()) {
+ // After storing the new error, if it is still not fatal (or just a
+ // request for a new decoder), report it as warning.
+ // (A fatal error will be handled later on.)
+ RefPtr<AbstractMediaDecoder> decoder = mDecoder;
+ mDecoder->AbstractMainThread()->Dispatch(NS_NewRunnableFunction(
+ [decoder, aError] () {
+ if (decoder->GetOwner()) {
+ decoder->GetOwner()->DecodeWarning(aError);
+ }
+ }));
+ }
+ }
ScheduleUpdate(aTrack);
}
void
MediaFormatReader::NotifyWaitingForData(TrackType aTrack)
{
MOZ_ASSERT(OnTaskQueue());
auto& decoder = GetDecoderData(aTrack);