Skip to content

Commit

Permalink
[Flv/demux] support large files (rcdrone)
Browse files Browse the repository at this point in the history
  • Loading branch information
mean committed Jan 22, 2017
1 parent c7e7126 commit 5439285
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 13 deletions.
20 changes: 11 additions & 9 deletions avidemux_plugins/ADM_demuxers/Flv/ADM_flv.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -365,7 +365,8 @@ bool flvHeader::extraHeader(flvTrak *trk,uint32_t *remain,bool have_cts,int32_t

uint8_t flvHeader::open(const char *name)
{
uint32_t prevLen, type, size, dts,pos=0;
uint32_t prevLen, type, size, dts;
uint64_t pos=0;
bool firstVideo=true;
_isvideopresent=0;
_isaudiopresent=0;
Expand All @@ -380,11 +381,11 @@ uint8_t flvHeader::open(const char *name)
return 0;
}
// Get size
uint32_t fileSize=0;
uint64_t fileSize=0;
fseeko(_fd,0,SEEK_END);
fileSize=ftello(_fd);
fseeko(_fd,0,SEEK_SET);
printf("[FLV] file size :%u bytes\n",fileSize);
printf("[FLV] file size :%" PRIu64 " bytes\n",fileSize);
// It must begin by F L V 01
uint8_t four[4];

Expand Down Expand Up @@ -417,7 +418,7 @@ uint8_t flvHeader::open(const char *name)
fseeko(_fd,skip,SEEK_SET);
printf("[FLV] Skipping %u header bytes\n",skip);
pos=ftello(_fd);;
printf("pos:%u/%u\n",pos,fileSize);
printf("pos:%" PRIu64 "/%" PRIu64 "\n",pos,fileSize);
// Create our video index
videoTrack=new flvTrak(50);
if(_isaudiopresent)
Expand All @@ -435,15 +436,16 @@ uint8_t flvHeader::open(const char *name)
type=read8();
size=read24();
dts=read24();
read32(); // ???
dts|=((uint32_t)read8())<<24;
read24(); // StreamID, always 0
aprintf("--------\n");
aprintf("prevLen=%d\n",(int)prevLen);
aprintf("type =%d\n",(int)type);
aprintf("size =%d\n",(int)size);
aprintf("dts =%d\n",(int)dts);
if(!size) continue;
uint32_t remaining=size;
//printf("[FLV] At %08x found type %x size %u pts%u\n",pos,type,size,dts);
//printf("[FLV] At %08" PRIu64 " found type %x size %u pts%u\n",pos,type,size,dts);
switch(type)
{
case FLV_TAG_TYPE_AUDIO:
Expand Down Expand Up @@ -512,7 +514,7 @@ uint8_t flvHeader::open(const char *name)
insertVideo(ftello(_fd),remaining,frameType,dts,pts);
}
break;
default: printf("[FLV]At 0x%x, unhandled type %u\n",pos,type);
default: printf("[FLV]At 0x%" PRIx64 ", unhandled type %u\n",pos,type);
}
Skip(remaining);
} // while
Expand Down Expand Up @@ -720,7 +722,7 @@ uint8_t flvHeader::setAudioHeader(uint32_t format,uint32_t fq,uint32_t bps,uin
\fn insertVideo
\brief add a frame to the index, grow the index if needed
*/
uint8_t flvHeader::insertVideo(uint32_t pos,uint32_t size,uint32_t frameType,uint32_t dts,uint32_t pts)
uint8_t flvHeader::insertVideo(uint64_t pos,uint32_t size,uint32_t frameType,uint32_t dts,uint32_t pts)
{
videoTrack->grow();
flvIndex *x=&(videoTrack->_index[videoTrack->_nbIndex]);
Expand All @@ -745,7 +747,7 @@ uint8_t flvHeader::insertVideo(uint32_t pos,uint32_t size,uint32_t frameType,uin
\fn insertVideo
\brief add a frame to the index, grow the index if needed
*/
uint8_t flvHeader::insertAudio(uint32_t pos,uint32_t size,uint32_t pts)
uint8_t flvHeader::insertAudio(uint64_t pos,uint32_t size,uint32_t pts)
{
audioTrack->grow();
flvIndex *x=&(audioTrack->_index[audioTrack->_nbIndex]);
Expand Down
4 changes: 2 additions & 2 deletions avidemux_plugins/ADM_demuxers/Flv/ADM_flv.h
Original file line number Diff line number Diff line change
Expand Up @@ -111,8 +111,8 @@ class flvHeader :public vidHeader
uint32_t read24(void);
uint32_t read32(void);
uint8_t Skip(uint32_t len);
uint8_t insertVideo(uint32_t pos,uint32_t size,uint32_t frameType,uint32_t dts,uint32_t pts);
uint8_t insertAudio(uint32_t pos,uint32_t size,uint32_t pts);
uint8_t insertVideo(uint64_t pos,uint32_t size,uint32_t frameType,uint32_t dts,uint32_t pts);
uint8_t insertAudio(uint64_t pos,uint32_t size,uint32_t pts);
uint8_t setAudioHeader(uint32_t format,uint32_t fq,uint32_t bps,uint32_t channels);
uint8_t setVideoHeader(uint8_t codec,uint32_t *remaining);
bool extraHeader(flvTrak *trk,uint32_t *remain,bool haveCts,int32_t *cts);
Expand Down
4 changes: 2 additions & 2 deletions avidemux_plugins/ADM_demuxers/Flv/ADM_flvAudio.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,8 @@ uint64_t ADM_flvAccess::getDurationInUs(void)
bool ADM_flvAccess::goToTime(uint64_t timeUs)
{

uint32_t target=(timeUs);;
uint32_t mstime=target;
uint64_t target=timeUs;
uint64_t mstime=target;
uint32_t _nbClusters=_track->_nbIndex;

// First identify the cluster...
Expand Down

0 comments on commit 5439285

Please sign in to comment.