@ -51,16 +51,23 @@ static int srt_read_header(AVFormatContext *s)
return 0 ;
return 0 ;
}
}
static int64_t get_pts ( const char * buf )
static int64_t get_pts ( const char * buf , int * duration )
{
{
int i , v , hour , min , sec , hsec ;
int i , hour , min , sec , hsec ;
int he , me , se , mse ;
for ( i = 0 ; i < 2 ; i + + ) {
for ( i = 0 ; i < 2 ; i + + ) {
if ( sscanf ( buf , " %d:%2d:%2d%*1[,.]%3d --> %*d:%*2d:%*2d%*1[,.]%3d " ,
int64_t start , end ;
& hour , & min , & sec , & hsec , & v ) = = 5 ) {
if ( sscanf ( buf , " %d:%2d:%2d%*1[,.]%3d --> %d:%2d:%2d%*1[,.]%3d " ,
& hour , & min , & sec , & hsec , & he , & me , & se , & mse ) = = 8 ) {
min + = 60 * hour ;
min + = 60 * hour ;
sec + = 60 * min ;
sec + = 60 * min ;
return sec * 1000 + hsec ;
start = sec * 1000 + hsec ;
me + = 60 * he ;
se + = 60 * me ;
end = se * 1000 + mse ;
* duration = end - start ;
return start ;
}
}
buf + = strcspn ( buf , " \n " ) + 1 ;
buf + = strcspn ( buf , " \n " ) + 1 ;
}
}
@ -87,7 +94,7 @@ static int srt_read_packet(AVFormatContext *s, AVPacket *pkt)
memcpy ( pkt - > data , buffer , pkt - > size ) ;
memcpy ( pkt - > data , buffer , pkt - > size ) ;
pkt - > flags | = AV_PKT_FLAG_KEY ;
pkt - > flags | = AV_PKT_FLAG_KEY ;
pkt - > pos = pos ;
pkt - > pos = pos ;
pkt - > pts = pkt - > dts = get_pts ( pkt - > data ) ;
pkt - > pts = pkt - > dts = get_pts ( pkt - > data , & ( pkt - > duration ) ) ;
}
}
return res ;
return res ;
}
}