Bug 1413076 - return other kind of error in addition to OOM. r=jya

MozReview-Commit-ID: CpRF1Kr5Z2c

--HG--
extra : rebase_source : 56dbc1926d5e051ad5261d4bd495c9fbe5c26833
This commit is contained in:
Alfredo.Yang 2017-10-31 10:13:51 +08:00
parent 87bb5d8d3f
commit 4e9d007f90
2 changed files with 20 additions and 17 deletions

View File

@ -120,11 +120,12 @@ H264Converter::Decode(MediaRawData* aSample)
return DecodePromise::CreateAndResolve(DecodedData(), __func__);
}
if (!*mNeedAVCC &&
mp4_demuxer::AnnexB::ConvertSampleToAnnexB(aSample, mNeedKeyframe).isErr()) {
auto res = !*mNeedAVCC
? mp4_demuxer::AnnexB::ConvertSampleToAnnexB(aSample, mNeedKeyframe)
: Ok();
if (res.isErr()) {
return DecodePromise::CreateAndReject(
MediaResult(NS_ERROR_OUT_OF_MEMORY,
RESULT_DETAIL("ConvertSampleToAnnexB")),
MediaResult(res.unwrapErr(), RESULT_DETAIL("ConvertSampleToAnnexB")),
__func__);
}
@ -374,11 +375,13 @@ H264Converter::DecodeFirstSample(MediaRawData* aSample)
return;
}
if (!*mNeedAVCC &&
mp4_demuxer::AnnexB::ConvertSampleToAnnexB(aSample, mNeedKeyframe).isErr()) {
mDecodePromise.Reject(MediaResult(NS_ERROR_OUT_OF_MEMORY,
RESULT_DETAIL("ConvertSampleToAnnexB")),
__func__);
auto res = !*mNeedAVCC
? mp4_demuxer::AnnexB::ConvertSampleToAnnexB(aSample, mNeedKeyframe)
: Ok();
if (res.isErr()) {
mDecodePromise.Reject(
MediaResult(res.unwrapErr(), RESULT_DETAIL("ConvertSampleToAnnexB")),
__func__);
return;
}

View File

@ -47,20 +47,20 @@ AnnexB::ConvertSampleToAnnexB(mozilla::MediaRawData* aSample, bool aAddSPS)
const uint8_t* p = reader.Read(nalLen);
if (!writer.Write(kAnnexBDelimiter, ArrayLength(kAnnexBDelimiter))) {
return Err(NS_ERROR_FAILURE);
return Err(NS_ERROR_OUT_OF_MEMORY);
}
if (!p) {
break;
}
if (!writer.Write(p, nalLen)) {
return Err(NS_ERROR_FAILURE);
return Err(NS_ERROR_OUT_OF_MEMORY);
}
}
nsAutoPtr<MediaRawDataWriter> samplewriter(aSample->CreateWriter());
if (!samplewriter->Replace(tmp.Elements(), tmp.Length())) {
return Err(NS_ERROR_FAILURE);
return Err(NS_ERROR_OUT_OF_MEMORY);
}
// Prepend the Annex B NAL with SPS and PPS tables to keyframes.
@ -68,7 +68,7 @@ AnnexB::ConvertSampleToAnnexB(mozilla::MediaRawData* aSample, bool aAddSPS)
RefPtr<MediaByteBuffer> annexB =
ConvertExtraDataToAnnexB(aSample->mExtraData);
if (!samplewriter->Prepend(annexB->Elements(), annexB->Length())) {
return Err(NS_ERROR_FAILURE);
return Err(NS_ERROR_OUT_OF_MEMORY);
}
// Prepending the NAL with SPS/PPS will mess up the encryption subsample
@ -222,7 +222,7 @@ ParseNALUnits(ByteWriter& aBw, BufferReader& aBr)
aBr.Seek(startOffset);
if (!aBw.WriteU32(sizeNAL)
|| !aBw.Write(aBr.Read(sizeNAL), sizeNAL)) {
return Err(NS_ERROR_FAILURE);
return Err(NS_ERROR_OUT_OF_MEMORY);
}
aBr.Read(startSize);
startOffset = offset;
@ -232,7 +232,7 @@ ParseNALUnits(ByteWriter& aBw, BufferReader& aBr)
if (sizeNAL) {
if (!aBw.WriteU32(sizeNAL)
|| !aBw.Write(aBr.Read(sizeNAL), sizeNAL)) {
return Err(NS_ERROR_FAILURE);
return Err(NS_ERROR_OUT_OF_MEMORY);
}
}
return Ok();
@ -305,12 +305,12 @@ AnnexB::ConvertSampleTo4BytesAVCC(mozilla::MediaRawData* aSample)
}
if (!writer.WriteU32(nalLen)
|| !writer.Write(p, nalLen)) {
return Err(NS_ERROR_FAILURE);
return Err(NS_ERROR_OUT_OF_MEMORY);
}
}
nsAutoPtr<MediaRawDataWriter> samplewriter(aSample->CreateWriter());
if (!samplewriter->Replace(dest.Elements(), dest.Length())) {
return Err(NS_ERROR_FAILURE);
return Err(NS_ERROR_OUT_OF_MEMORY);
}
return Ok();
}