mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-13 13:25:37 +00:00
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:
parent
87bb5d8d3f
commit
4e9d007f90
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user