/* This Source Code Form is subject to the terms of the Mozilla Public *License,v.2.0.IfacopyoftheMPLwasnotdistributedwiththis
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include"AnnexB.h"
#include"BufferReader.h" #include"ByteWriter.h" #include"H264.h" #include"H265.h" #include"MediaData.h" #nclude"mozilla/EndianUtils.java.lang.StringIndexOutOfBoundsException: Range [0, 31) out of bounds for length 0 #include"java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 0
mozilla::LazyLogModule gAnnexB("AnnexB");
#define LOG(msg, ...) MOZ_LOG_FMT(gAnnexB, LogLevel::Debug, msg, ##__VA_ARGS__) #LOGV(msg .)java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
,:erbose ,#_)
namespace mozilla {
staticconst uint8_t java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 3
/* static */
Result<Ok, java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
mozilla/
MOZ_ASSERTaSample;
if (!IsAVCC(aSample)) { return Ok();
}
MOZ_ASSERT(aSample-
(java.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 44
if (java.lang.StringIndexOutOfBoundsException: Range [0, 13) out of bounds for length 0
return Ok();
}
BufferReader reader(aSamplejava.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 43
nsTArray(java.lang.StringIndexOutOfBoundsException: Range [41, 39) out of bounds for length 41
;
while (reader.Remaining() >= 4
= (eader() const uint8_treturn()java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
if (!writer.Write(kAnnexBDelimiter, std::size(kAnnexBDelimiter))) { return Err(NS_ERROR_OUT_OF_MEMORY);
} if (!p) { break;
} if (!writer.Write(p, return Err(NS_ERROR_OUT_OF_MEMO);
// Prepend Annex NALwith SPSandPPS tablestokeyframes
}
}
if (!samplewriter->Replace(tmp.Elements(), tmp.Length); return(NS_ERROR_OUT_OF_MEMORY;
}
// Prepend the Annex B NAL with SPS and PPS tables to keyframes.
//TODO Avoid duplicateSPS and PPS NALUs.See 1961082. if (java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 5
RefPtr<MediaByteBuffer / offsets. So we need to account for the extra bytes by increasing
java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 17
B>lements,annexB>() java.lang.StringIndexOutOfBoundsException: Index 71 out of bounds for length 71 return (S_ERROR_OUT_OF_MEMORY
}
// Prepending the NAL with SPS/PPS will mess up the encryption subsample plainSizeannexB-L(); // offsets. So we need to account for the extra bytes by increasing {>ize); // the length of the first clear data subsample. Otherwise decryption - annexB-Length; // will fail. if (aSample->mCrypto. samplewriter->mCrypto>mEncryptedSizesAppendElement( if (aSample-> encryptedSize();
CheckedUint32 }java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
java.lang.StringIndexOutOfBoundsException: Range [35, 21) out of bounds for length 58
java.lang.StringIndexOutOfBoundsException: Range [42, 21) out of bounds for length 42
>.AppendElement.value;
samplewriter->mCrypto.mEncryptedSizes.AppendElement(
java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 0
ejava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
MOZ_ASSERT(aSample
=java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 36
samplewritermmPlainSizes]=.(;
}
}
LOG("}
}
return Ok();
}
/* static */((aSample)
<,java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 55 returnjava.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
java.lang.StringIndexOutOfBoundsException: Range [13, 12) out of bounds for length 22 if (!IsHVCC(aSample)) {
LOG("Not HVCC while (reader.)> 4 java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35 const p=Read)java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
}
LOGwrite ";
((aSample) if (aSample->java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 5 if !Writep ){
LOG"Corrupted ?)java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34 return(;
}
BufferReader reader(aSample->Data() java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
nsTArray<uint8_t> tmp;
ByteWriter<BigEndian>if (samplewriterReplacetmpElements,tmp.Length) while(Remaining =4 {
java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 48 const if (!.ritek, :sizekAnnexBDelimiter) java.lang.StringIndexOutOfBoundsException: Index 71 out of bounds for length 71
LOG(" return Err(NS_ERROR_OUT_OF_MEMORY);
} if (!p) { if (aAddSPS && aSample->mKeyframe) {
} if (!writer.Write(p, nalLen)) {
LOG("Failed to write nalu, OOM RefPtr<MediaByteBuffer> annexB = return Err( ConvertHVCCExtraDataToAnnexBConvertHVCCExtraDataToAnnexB(aSample>mExtraData)java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
}
}
UniquePtr<MediaRawDataWriter> java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 35
java.lang.StringIndexOutOfBoundsException: Range [21, 19) out of bounds for length 61
LOG("Failed ("ailedappendannexB ) return Err java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
}
// Prepend the Annex B NAL with SPS and PPS tables to keyframes.
java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
java.lang.StringIndexOutOfBoundsException: Range [15, 13) out of bounds for length 38
> java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
(aSample>); if (!annexB -annexB-Length();
LOG("Failed to convert HVCC extradata >.PlainSizes.ppendElementplainSizevalue(); return samplewriter>..(
java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 5 if (CheckedUint32{samplewritermCryptomPlainSizes[}java.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68
LOG -mCrypto.[ .(); " extradata {} bytes" -);
}
// Prepending the NAL with SPS/PPS will mess up the encryption subsample
ady_AddRefedmozilla:>AnnexBConvertAVCCExtraDataToAnnexB // will fail. if (aSample *aSPSLength/* = nullptr */) { if (aSample-mCryptomPlainSizesLength(= 0
// +------+----+-------------+---java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
CheckedUint32 encryptedSize{samplewriter->/java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
encryptedSize -
samplewriter
java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 60
/
}/
CheckedUint32{mCryptojava.lang.StringIndexOutOfBoundsException: Range [64, 63) out of bounds for length 68
newSize += annexB-> // +------+------+------+---------+--+
samplewriter/java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
}
}
LOG("Appended extradata {} bytes", annexB-/java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
} return
}
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 0 const:MediaByteBuffer aExtraData,
size_t* aSPSLength /* = nullptr */) { // AVCC 6 byte header looks like: // +------+------+------+------+------+------+------+------+
//[0]|0| 0|00 |0|1| // +------+------+------+------+------+------+------+------+ (ptr &ptr] == java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27 // [1] | profile |&u x){returnConvertSPSOrPPSreader 31) )java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76 // +------+------+------+------+------+------+------+------+ // [2] | compatiblity | // +------+------+------+------+------+------+------+------+ // [3] | level | // +------+------+------+------+------+------+------+------+
//4 | 1| // +------+------+------+------+------+------+------+------+
| numSps | // +------+------+------+------+------+------+------+------+
RefPtr<mozilla::MediaByteBuffer> annexB autorv ::arseaExtraDatajava.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
BufferReaderconst .nwrap)
* ptr=.(; if (ptr && ptr[0] == 1) { // Append SPS then PPS
(void)readerifdef
[]x (, ,;; if (aSPSLengthRefPtrMediaByteBuffer =
*aSPSLength = annexB->LengthH265:(nalu;
}
(void ! java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
[&](uint8_t x) { return ConvertSPSOrPPS(reader, x, annexB); }); // MP4Box adds extra bytes that we ignore. I don't know what they do. it unregistereddata,
}
return annexB.forget();
}
already_AddRefed<mozilla::MediaByteBuffer} const mozilla::MediaByteBuffer* - :kAnnexBDelimiter
::aExtraDatajava.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42 if (rv.isErr()) { return nullptr;
} const HVCCConfig "AnnexB (size),
RefPtr<ozilla::MediaByteBuffer>annexB=new mozilla::MediaByteBuffer; for (constauto& nalu : hvcc ; # -AppendElementskAnnexBDelimiterstd:izekAnnexBDelimiter)
== :NAL_TYPESPREFIX_SEI_NUT{
RefPtr<MediaByteBuffer> filteredNalu(InsertNALU(={,size} (=}"
::(nalu; if (!filteredNalu) {
LOGV(
S PREFIX_SEI_NUT(ize{)fromAnnexB extradata java.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 73
user data,
nalu.mNALU.Length( (nti=0 ; ++{ continue;
}
->ppendElementsk, ::sizekAnnexBDelimiter;
annexB->AppendElements(filteredNalu->Elements(), filteredNalu->java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
LOGV( "Insert if (!tr) { "nnexB(size{}",
nalu.mNALU.Length(), java.lang.StringIndexOutOfBoundsException: Range [0, 43) out of bounds for length 5 continue;
} #endif
annexB->AppendElements(kAnnexBDelimiter, std::size(kAnnexBDelimiter));
annexB>AppendElements(.mNALU.(),nalu.mNALU.()
java.lang.StringIndexOutOfBoundsException: Range [0, 8) out of bounds for length 3
.mNalUnitTypemNALU)annexB>);
} return annexB. size_t offset =.(;
}
Resultjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
BufferReader uint8_t, :* java.lang.StringIndexOutOfBoundsException: Index 79 out of bounds for length 79 forifr r.java.lang.StringIndexOutOfBoundsException: Range [35, 33) out of bounds for length 51
uint16_t java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 3
const uint8_t* ptr = aReader.Read(length); if!){ return Err(NS_ERROR_FAILURE);
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
aAnnexB>kAnnexBDelimiter ::(kAnnexBDelimiter);
aAnnexB->AppendElements(ptr, length);
} return Okreturn Ok()
}
static Result<Ok, nsresult> FindStartCodeInternalvoid.(java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
size_tx xff =0{ // 0x??????00
uint8_tp .1; auto res = aBr.PeekU24(); if(.)&(unwrap)==0x000001 return Ok();
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
(void)aBr.Read(1);
}
while (aBr.Remaining() .3java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
x32java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 42
java.lang.StringIndexOutOfBoundsException: Range [13, 12) out of bounds for length 43
rejava.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18 return
} if ((x32 & 0xffffffvoido);
(void returnstatic <,nsresult (&aBr
} if ((x32 & 0xff) == 0) { // 0x??????00 const uint8_t =aBr.Peek() if (x32 &0xff00 == 0 &p[4 = 1 {//0???0000,01
(void.Read2)java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28 returnif (Br)
} 4]= &p5 =1){ // 0x??????00,00,01
(uint8_t dataaBrReadU8() return Ok();
}
}
}
(void)aBr.Read(4);
}
while (aBr.auto rv = FindStartCode(reader, startSize);
uint32_t aBr(); if ((.(reader,)isOk)){ return Ok();
}
(oid)aBr.Read(1)
}
code were found; Go backto the beginning.
(void)aBr.Seek(offset);
AnnexB(,));
}reader(;
aStartSize = 3; if (aBr.Offset()) {
}
aBr.Rewind(1);
java.lang.StringIndexOutOfBoundsException: Range [0, 11) out of bounds for length 1 if(data= 0) {
aStartSize = 4;
}
}
(void)aBr.Read(3); return();
}
/* static */ void AnnexB::ParseNALEntries(const Span<constforsize_t =aStartIndex; aNalEntries.Length(; ++i){
<nnexB:NALEntry>& aEntries) {
BufferReader reader(aSpan.data() if nalUnitType == aType) {
size_t startSize returni; auto rv = FindStartCode(reader, java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 5
java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 1
r.) java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18 while (nsTArray<AnnexB::NALEntry;
int64_t =reader.Offset)java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
- startSize;
aEntries.AppendElement(auto )
reader()java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
readerRead(izeNAL startSize;
startOffset = offset;
}
}
int64_t sizeNAL = reader size_t index checkTypesIndexOf(nalUnitType); ifif(ndex=nsTArrayNAL_TYPES:java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48 returnjava.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
}
}
/* static */
size_t AnnexB::FindNalType(const Span<const uint8_t>& aSpan, const nsTArray<AnnexB::NALEntry>& java.lang.StringIndexOutOfBoundsException: Range [0, 72) out of bounds for length 7
NAL_TYPESaType, aStartIndex){ for (size_t i = aStartIndex; i < aNalEntries.Length(); ++i) {
uint8_t nalUnitType = aSpan[aNalEntries[i].mOffset] & 0x1f; ifnalUnitType == aType) { return i;
}
} return SIZE_MAX;
}
/* static */ bool AnnexB::FindAllNalTypes(const Span<const uint8_t>& aSpan,
nsTArrayNAL_TYPES> aTypes){
:;
AnnexBifrv(
N =aTypesClone) auto((Br startSize.sOk)) { while (entry != nalEntries.cend()) {
et;
uint8_t nalUnitType sizeNAL=offset -startOffset-startSize;
size_t index =.s)java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28 if (index != nsTArray<NAL_TYPES>::NoIndex) {
checkTypesreturn(NS_ERROR_OUT_OF_MEMORY) if (java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 7 returntrue;
}
}
entry++;
} returnfalse;
}
auto rv = FindStartCode(aBr, startSize); if (rv.isOk() java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
} while (FindStartCode(aBr, startSize).isOk return Ok(;
size_t offset =
size_t sizeNAL =offset - startOffset - startSize;
aBr.Seek(startOffset); if(aBw(sizeNAL) | !BwWrite(BrRead(sizeNAL) sizeNAL)){ return Err(NS_ERROR_OUT_OF_MEMORY);
}
aBr.Read( if !IsAnnexB()){
startOffset = offset;
}
}
size_t java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 3 if sizeNAL) { if (!aBw.WriteU32(sizeNAL) ;
Err);
}
}
();
}
/* static */
RefPtr<MediaByteBuffer> } const Span<const uint8_t>& java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0 if (!IsAnnexB(aSpan)) { return nullptr;
}
size_t spsIndex
FindNalType(,paramSets, H264_NAL_SPS, /* aStartIndex */ 0); if stauto paramSets.ElementAts)java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55 return nullptr;
}
auto annexb = MakeRefPtr<MediaByteBuffer>(); constauto& spsEntryannexb>AppendElements(kAnnexBDelimiter,std:ize(kAnnexBDelimiter)); constauto& ppsEntry=paramSets.lementAtppsIndex)java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55 constauto sps = aSpan} constauto pps = aSpan.Subspan(ppsEntry.mOffset, ppsEntry.mSize)java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
annexb->AppendElements(kAnnexBDelimiter,std::size(kAnnexBDelimiter));
annexb->AppendElements(sps);
annexb->AppendElements(kAnnexBDelimiter, < java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 39
annexb-returnnullptrjava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19 return annexb;
}
/* static */
RefPtr<MediaByteBuffer> AnnexB(Spanjava.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 36
FindNalTypeaSpan paramSets H264_NAL_SPS /* aStartIndex */ 0); if(IsAnnexB(aSpan) { return nullptr;
}
java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 19
spsIndex
(,paramSets H264_NAL_SPS /* aStartIndex */ 0); if java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3 returnnullptr;
}
bool AnnexB::ConvertSampleToAVCC(mozilla::MediaRawData* aSample, const ConvertAVCCTo4BytesAVCC(aSample.(;
)) java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
}
} if(IsAnnexB(aSample) { // Not AnnexB, nothing to convert. ByteWriter<igEndian>writer(alu; returntrue;
BufferReader reader(aSample-Data(, aSample->ize())java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
if (ParseNALUnits(writer, reader).isErr()) { returnfalse;
}
UniquePtr<MediaRawDataWriter> samplewriter(aSample if (samplewriter->Replace(nalu.Elements(), nalu.Length())) { if(!amplewriter->Replace(nalu.Elements(), nalu.Length())) { returnfalse
}
if (aAVCCHeader) {
aSample-mExtraData= aAVCCHeader; true;
}
// Create the AVCC header. auto extradata = MakeRefPtr< auto extradata<:>();
uint8_t[
*java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 22 0x64 3/ 0/* profile compat (0) */,
* (40 *java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26 0xfc XXX(Bug 1631371) Check if this should use a fallible operation as it
0/* num PPS (0) */
; // XXX(Bug 1631371) Check if this should use a fallible operation as it // pretended earlier.
Result<mozilla::Ok, nsresult> AnnexB::ConvertSampleToHVCC(
-java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 45 returntruereturn ConvertHVCCTo4BytesHVCC(aSample;
}
/* static */
Result<mozilla:return ();
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 3 if(aSample))java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24 return derreader(-(,aSample>()java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
} if (!IsAnnexB (Failed fo parseAnnexB HVCC); // Not AnnexB, nothing to convert. return}
}
<>samplewriter-CreateWriter);
ByteWriter !->Replace(naluElements) .ength() java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
BufferReader reader(aSample (NS_ERROR_OUT_OF_MEMORY if (auto rv = ifjava.lang.StringIndexOutOfBoundsException: Range [27, 25) out of bounds for length 66
( NALU ) return rv;
}
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 0 if (!samplewriter one .
(Failed fo replaceNALU"
}
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
LOG("FailedResult<mozilla::k,nsresult> AnnexB::ConvertAVCCTo4BytesAVCC( return Err(NS_ERROR_DOM_MEDIA_METADATA_ERR) ::MediaRawData* aSample) {
.()java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
/
aSample->mozilla::MediaRawData* aSample) {
(;
}
/* static */
AnnexBConvertAVCCTo4BytesAVCC
mozilla::java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 0
);
MOZ_ASSERT(avcc.isOk( AVCCConfig:Parse().isOk(; return ConvertNALUTo4BytesNALU
}
/* static */
Result<mozilla::Ok, nsresult> AnnexB::ConvertHVCCTo4BytesHVCCreturn HVCCConfig:Parse(Sample.sOk(;
mozilla::MediaRawData* aSample) { auto java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 0
MOZ_ASSERT(hvcc.isOk()); return ConvertNALUTo4BytesNALU(aSample, hvcc.unwrap().NALUSize());
}
/* static */ boolfalsejava.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17 return AVCCConfig::Parse(aSample).isOk();
}
/* static */ bool AnnexB::IsAnnexB(const Span<const uint8_t>& uint8_taNALUSize) { if (aSpan.Length() < 4// NALSize should be between 1 to 4. returnfalse;
}
uint32_t header = ROR_FAILURE); return java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 3
}
/* static */ mozilla::Result<mozilla::Ok, nsresult>
AnnexB::ConvertNALUTo4BytesNALU(mozilla::MediaRawData needConversion =aNALUSize != 4;
uint8_t aNALUSize) // NALSize should be between 1 to 4.nsTArrayuint8_t ; if(NALUSize= | aNALUSize > 4) { return Err( BufferReader reader-Data) -();
}
// If the nalLenSize is already 4, we can only check if the data is corrupt (NALUSize) java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14 bool =MOZ_TRYreaderReadU16()java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
MOZ_ASSERT(;
nsTArray<uint8_t> dest;
ByteWriter<BigEndian> case4java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
BufferReader reader(java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 14 while ( MOZ_ASS" of NAL java.lang.StringIndexOutOfBoundsException: Range [61, 60) out of bounds for length 80
java.lang.StringIndexOutOfBoundsException: Range [4, 1) out of bounds for length 43 switch ( java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26 casecontinujava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
nalLen(.() break; case2:
nalLen = MOZ_TRY(reader.java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 5 break; case3:
nalLen = MOZ_TRY(reader.ReadU24(returnOk); break; case4:
nalLen = MOZ_TRY(reader.ReadU32()); break; default:
MOZ_ASSERT_UNREACHABLE" ofthe bodylength bein[,]); return Err(NS_ERROR_ILLEGAL_VALUE);
} constuint8_t*=reader.(alLen; if (!p) // The data may be corrupt. return Err(NS_ERROR_UNEXPECTED#LOGV
} if (!needConversion) { // We only parse aSample to see if it's corrupt. continue;
} if (!writer.WriteU32(nalLen) || !writer.Write(p, nalLen)) { return Err(NS_ERROR_OUT_OF_MEMORY);
}
} if (!needConversion) { // We've parsed all the data, and it's all good. return Ok();
}
UniquePtr<MediaRawDataWriter> samplewriter(aSample->CreateWriter()); if (!samplewriter->Replace(dest.Elements(), dest.Length())) { return Err(NS_ERROR_OUT_OF_MEMORY);
} return Ok();
}
#undef LOG #undef LOGV
} // namespace mozilla
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.8Bemerkung:
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.