Skip to content

Commit

Permalink
[Mp4/demux] Workaround duplicated pts in some mp4, it is not a fix, i…
Browse files Browse the repository at this point in the history
…t just prevents avidemux from crashing
  • Loading branch information
mean committed Jan 31, 2015
1 parent d73b1a8 commit bece91a
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 0 deletions.
25 changes: 25 additions & 0 deletions avidemux_plugins/ADM_demuxers/Mp4/ADM_mp4.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -513,8 +513,33 @@ uint8_t MP4Header::open(const char *name)
ADM_info("Last video PTS : %s\n",ADM_us2plain(_tracks[0].index[nb-1].pts));
ADM_info("Last video DTS : %s\n",ADM_us2plain(_tracks[0].index[nb-1].dts));

checkDuplicatedPts();

return 1;
}
bool MP4Header::checkDuplicatedPts(void)
{
int nb=(int)_tracks[0].nbIndex;
for(int i=0;i<nb;i++)
{
int mn,mx;
mn=i-10;
if(mn<0) mn=0;
mx=i+10;
if(mx>=nb-1) mx=nb-1;
for(int j=mn;j<mx;j++)
{
if(j==i) continue;
if(_tracks[0].index[i].pts==_tracks[0].index[j].pts)
{
ADM_warning("Duplicate pts %s at %d and %d\n",ADM_us2plain(_tracks[0].index[i].pts),i,j);
_tracks[0].index[j].pts+=1000; // add 1 ms
}
}

}
return true;
}
/**
* \fn adjustElstDelay
* @return
Expand Down
1 change: 1 addition & 0 deletions avidemux_plugins/ADM_demuxers/Mp4/ADM_mp4.h
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@ class MP4Header :public vidHeader
bool refineAudio(WAVHeader *head,uint32_t extraLen, uint8_t *extra);
bool shiftTimeBy(uint64_t shift);
bool shiftAudioTimeBy(uint64_t shift);
bool checkDuplicatedPts(void);
/*********************************/
uint32_t readPackedLen(adm_atom *tom );

Expand Down

0 comments on commit bece91a

Please sign in to comment.