Bug 1400758 - part3 : report the error description with InitPromise for ffmpeg decoders.
MozReview-Commit-ID: 3MGmU34JY3t
--- 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()
{