Bug 1400758 - part3 : report the error description with InitPromise for ffmpeg decoders. draft
authorAlastor Wu <alwu@mozilla.com>
Mon, 18 Sep 2017 18:10:05 +0800
changeset 666243 b78843056a586642548b36524ac2b2408d7acf9d
parent 666242 eba38d2d663018b71db3aaf0e552ba5161e6b226
child 732033 5ba619f9c144f3a1ecc90838fe22b5bf6cbaeead
push id80334
push useralwu@mozilla.com
push dateMon, 18 Sep 2017 10:10:09 +0000
bugs1400758
milestone57.0a1
Bug 1400758 - part3 : report the error description with InitPromise for ffmpeg decoders. MozReview-Commit-ID: 3MGmU34JY3t
dom/media/platforms/ffmpeg/FFmpegAudioDecoder.cpp
dom/media/platforms/ffmpeg/FFmpegDataDecoder.cpp
dom/media/platforms/ffmpeg/FFmpegDataDecoder.h
dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp
--- a/dom/media/platforms/ffmpeg/FFmpegAudioDecoder.cpp
+++ b/dom/media/platforms/ffmpeg/FFmpegAudioDecoder.cpp
@@ -25,22 +25,21 @@ FFmpegAudioDecoder<LIBAV_VER>::FFmpegAud
     mExtraData = new MediaByteBuffer;
     mExtraData->AppendElements(*aConfig.mCodecSpecificConfig);
   }
 }
 
 RefPtr<MediaDataDecoder::InitPromise>
 FFmpegAudioDecoder<LIBAV_VER>::Init()
 {
-  nsresult rv = InitDecoder();
+  MediaResult rv = InitDecoder();
 
-  return rv == NS_OK
+  return NS_SUCCEEDED(rv)
          ? InitPromise::CreateAndResolve(TrackInfo::kAudioTrack, __func__)
-         : InitPromise::CreateAndReject(NS_ERROR_DOM_MEDIA_FATAL_ERR,
-                                        __func__);
+         : InitPromise::CreateAndReject(rv, __func__);
 }
 
 void
 FFmpegAudioDecoder<LIBAV_VER>::InitCodecContext()
 {
   MOZ_ASSERT(mCodecContext);
   // We do not want to set this value to 0 as FFmpeg by default will
   // use the number of cores, which with our mozlibavutil get_cpu_count
--- a/dom/media/platforms/ffmpeg/FFmpegDataDecoder.cpp
+++ b/dom/media/platforms/ffmpeg/FFmpegDataDecoder.cpp
@@ -33,32 +33,32 @@ FFmpegDataDecoder<LIBAV_VER>::FFmpegData
   MOZ_COUNT_CTOR(FFmpegDataDecoder);
 }
 
 FFmpegDataDecoder<LIBAV_VER>::~FFmpegDataDecoder()
 {
   MOZ_COUNT_DTOR(FFmpegDataDecoder);
 }
 
-nsresult
+MediaResult
 FFmpegDataDecoder<LIBAV_VER>::InitDecoder()
 {
   FFMPEG_LOG("Initialising FFmpeg decoder.");
 
   AVCodec* codec = FindAVCodec(mLib, mCodecID);
   if (!codec) {
-    NS_WARNING("Couldn't find ffmpeg decoder");
-    return NS_ERROR_FAILURE;
+    return MediaResult(NS_ERROR_DOM_MEDIA_FATAL_ERR,
+                       RESULT_DETAIL("Couldn't find ffmpeg decoder"));
   }
 
   StaticMutexAutoLock mon(sMonitor);
 
   if (!(mCodecContext = mLib->avcodec_alloc_context3(codec))) {
-    NS_WARNING("Couldn't init ffmpeg context");
-    return NS_ERROR_FAILURE;
+    return MediaResult(NS_ERROR_OUT_OF_MEMORY,
+                       RESULT_DETAIL("Couldn't init ffmpeg context"));
   }
 
   mCodecContext->opaque = this;
 
   InitCodecContext();
 
   if (mExtraData) {
     mCodecContext->extradata_size = mExtraData->Length();
@@ -70,20 +70,20 @@ FFmpegDataDecoder<LIBAV_VER>::InitDecode
     mCodecContext->extradata_size = 0;
   }
 
   if (codec->capabilities & CODEC_CAP_DR1) {
     mCodecContext->flags |= CODEC_FLAG_EMU_EDGE;
   }
 
   if (mLib->avcodec_open2(mCodecContext, codec, nullptr) < 0) {
-    NS_WARNING("Couldn't initialise ffmpeg decoder");
     mLib->avcodec_close(mCodecContext);
     mLib->av_freep(&mCodecContext);
-    return NS_ERROR_FAILURE;
+    return MediaResult(NS_ERROR_DOM_MEDIA_FATAL_ERR,
+                       RESULT_DETAIL("Couldn't initialise ffmpeg decoder"));
   }
 
   FFMPEG_LOG("FFmpeg init successful.");
   return NS_OK;
 }
 
 RefPtr<ShutdownPromise>
 FFmpegDataDecoder<LIBAV_VER>::Shutdown()
--- a/dom/media/platforms/ffmpeg/FFmpegDataDecoder.h
+++ b/dom/media/platforms/ffmpeg/FFmpegDataDecoder.h
@@ -38,17 +38,17 @@ public:
   static AVCodec* FindAVCodec(FFmpegLibWrapper* aLib, AVCodecID aCodec);
 
 protected:
   // Flush and Drain operation, always run
   virtual RefPtr<FlushPromise> ProcessFlush();
   virtual void ProcessShutdown();
   virtual void InitCodecContext() { }
   AVFrame*        PrepareFrame();
-  nsresult        InitDecoder();
+  MediaResult     InitDecoder();
 
   FFmpegLibWrapper* mLib;
 
   AVCodecContext* mCodecContext;
   AVFrame*        mFrame;
   RefPtr<MediaByteBuffer> mExtraData;
   AVCodecID mCodecID;
 
--- a/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp
+++ b/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp
@@ -120,18 +120,19 @@ FFmpegVideoDecoder<LIBAV_VER>::FFmpegVid
   // initialization.
   mExtraData = new MediaByteBuffer;
   mExtraData->AppendElements(*aConfig.mExtraData);
 }
 
 RefPtr<MediaDataDecoder::InitPromise>
 FFmpegVideoDecoder<LIBAV_VER>::Init()
 {
-  if (NS_FAILED(InitDecoder())) {
-    return InitPromise::CreateAndReject(NS_ERROR_DOM_MEDIA_FATAL_ERR, __func__);
+  MediaResult rv = InitDecoder();
+  if (NS_FAILED(rv)) {
+    return InitPromise::CreateAndReject(rv, __func__);
   }
 
   return InitPromise::CreateAndResolve(TrackInfo::kVideoTrack, __func__);
 }
 
 void
 FFmpegVideoDecoder<LIBAV_VER>::InitCodecContext()
 {