@ -52,6 +52,7 @@ typedef struct PGSSubPresentation {
int id_number ;
int object_count ;
PGSSubPictureReference * objects ;
int64_t pts ;
} PGSSubPresentation ;
typedef struct PGSSubPicture {
@ -67,7 +68,6 @@ typedef struct PGSSubContext {
PGSSubPresentation presentation ;
uint32_t clut [ 256 ] ;
PGSSubPicture pictures [ UINT16_MAX ] ;
int64_t pts ;
int forced_subs_only ;
} PGSSubContext ;
@ -295,7 +295,8 @@ static void parse_palette_segment(AVCodecContext *avctx,
* @ todo TODO : Implement cropping
*/
static void parse_presentation_segment ( AVCodecContext * avctx ,
const uint8_t * buf , int buf_size )
const uint8_t * buf , int buf_size ,
int64_t pts )
{
PGSSubContext * ctx = avctx - > priv_data ;
@ -304,6 +305,8 @@ static void parse_presentation_segment(AVCodecContext *avctx,
uint16_t object_index ;
ctx - > presentation . pts = pts ;
av_dlog ( avctx , " Video Dimensions %dx%d \n " ,
w , h ) ;
if ( av_image_check_size ( w , h , 0 , avctx ) > = 0 )
@ -394,10 +397,10 @@ static int display_end_segment(AVCodecContext *avctx, void *data,
* not been cleared by a subsequent empty display command .
*/
pts = ctx - > pts ! = AV_NOPTS_VALUE ? ctx - > pts : sub - > pts ;
pts = ctx - > presentation . p ts ! = AV_NOPTS_VALUE ? ctx - > presentation . pts : sub - > pts ;
memset ( sub , 0 , sizeof ( * sub ) ) ;
sub - > pts = pts ;
ctx - > pts = AV_NOPTS_VALUE ;
ctx - > presentation . p ts = AV_NOPTS_VALUE ;
// Blank if last object_count was 0.
if ( ! ctx - > presentation . object_count )
@ -493,8 +496,7 @@ static int decode(AVCodecContext *avctx, void *data, int *data_size,
parse_picture_segment ( avctx , buf , segment_length ) ;
break ;
case PRESENTATION_SEGMENT :
parse_presentation_segment ( avctx , buf , segment_length ) ;
ctx - > pts = sub - > pts ;
parse_presentation_segment ( avctx , buf , segment_length , sub - > pts ) ;
break ;
case WINDOW_SEGMENT :
/*