Projects
home:enzokiel
avidemux3
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 34
View file
avidemux3.changes
Changed
@@ -1,7 +1,7 @@ ------------------------------------------------------------------- -Wed Sep 02 14:55:09 UTC 2026 - enzokiel@kabelmail.de +Fri Sep 04 12:44:49 UTC 2026 - enzokiel@kabelmail.de -- Update to version 2.8.2.git20260901 +- Update to version 2.8.2.git20260904 - 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.git20260901 +Version: 2.8.2.git20260904 Release: 0 URL: https://github.com/mean00/avidemux2 ExclusiveArch: %ix86 x86_64
View file
avidemux2-2.8.2.git20260901.tar.xz/avidemux_plugins/ADM_demuxers/MpegPS/ADM_ps.cpp -> avidemux2-2.8.2.git20260904.tar.xz/avidemux_plugins/ADM_demuxers/MpegPS/ADM_ps.cpp
Changed
@@ -335,30 +335,39 @@ uint8_t psHeader::getFrame(uint32_t frame,ADMCompressedImage *img) { if(frame>=ListOfFrames.size()) return 0; - getFlags(frame,&(img->flags)); dmxFrame *pk=ListOfFramesframe; + if(pk->len > ADM_COMPRESSED_MAX_DATA_LENGTH) + { + ADM_error("Frame %" PRIu32" size %" PRIu32" exceeds max. supported.\n", frame, pk->len); + return 0; + } if(lastFrame != PS_INVALID && (frame == lastFrame+1) && pk->type!=1) // the next frame, not an intra { lastFrame++; - bool r=psPacket->read(pk->len,img->data); - img->dataLength=pk->len; - img->demuxerFrameNo=frame; - img->demuxerDts=pk->dts; - img->demuxerPts=pk->pts; - //printf(">>> %d:%02x %02x %02x %02x\n",frame,img->data0,img->data1,img->data2,img->data3); - return r; + if(!psPacket->read(pk->len,img->data)) + return 0; + img->dataLength = pk->len; + img->demuxerFrameNo = frame; + img->demuxerDts = pk->dts; + img->demuxerPts = pk->pts; + //printf(">>> %d:%02x %02x %02x %02x\n",frame,img->data0,img->data1,img->data2,img->data3); + getFlags(frame,&(img->flags)); + return 1; } if(pk->type==1) // an intra { - if(!psPacket->seek(pk->startAt,pk->index)) return false; - bool r=psPacket->read(pk->len,img->data); - img->dataLength=pk->len; - img->demuxerFrameNo=frame; - img->demuxerDts=pk->dts; - img->demuxerPts=pk->pts; - //printf(">>> %d:%02x %02x %02x %02x\n",frame,img->data0,img->data1,img->data2,img->data3); - lastFrame=frame; - return r; + if(!psPacket->seek(pk->startAt,pk->index)) + return 0; + if(!psPacket->read(pk->len,img->data)) + return 0; + img->dataLength = pk->len; + img->demuxerFrameNo = frame; + img->demuxerDts = pk->dts; + img->demuxerPts = pk->pts; + //printf(">>> %d:%02x %02x %02x %02x\n",frame,img->data0,img->data1,img->data2,img->data3); + getFlags(frame,&(img->flags)); + lastFrame = frame; + return 1; } // a random frame: need to rewind first, then seek forward @@ -390,14 +399,16 @@ pk=ListOfFramesframe; lastFrame++; - bool r=psPacket->read(pk->len,img->data); + if(!psPacket->read(pk->len,img->data)) + return 0; img->dataLength=pk->len; img->demuxerFrameNo=frame; img->demuxerDts=pk->dts; img->demuxerPts=pk->pts; //printf(">>> %d:%02x %02x %02x %02x\n",frame,img->data0,img->data1,img->data2,img->data3); - return r; + getFlags(frame,&(img->flags)); + return 1; } /**
View file
avidemux2-2.8.2.git20260901.tar.xz/avidemux_plugins/ADM_demuxers/MpegPS/ADM_psAudio.cpp -> avidemux2-2.8.2.git20260904.tar.xz/avidemux_plugins/ADM_demuxers/MpegPS/ADM_psAudio.cpp
Changed
@@ -208,7 +208,7 @@ { timeOffset=((*list)index.timeOffset); index++; - if(index>(*list).size()) pivot=0x8000000000000LL; + if(index>=(*list).size()) pivot=0x8000000000000LL; else pivot=(*list)index.position; } }
View file
avidemux2-2.8.2.git20260901.tar.xz/avidemux_plugins/ADM_demuxers/MpegPS/ADM_psComputeTimeStamp.cpp -> avidemux2-2.8.2.git20260904.tar.xz/avidemux_plugins/ADM_demuxers/MpegPS/ADM_psComputeTimeStamp.cpp
Changed
@@ -36,6 +36,7 @@ { BVector <ADM_mpgAudioSeekPoint > *seekPoints=&(listOfAudioTracksi->access->seekPoints); + if(seekPoints->empty()) continue; uint64_t dts=(*seekPoints)0.dts; if(dts!=ADM_NO_PTS) continue; ADM_warning("PS Audio track %d has no timestamp for first seek point, guessing...\n",i); @@ -102,6 +103,7 @@ for(int i=0;i<listOfAudioTracks.size();i++) { BVector <ADM_mpgAudioSeekPoint > *seekPoints=&(listOfAudioTracksi->access->seekPoints); + if(seekPoints->empty()) continue; uint64_t secondDts=(*seekPoints)0.dts; uint64_t secondSize=(*seekPoints)0.size; if(secondSize && listOfAudioTracksi->header.byterate)
View file
avidemux2-2.8.2.git20260901.tar.xz/avidemux_plugins/ADM_demuxers/MpegPS/ADM_psReadIndex.cpp -> avidemux2-2.8.2.git20260904.tar.xz/avidemux_plugins/ADM_demuxers/MpegPS/ADM_psReadIndex.cpp
Changed
@@ -52,6 +52,11 @@ processAudioIndex(buffer+6); } } + if (ListOfFrames.empty()) + { + ADM_error("Index contains no frames.\n"); + return false; + } return true; } /** @@ -61,10 +66,11 @@ bool psHeader::processAudioIndex(char *buffer) { int64_t startAt,dts; - uint32_t size; - uint32_t pes; + uint32_t size, pes; + uint32_t totalAudioTracks = listOfAudioTracks.size(); + uint32_t trackNb = 0; char *head,*tail; - int trackNb=0; + sscanf(buffer,"bf:%" PRIx64,&startAt); head=strstr(buffer," "); if(!head) return false; @@ -75,6 +81,7 @@ { // qfprintf(index,"Pes:%x:%08" PRIx64":%" PRIi32":%PRId64 ",e,s->startAt,s->startSize,s->startDts); printf("PsHeader::processAudioIndex Reading index %s failed\n",buffer); + return false; } head=tail+1; ADM_psAccess *track=listOfAudioTrackstrackNb->access; @@ -83,6 +90,7 @@ trackNb++; //printf("%s => %" PRIx32" Dts:%" PRId64" Size:%" PRId64"\n",buffer,pes,dts,size); if(strlen(head)<4) break; + if(trackNb >= totalAudioTracks) break; } return true;
View file
avidemux2-2.8.2.git20260901.tar.xz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_ts.cpp -> avidemux2-2.8.2.git20260904.tar.xz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_ts.cpp
Changed
@@ -350,35 +350,42 @@ { if(frame>=ListOfFrames.size()) return 0; dmxFrame *pk=ListOfFramesframe; + if(pk->len > ADM_COMPRESSED_MAX_DATA_LENGTH) + { + ADM_error("Frame %" PRIu32" size %" PRIu32" exceeds max. supported.\n", frame, pk->len); + return 0; + } // next frame if((lastFrame != TS_INVALID) && (frame == lastFrame + 1) && !isKeyFrame(pk->type)) { lastFrame++; - bool r=tsPacket->read(pk->len,img->data); - img->dataLength=pk->len; - img->demuxerFrameNo=frame; - img->demuxerDts=pk->dts; - img->demuxerPts=pk->pts; - //printf(">>> %d:%02x %02x %02x %02x\n",frame,img->data0,img->data1,img->data2,img->data3); - getFlags(frame,&(img->flags)); - UNESCAPE(); - return r; + if (!tsPacket->read(pk->len,img->data)) + return 0; + img->dataLength = pk->len; + img->demuxerFrameNo = frame; + img->demuxerDts = pk->dts; + img->demuxerPts = pk->pts; + //printf(">>> %d:%02x %02x %02x %02x\n",frame,img->data0,img->data1,img->data2,img->data3); + getFlags(frame,&(img->flags)); + //UNESCAPE(); + return 1; } // Intra ? if(isKeyFrame(pk->type)) { - if(!tsPacket->seek(pk->startAt,pk->index)) return false; - bool r=tsPacket->read(pk->len,img->data); - img->dataLength=pk->len; - img->demuxerFrameNo=frame; - img->demuxerDts=pk->dts; - img->demuxerPts=pk->pts; - getFlags(frame,&(img->flags)); - //printf(">>> %d:%02x %02x %02x %02x\n",frame,img->data0,img->data1,img->data2,img->data3); - lastFrame=frame; - UNESCAPE(); - return r; - + if (!tsPacket->seek(pk->startAt,pk->index)) + return 0; + if (!tsPacket->read(pk->len,img->data)) + return 0; + img->dataLength = pk->len; + img->demuxerFrameNo = frame; + img->demuxerDts = pk->dts; + img->demuxerPts = pk->pts; + getFlags(frame,&(img->flags)); + //printf(">>> %d:%02x %02x %02x %02x\n",frame,img->data0,img->data1,img->data2,img->data3); + lastFrame = frame; + //UNESCAPE(); + return 1; } // Random frame @@ -411,15 +418,16 @@ } pk=ListOfFramesframe; lastFrame++; - bool r=tsPacket->read(pk->len,img->data); - img->dataLength=pk->len; - img->demuxerFrameNo=frame; - img->demuxerDts=pk->dts; - img->demuxerPts=pk->pts; - //printf(">>> %d:%02x %02x %02x %02x\n",frame,img->data0,img->data1,img->data2,img->data3); - getFlags(frame,&(img->flags)); - UNESCAPE(); - return r; + if (!tsPacket->read(pk->len,img->data)) + return 0; + img->dataLength = pk->len; + img->demuxerFrameNo = frame; + img->demuxerDts = pk->dts; + img->demuxerPts = pk->pts; + //printf(">>> %d:%02x %02x %02x %02x\n",frame,img->data0,img->data1,img->data2,img->data3); + getFlags(frame,&(img->flags)); + //UNESCAPE(); + return 1; }
View file
avidemux2-2.8.2.git20260901.tar.xz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsGetBits.h -> avidemux2-2.8.2.git20260904.tar.xz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsGetBits.h
Changed
@@ -16,7 +16,7 @@ #ifndef ADM_TS_GETBITS #define ADM_TS_GETBITS #include "dmxTSPacket.h" -#define MAX_GETBITS_BUFFER 64 +#define MAX_GETBITS_BUFFER 192 /** \class tsGetBits @@ -39,4 +39,4 @@ bool flush(void) {stored=0;accumulator=0;return true;} }; -#endif \ No newline at end of file +#endif
View file
avidemux2-2.8.2.git20260901.tar.xz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsPatPmt.cpp -> avidemux2-2.8.2.git20260904.tar.xz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsPatPmt.cpp
Changed
@@ -282,6 +282,11 @@ if(t->getNextPSI(pid,&psi)==true) { len=psi.payloadSize; + if (len < 4) + { + ADM_warning("PSI payload too short: %d\n", len); + return false; + } // We should be protected by CRC here int packLen=len; printf("TsDemuxer PCR 0x%x, len=%d\n",((r0<<8)+r1)&0x1fff,packLen); @@ -291,9 +296,9 @@ r+=2; packLen-=4; // Program Descriptor - printf("PMT--Decoding Program info--\n"); if(programInfoLength && programInfoLength<=packLen) { + printf("PMT--Decoding Program info--\n"); decodeProgrameDescriptor(r, programInfoLength,trk.language); packLen-=programInfoLength; r+=programInfoLength; @@ -309,9 +314,13 @@ size&=0xfff; pid&=0x1fff; + if (packLen < size + 5) + { + printf("PMT Incomplete ES descriptor, need: %d, available: %d bytes.\n", size+5, packLen); + break; + } uint8_t *base=r+5; r+=size+5; - if(packLen < size+5) break; packLen-=5+size; printf("PMT Type=0x%x pid=%x size=%d\n",type,pid,size); const char *str; @@ -323,17 +332,22 @@ uint8_t *tail=r; while(head<tail) { - uint8_t tag=head0; - uint8_t tag_len=head1; - printf("PMT Tag 0x%x , len %d, ",tag,tag_len); - for(int i=0;i<tag_len;i++) printf(" %02x",head2+i); + uint8_t tag = *head++; + uint8_t tag_len = *head++; + printf("PMT Tag 0x%02x, len %d, ",tag,tag_len); + if (head + tag_len > tail) + { + printf("Tag length out of bounds, skipping.\n"); + break; + } + for(int i=0;i<tag_len;i++) printf(" %02x",headi); printf("\n"); switch(tag) { case 0x05: // registration descriptor - if(fourCC::check(head+2,(uint8_t *)"HEVC")) + if (tag_len >= 4 && fourCC::check(head, (uint8_t *)"HEVC")) { - printf("PMT} HEVC tag found\n"); + printf("PMT HEVC tag found\n"); type=0x24; } break; @@ -344,17 +358,17 @@ int langCodeLen = (tag_len>3)? 3 : tag_len; for(int i=0; i<langCodeLen; i++) { - lani=head2+i; + lani = headi; } lanlangCodeLen=0; - trk.language=std::string(lan); - break; + trk.language = lan; + break; } case 0x7A: if(type==6) type=0x84;break; case 0x6A: if(type==6) type=0x81;break; // AC3 default:break; } - head+=2+tag_len; + head += tag_len; } if(type==0xea)
View file
avidemux2-2.8.2.git20260901.tar.xz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsReadIndex.cpp -> avidemux2-2.8.2.git20260904.tar.xz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsReadIndex.cpp
Changed
@@ -64,10 +64,11 @@ bool tsHeader::processAudioIndex(char *buffer) { int64_t startAt,dts; - uint32_t size; - uint32_t pes; + uint32_t size, pes; + uint32_t totalAudioTracks = listOfAudioTracks.size(); + uint32_t trackNb = 0; char *head,*tail; - int trackNb=0; + sscanf(buffer,"bf:%" PRIx64,&startAt); head=strstr(buffer," "); if(!head) return false; @@ -78,6 +79,7 @@ { // qfprintf(index,"Pes:%x:%08" PRIx64":%" PRIi32":%PRId64 ",e,s->startAt,s->startSize,s->startDts); printf("tsHeader::processAudioIndex Reading index %s failed\n",buffer); + return false; } head=tail+1; ADM_tsAccess *track=listOfAudioTrackstrackNb->access; @@ -89,6 +91,7 @@ trackNb++; //printf("%s => %" PRIx32" Dts:%" PRId64" Size:%" PRId64"\n",buffer,pes,dts,size); if(strlen(head)<4) break; + if(trackNb >= totalAudioTracks) break; } return true;
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
.