Projects
home:enzokiel
avidemux3
Sign Up
Log In
Username
Password
We truncated the diff of some files because they were too big. If you want to see the full diff for every file,
click here
.
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 35
View file
avidemux3.changes
Changed
@@ -1,7 +1,7 @@ ------------------------------------------------------------------- -Fri Sep 04 12:44:49 UTC 2026 - enzokiel@kabelmail.de +Mon Sep 07 14:14:33 UTC 2026 - enzokiel@kabelmail.de -- Update to version 2.8.2.git20260904 +- Update to version 2.8.2.git20260905 - No changelog available -------------------------------------------------------------------
View file
avidemux3.spec
Changed
@@ -19,7 +19,7 @@ Name: avidemux3 Summary: Graphical video editing and transcoding tool License: GPL-2.0-only -Version: 2.8.2.git20260904 +Version: 2.8.2.git20260905 Release: 0 URL: https://github.com/mean00/avidemux2 ExclusiveArch: %ix86 x86_64
View file
avidemux2-2.8.2.git20260904.tar.xz/avidemux_plugins/ADM_demuxers/Asf/ADM_asf.cpp -> avidemux2-2.8.2.git20260905.tar.xz/avidemux_plugins/ADM_demuxers/Asf/ADM_asf.cpp
Changed
@@ -264,114 +264,122 @@ */ uint8_t asfHeader::getFrame(uint32_t framenum,ADMCompressedImage *img) { - img->dataLength=0; - img->flags=AVI_KEY_FRAME; - uint32_t len=0; - if(framenum>=nbImage) - { - printf("ASF Going out of bound %u %u\n",framenum, nbImage); - return 0; - } - if(!_indexframenum.frameLen) - { - goto gotcha; - } - // In case curSeq is stored as one byte.. - curSeq&=0xff; - // - - aprintf("Framenum %u len: %u curSeq %u frameSeq=%u packetnb=%u \n", - framenum,_indexframenum.frameLen,curSeq, - _indexframenum.segNb,_indexframenum.packetNb); - // Seeking ? - if(_indexframenum.segNb!=curSeq || _indexframenum.segNb==1) - { - aprintf("Seeking.. curseq:%u wanted seq:%u packet=%" PRIu64"\n",curSeq,_indexframenum.segNb,_indexframenum.packetNb); - if(!_packet->goToPacket(_indexframenum.packetNb)) + uint32_t len; + img->dataLength = 0; + img->flags = AVI_KEY_FRAME; + if (framenum >= nbImage) { - printf("ASF Cannot seek to frame %u\n",framenum); - return 0; + ADM_warning("Requested frame %u out of bounds, must be < %u\n", framenum, nbImage); + return 0; } - _packet->purge(); - curSeq=_indexframenum.segNb; - printf("Seeking done, starting at seq=%u\n",curSeq); - } - - - len=0; - uint32_t delta; - while(1) - { - while(readQueue.size()) + asfIndex *dx = &(_indexframenum); + if (dx->frameLen > ADM_COMPRESSED_MAX_DATA_LENGTH) + { + ADM_error("Frame %u size %u exceeds max. supported.\n", framenum, dx->frameLen); + return 0; + } + if (!dx->frameLen) { - asfBit *bit; - bit=readQueue.front(); - readQueue.pop_front(); - aprintf(">found packet of size %d seq %d, while curseq =%d wanted seg=%u current offset=%u, packet=%u\n", - bit->len,bit->sequence,curSeq,_indexframenum.segNb,len,bit->packet); - // Here it is tricky - // if len==0 we are reading the first part of our frame - // The packet may starts with segments from the previous frame - // discard them - // Delta is just a security as it should be slightly >10 - delta=256+bit->sequence-_indexframenum.segNb; - delta &=0xff; - if(!len) // Starting a new frame - { - if(_indexframenum.segNb != bit->sequence ) - { - aprintf("Dropping seq=%u too old for %u delta %d\n", - bit->sequence,_indexframenum.segNb,delta); - storageQueue.push_back(bit); - bit=NULL; - if(delta<230) - { - printf("ASF Very suspicious delta :%" PRIu32"\n",delta); - } - continue; - } - // We have found our first chunk - curSeq=bit->sequence; - memcpy(img->data,bit->data,bit->len); - len=bit->len; - delete bit->data; - delete bit; - continue; - } - // Continuing a frame - // If the seq number is different it is the beginning of a new frame - if(bit->sequence!=curSeq ) - { - aprintf("New sequence %u->%u while loading %u frame\n",curSeq,bit->sequence,framenum); - img->dataLength=len; - readQueue.push_front(bit); - curSeq=bit->sequence; goto gotcha; - } - // still same sequence ...add - memcpy(img->data+len,bit->data,bit->len); - len+=bit->len; - storageQueue.push_back(bit); - bit=NULL; } - if(!_packet->nextPacket(_videoStreamId)) + // In case curSeq is stored as one byte.. + curSeq&=0xff; + aprintf("Framenum %u len: %u curSeq: %u frameSeq: %u packetnb: %llu\n", + framenum, dx->frameLen, curSeq, dx->segNb, dx->packetNb); + // Seeking ? + if (dx->segNb != curSeq || dx->segNb == 1) { - printf("ASF Packet Error\n"); - return 0; + aprintf("Seeking... curSeq: %u wanted seq: %u packet: %" PRIu64"\n", curSeq, dx->segNb, dx->packetNb); + if(!_packet->goToPacket(dx->packetNb)) + { + ADM_error("Cannot seek to frame %u\n", framenum); + return 0; + } + _packet->purge(); + curSeq = dx->segNb; + ADM_info("Seeking done, starting at seq %u \n", curSeq); + } + + len = 0; + uint32_t delta; + while(1) + { + while(readQueue.size()) + { + asfBit *bit; + bit = readQueue.front(); + readQueue.pop_front(); + aprintf("-> found packet of size %d seq %d while curseq = %d wanted seg = %u, acc. data len: %u, packet: %u\n", + bit->len, bit->sequence, curSeq, dx->segNb, len, bit->packet); + // Here it is tricky + // if len==0 we are reading the first part of our frame + // The packet may starts with segments from the previous frame + // discard them + // Delta is just a security as it should be slightly >10 + delta = 256 + bit->sequence - dx->segNb; + delta &= 0xff; + if (!len) // Starting a new frame + { + if (dx->segNb != bit->sequence) + { + aprintf("Dropping seq %u, too old for seg %u, delta: %d\n", bit->sequence, dx->segNb, delta); + storageQueue.push_back(bit); + bit = NULL; + if (delta < 230) + { + aprintf("ASF Very suspicious delta : %" PRIu32"\n", delta); + } + continue; + } + // We have found our first chunk + curSeq = bit->sequence; + ADM_assert(bit->len <= dx->frameLen); + memcpy(img->data, bit->data, bit->len); + len = bit->len; + storageQueue.push_back(bit); + bit = NULL; + continue; + } + // Continuing a frame + // If the seq number is different it is the beginning of a new frame + if (bit->sequence != curSeq) + { + aprintf("New sequence %u -> %u while loading frame %u\n", curSeq, bit->sequence, framenum); + readQueue.push_front(bit); + curSeq = bit->sequence; + goto gotcha; + } + // still same sequence ...add + ADM_assert((bit->len <= dx->frameLen) && (len + bit->len <= dx->frameLen)); + memcpy(img->data + len, bit->data, bit->len); + len += bit->len; + storageQueue.push_back(bit); + bit = NULL; + } + if(_packet->finished()) + { + ADM_warning("Too close to EOF.\n"); + return 0; + } + if(!_packet->nextPacket(_videoStreamId)) + { + ADM_error("Packet error.\n"); + return 0; + } + _packet->skipPacket(); } - _packet->skipPacket(); - } gotcha: -
View file
avidemux2-2.8.2.git20260904.tar.xz/avidemux_plugins/ADM_demuxers/Asf/ADM_asfAudio.cpp -> avidemux2-2.8.2.git20260905.tar.xz/avidemux_plugins/ADM_demuxers/Asf/ADM_asfAudio.cpp
Changed
@@ -129,6 +129,13 @@ bit=readQueue.front(); readQueue.pop_front(); // still same sequence ...add + if(bit->len > maxSize) + { + ADM_error("Packet size %u out of bounds, max: %u\n", bit->len, maxSize); + storageQueue.push_back(bit); + bit = NULL; + return 0; + } memcpy(dest,bit->data,bit->len); *len=bit->len; *dts=bit->pts; // for audio PTS=DTS... @@ -142,6 +149,8 @@ bit=NULL; return 1; } + if(_packet->finished()) + break; r=_packet->nextPacket(_streamId); _packet->skipPacket(); if(!r)
View file
avidemux2-2.8.2.git20260904.tar.xz/avidemux_plugins/ADM_demuxers/Asf/ADM_asfIo.h -> avidemux2-2.8.2.git20260905.tar.xz/avidemux_plugins/ADM_demuxers/Asf/ADM_asfIo.h
Changed
@@ -3,7 +3,6 @@ uint64_t lo,hi; lo=read32(); hi=read32(); - _offset+=8; ADM_assert(_offset<=pakSize); return lo+(hi<<32);
View file
avidemux2-2.8.2.git20260904.tar.xz/avidemux_plugins/ADM_demuxers/Asf/ADM_asfPacket.cpp -> avidemux2-2.8.2.git20260905.tar.xz/avidemux_plugins/ADM_demuxers/Asf/ADM_asfPacket.cpp
Changed
@@ -54,11 +54,16 @@ asfPacket::asfPacket(FILE *f,uint64_t nb,uint32_t pSize,queueOfAsfBits *q,queueOfAsfBits *s,uint64_t startDataOffset) { _fd=f; + ADM_assert(_fd); pakSize=pSize; ADM_assert(pakSize); packetStart=ftello(f); + ADM_assert(packetStart >= 0); + ADM_assert(!fseeko(f, 0, SEEK_END)); + fileSize = ftello(f); + ADM_assert(fileSize > 0); + ADM_assert(!fseeko(f, packetStart, SEEK_SET)); aprintf("Packet created at %" PRIx64"\n",packetStart); - ADM_assert(_fd); queue=q; storage=s; ADM_assert(q); @@ -73,6 +78,18 @@ { } +/** + \fn finished +*/ +uint8_t asfPacket::finished(void) +{ + int64_t pos = ftello(_fd); + if (pos < 0) return 1; + // we need at least 5 bytes (1 marker + 2 always zero + 1 length flags + 1 prop. flags) + if (pos + 5 >= fileSize) return 1; + + return 0; +} /** \fn goToPacket */ @@ -80,7 +97,8 @@ { uint64_t offset=_startDataOffset+packet*pakSize; aprintf("asfPacket::goToPacket offset = %" PRIu64", packet = %" PRIu64", packet size = %" PRIu32"\n",offset,packet,pakSize); - fseeko(_fd,offset,SEEK_SET); + if(fseeko(_fd,offset,SEEK_SET)) + return 0; currentPacket=packet; purge(); return 1; @@ -312,7 +330,10 @@ // Do some sanity check if(_offset+paddingLen!=pakSize) { - ADM_warning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! %d+%d!=%d\n",_offset,paddingLen,pakSize); + // Padding length equal zero is allowed with multiple payloads + // by specification, should be inferred from packet size then. + if(paddingLen) + ADM_warning("Bogus padding length: %u + %u != %u\n", _offset, paddingLen, pakSize); if(pakSize>(_offset+paddingLen)) { skip(pakSize-_offset-paddingLen);
View file
avidemux2-2.8.2.git20260904.tar.xz/avidemux_plugins/ADM_demuxers/Asf/ADM_asfPacket.h -> avidemux2-2.8.2.git20260905.tar.xz/avidemux_plugins/ADM_demuxers/Asf/ADM_asfPacket.h
Changed
@@ -51,6 +51,7 @@ uint8_t skip( uint32_t how); FILE *_fd; uint64_t packetStart; + int64_t fileSize; uint8_t segmentId; uint32_t pakSize; queueOfAsfBits *queue; @@ -70,7 +71,7 @@ uint8_t nextPacket(uint8_t streamWanted); uint8_t skipPacket(void); - + uint8_t finished(void); uint64_t getPos(void); uint32_t getPayloadLen(void); #ifdef ASF_INLINE
View file
avidemux2-2.8.2.git20260904.tar.xz/avidemux_plugins/ADM_demuxers/Flv/ADM_flv.cpp -> avidemux2-2.8.2.git20260905.tar.xz/avidemux_plugins/ADM_demuxers/Flv/ADM_flv.cpp
Changed
@@ -1506,6 +1506,11 @@ { if(frame>=videoTrack->_nbIndex) return 0; flvIndex *idx=&(videoTrack->_indexframe); + if(idx->size > ADM_COMPRESSED_MAX_DATA_LENGTH) + { + ADM_error("Frame %u size %u exceeds max. supported.\n", frame, idx->size); + return 0; + } #ifdef USE_BUFFERED_IO parser->setpos(idx->pos); if(!read(idx->size,img->data))
View file
avidemux2-2.8.2.git20260904.tar.xz/avidemux_plugins/ADM_demuxers/Flv/ADM_flvAudio.cpp -> avidemux2-2.8.2.git20260905.tar.xz/avidemux_plugins/ADM_demuxers/Flv/ADM_flvAudio.cpp
Changed
@@ -135,6 +135,12 @@ return false; } x=&(_track->_indexcurrentBlock); + currentBlock++; + if (x->size > maxSize) + { + ADM_error("Packet %u / %u too large: %u, max: %s\n", currentBlock, _track->_nbIndex, x->size, maxSize); + return false; + } #ifdef USE_BUFFERED_IO aparser->read32(x->size,buffer); #else @@ -142,9 +148,8 @@ #endif *osize=x->size; *dts=((uint64_t)x->dtsUs); - - currentBlock++; - return 1; + + return true; } /** \fn goToBlock
View file
avidemux2-2.8.2.git20260904.tar.xz/avidemux_plugins/ADM_demuxers/OpenDml/ADM_odml_odml.cpp -> avidemux2-2.8.2.git20260905.tar.xz/avidemux_plugins/ADM_demuxers/OpenDml/ADM_odml_odml.cpp
Changed
@@ -23,10 +23,13 @@ #include "fourcc.h" #include "ADM_openDML.h" - -#define aprintf(...) {} - //#define OPENDML_VERBOSE +#ifdef OPENDML_VERBOSE + #define aprintf(...) printf +#else + #define aprintf(...) {} +#endif + #ifdef _MSC_VER #define ADM_PACKED(c,n) __pragma( pack(push, 1) ) c n __pragma( pack(pop) ) #else @@ -225,7 +228,16 @@ printf("AVIProblem reading secondary index (%u/%u) trying to continue \n",i,masterIndex.nbEntryInUse); goto _cntue; } - total+=second.nbEntryInUse; + uint64_t check = total; + check += second.nbEntryInUse; + if (check > UINT32_MAX) + { + ADM_error("Number of frames out of bounds, bailing out.\n"); + free(superEntries); + superEntries = NULL; + return 0; + } + total = check; } _cntue: printf("Found a grand total of %" PRIu32" frames\n",total); @@ -239,10 +251,12 @@ fseeko(_fd,superEntriesi.offset,SEEK_SET); fcc=read32(); len=read32(); +#ifdef OPENDML_VERBOSE aprintf("subindex : %" PRIu32" size %" PRIu32" (%lx)",i,len,len); aprintf("Seeking to %" PRIx64"\n",superEntriesi.offset); fourCC::print(fcc);aprintf("\n"); +#endif //if(1!=fread(&second,sizeof(second),1,_fd)) if(!readSecondary(&second,_fd)) {
View file
avidemux2-2.8.2.git20260904.tar.xz/avidemux_plugins/ADM_demuxers/OpenDml/ADM_openDML.cpp -> avidemux2-2.8.2.git20260905.tar.xz/avidemux_plugins/ADM_demuxers/OpenDml/ADM_openDML.cpp
Changed
@@ -93,18 +93,32 @@ uint8_t OpenDMLHeader::getFrame(uint32_t framenum,ADMCompressedImage *img) { if(framenum>= (uint32_t)_videostream.dwLength) return 0; -uint64_t offset=_idxframenum.offset; //+_mdatOffset; - - fseeko(_fd,offset,SEEK_SET); - fread(img->data, _idxframenum.size, 1, _fd); - img->dataLength=_idxframenum.size; - img->flags=_idxframenum.intra; - img->demuxerDts=_idxframenum.dts; // FIXME - img->demuxerPts=_idxframenum.pts; - - aprintf("Size: %lu\n",_idxframenum.size); + odmlIndex *dx = &(_idxframenum); + // Truncating a compressed image may result in massive damage + // initially going unnoticed, better fail right away. + if (dx->size > ADM_COMPRESSED_MAX_DATA_LENGTH) + { + ADM_error("Abnormally large frame %" PRIu32" size %" PRIu32", bailing out.\n", framenum, dx->size); + return 0; + } + if (0 != fseeko(_fd, dx->offset, SEEK_SET)) + { + ADM_error("Seek to 0x%" PRIx64" for frame %" PRIu32" failed.\n", dx->offset, framenum); + return 0; + } + if (1 != fread(img->data, dx->size, 1, _fd)) + { + ADM_error("Reading frame %" PRIu32" failed.\n", framenum); + return 0; + } + img->dataLength = dx->size; + img->flags = dx->intra; + img->demuxerDts = dx->dts; // FIXME + img->demuxerPts = dx->pts; + + aprintf("Frame %lu size: %lu\n", dx->size); // if(offset & 1) printf("odd!\n"); - return 1; + return 1; } /** \fn getFrame @@ -266,7 +280,7 @@ uint8_t badAvi=0; uint32_t rd; - printf("** opening OpenDML files **"); + printf("** opening OpenDML files **\n"); _fd=ADM_fopen(name,"rb"); if(!_fd) @@ -551,7 +565,8 @@ printf("\nOpenDML file successfully read..\n"); if(ret==1) { - computePtsDts(); + if (!computePtsDts()) + return 0; removeEmptyFrames(); } ADM_info("PtsAvailable : %d\n",(int)ptsAvailable); @@ -608,7 +623,11 @@ uint8_t OpenDMLHeader::computePtsDts(void) { // if it is mpeg4-sp, removed packet bitstream & reindex - if(isMpeg4Compatible(_videostream.fccHandler)) OpenDMLHeader::unpackPacked( ); + if(isMpeg4Compatible(_videostream.fccHandler)) + { + if (ADM_OK != OpenDMLHeader::unpackPacked()) + return 0; + } // Now if we have B frames, it is properly tagged // Begin by putting PTS=DTS i.e. no B-frames for(int i=0;i<_videostream.dwLength;i++) @@ -923,12 +942,13 @@ walk(n); delete n; } - p->curPos=ftello(p->fd); if(MKFCC('s','t','r','l')==sub) { + ADM_assert(_nbTrack < ADM_ODML_MAX_TRACKS); _nbTrack++; } - + p->curPos = ftello(p->fd); + if(p->curPos & 1) p->skip(1); // ??? } break; default:
View file
avidemux2-2.8.2.git20260904.tar.xz/avidemux_plugins/ADM_demuxers/OpenDml/ADM_openDML.h -> avidemux2-2.8.2.git20260905.tar.xz/avidemux_plugins/ADM_demuxers/OpenDml/ADM_openDML.h
Changed
@@ -17,6 +17,9 @@ #include "ADM_Video.h" #include "ADM_riff.h" #include "ADM_audioStream.h" + +#define ADM_ODML_MAX_TRACKS 10 + class AVDMGenericAudioStream; typedef struct odmlIndex @@ -82,7 +85,7 @@ //_________________________________________ // This is temporary stuff to read the avi //_________________________________________ - odmlTrack _Tracks10; + odmlTrack _TracksADM_ODML_MAX_TRACKS; odmlIndex _regularIndex; odmlIndex _movi; //_________________________________________
View file
avidemux2-2.8.2.git20260904.tar.xz/avidemux_plugins/ADM_demuxers/OpenDml/ADM_openDMLDepack.cpp -> avidemux2-2.8.2.git20260905.tar.xz/avidemux_plugins/ADM_demuxers/OpenDml/ADM_openDMLDepack.cpp
Changed
@@ -47,173 +47,184 @@ */ uint8_t OpenDMLHeader::unpackPacked( void ) { - uint32_t nbFrame; - uint8_t ret=0; - uint32_t targetIndex=0,nbVop; - uint32_t nbDuped=0; - uint32_t timcincbits=16; /* Nb bits used to code time_inc 16 is a safe default */ - - ADM_vopS myVopsMAX_VOP; // should be enough - // here we got the vidHeader to get the file easily - // we only deal with avi now, so cast it to its proper type (i.e. avi) - - - // now we are ready to rumble - // First get a unpack buffe - uint8_t *buffer=new uint8_t 2*getWidth()*getHeight(); - - // For each frame we lookup x times the VOP header - // the first one become frame n, the second one becomes frame N+1 - // Image contaning only VOP header are royally ignored - // We should get about the same number of in/out frame - - nbFrame=getMainHeader()->dwTotalFrames; - - odmlIndex *newIndex=new odmlIndexnbFrame+MAX_VOP; // Due to the packed vop, we may end up with more images - // Assume MAX_VOP Bframes maximum - ADM_assert(newIndex); - - #ifndef __HAIKU__ - uint32_t originalPriority = getpriority(PRIO_PROCESS, 0); - #endif + uint32_t nbFrame; + uint8_t ret = 0; + uint32_t targetIndex = 0, nbVop; + uint32_t nbDuped = 0; + uint32_t timcincbits = 16; /* Nb bits used to code time_inc 16 is a safe default */ + + ADM_vopS myVopsMAX_VOP; // should be enough + // here we got the vidHeader to get the file easily + // we only deal with avi now, so cast it to its proper type (i.e. avi) + + + // now we are ready to rumble + // First get a unpack buffe + if (getWidth() > MAXIMUM_SIZE || getWidth() > MAXIMUM_SIZE) + return 0; + uint32_t bufferSize = 2 * getWidth() * getHeight(); + if (bufferSize > ADM_COMPRESSED_MAX_DATA_LENGTH) + bufferSize = ADM_COMPRESSED_MAX_DATA_LENGTH; + uint8_t *buffer = new uint8_t bufferSize; + + // For each frame we lookup x times the VOP header + // the first one become frame n, the second one becomes frame N+1 + // Image contaning only VOP header are royally ignored + // We should get about the same number of in/out frame + + nbFrame = getMainHeader()->dwTotalFrames; + // Due to the packed vop, we may end up with more images + // Assume MAX_VOP Bframes maximum + odmlIndex *newIndex = new odmlIndexnbFrame+MAX_VOP; + ADM_assert(newIndex); + +#ifndef __HAIKU__ + uint32_t originalPriority = getpriority(PRIO_PROCESS, 0); +#endif #if 0 uint32_t priorityLevel; prefs->get(PRIORITY_INDEXING,&priorityLevel); setpriority(PRIO_PROCESS, 0, ADM_getNiceValue(priorityLevel)); #endif - printf("Avi Trying to unpack the stream\n"); - DIA_workingBase *working=createWorking(QT_TRANSLATE_NOOP("opendmldemuxer","Unpacking bitstream")); - ADMCompressedImage image; - image.data=buffer; - uint32_t img=0; + printf("Avi Trying to unpack the stream\n"); + + DIA_workingBase *working = createWorking(QT_TRANSLATE_NOOP("opendmldemuxer","Unpacking bitstream")); + + ADMCompressedImage image; + image.data = buffer; + uint32_t img = 0; uint32_t oldtimecode=0xffffffff; - while(img<nbFrame) - { + + while(img < nbFrame) + { ADM_assert(nbDuped<2); - working->update(img,nbFrame); - if(!getFrame(img,&image)) + working->update(img, nbFrame); + uint32_t frameSize; + getFrameSize(img, &frameSize); + if (frameSize > bufferSize) + { + ADM_error("Abnormally large unpacked frame %" PRIu32"\n", img); + goto _abortUnpack; + } + if (!getFrame(img,&image)) { printf("Avi Error could not get frame %" PRIu32"\n",img); goto _abortUnpack; } - aprintf("--Frame:%lu/%lu, len %lu, nbDuped%u\n",img,nbFrame,image.dataLength,nbDuped); + aprintf("--Frame: %lu / %lu, len %lu, nbDuped %u\n", img, nbFrame, image.dataLength, nbDuped); - if(image.dataLength<=2) - { - if(nbDuped) - { - aprintf("Skipping null frame\n"); - nbDuped--; - img++; - continue; - } - } - if(image.dataLength<6) // Too short to contain a valid vop header, just copy - { - memcpy(&newIndextargetIndex,&_idximg,sizeof(_idx0)); - aprintf("TOO SMALL\n"); - targetIndex++; - img++; - continue; - } + if (image.dataLength <= 2) + { + if (nbDuped) + { + aprintf("Skipping null frame\n"); + nbDuped--; + img++; + continue; + } + } + if (image.dataLength < 6) // Too short to contain a valid vop header, just copy + { + memcpy(&newIndextargetIndex, &_idximg, sizeof(_idx0)); + aprintf("TOO SMALL\n"); + targetIndex++; + img++; + continue; + } - nbVop = ADM_searchVop(buffer,buffer+image.dataLength,MAX_VOP,myVops,&timcincbits); + nbVop = ADM_searchVop(buffer, buffer + image.dataLength, MAX_VOP, myVops, &timcincbits); - if(!nbVop) /* Cannot find vop, corrupted or WTF ...*/ - { - printf("Avi img :%u failed to find vop!\n",img); - memcpy(&newIndextargetIndex,&_idximg,sizeof(_idx0)); - targetIndex++; - img++; - continue; + if (!nbVop) /* Cannot find vop, corrupted or WTF ...*/ + { + printf("Avi img : %u failed to find vop!\n", img); + memcpy(&newIndextargetIndex, &_idximg, sizeof(_idx0)); + targetIndex++; + img++; + continue; + } + /* We have one or more vop inside it...*/ + if (nbVop==1 && nbDuped) // only one vop, could it be an evil duplicate ? + { + if (myVops0.timeInc == oldtimecode && !myVops0.vopCoded) + { + aprintf("Frame has same timecode and is not vop coded; skipping\n"); + img++; + nbDuped--; + continue; + } + } - } - /* We have one or more vop inside it...*/ - if(nbVop==1 && nbDuped) // only one vop, could it be an evil duplicate ? - { - if(myVops0.timeInc==oldtimecode && !myVops0.vopCoded) - { - aprintf("Frame has same timecode and is not vop coded; skipping\n"); - img++; - nbDuped--; - continue; - } - } + // more than one vop, do up to the n-1th + // the 1st image starts at 0 + myVops0.offset=0; - // more than one vop, do up to the n-1th - // the 1st image starts at 0 - myVops0.offset=0; - myVopsnbVop.offset=image.dataLength; + //if(nbVop>2) + { + aprintf("At %u, %d vop!\n",img,nbVop); + }
View file
avidemux2-2.8.2.git20260904.tar.xz/avidemux_plugins/ADM_demuxers/OpenDml/ADM_riff.cpp -> avidemux2-2.8.2.git20260905.tar.xz/avidemux_plugins/ADM_demuxers/OpenDml/ADM_riff.cpp
Changed
@@ -41,7 +41,6 @@ } uint8_t riffParser::skip(uint32_t s) { - if(s&1) s++; fseeko(fd,s,SEEK_CUR); curPos+=s; if(curPos>endPos)
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.