int id_number;
int object_count;
PGSSubPictureReference *objects;
+ int64_t pts;
} PGSSubPresentation;
typedef struct PGSSubPicture {
PGSSubPresentation presentation;
uint32_t clut[256];
PGSSubPicture pictures[UINT16_MAX];
- int64_t pts;
int forced_subs_only;
} PGSSubContext;
* @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;
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)
* not been cleared by a subsequent empty display command.
*/
- pts = ctx->pts != AV_NOPTS_VALUE ? ctx->pts : sub->pts;
+ pts = ctx->presentation.pts != AV_NOPTS_VALUE ? ctx->presentation.pts : sub->pts;
memset(sub, 0, sizeof(*sub));
sub->pts = pts;
- ctx->pts = AV_NOPTS_VALUE;
+ ctx->presentation.pts = AV_NOPTS_VALUE;
// Blank if last object_count was 0.
if (!ctx->presentation.object_count)
static int decode(AVCodecContext *avctx, void *data, int *data_size,
AVPacket *avpkt)
{
- PGSSubContext *ctx = avctx->priv_data;
const uint8_t *buf = avpkt->data;
int buf_size = avpkt->size;
AVSubtitle *sub = data;
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:
/*