summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sub/sd_lavc.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/sub/sd_lavc.c b/sub/sd_lavc.c
index 620b3f85a7..21dd85f408 100644
--- a/sub/sd_lavc.c
+++ b/sub/sd_lavc.c
@@ -62,6 +62,8 @@ struct sd_lavc_priv {
AVRational pkt_timebase;
struct sub subs[MAX_QUEUE]; // most recent event first
struct sub_bitmap *outbitmaps;
+ struct sub_bitmap *prevret;
+ int prevret_num;
int64_t displayed_id;
int64_t new_id;
struct mp_image_params video_params;
@@ -490,6 +492,28 @@ static struct sub_bitmaps *get_bitmaps(struct sd *sd, struct mp_osd_res d,
}
}
+ if (priv->prevret_num != res->num_parts)
+ res->change_id++;
+
+ if (!res->change_id) {
+ assert(priv->prevret_num == res->num_parts);
+ for (int n = 0; n < priv->prevret_num; n++) {
+ struct sub_bitmap *a = &res->parts[n];
+ struct sub_bitmap *b = &priv->prevret[n];
+
+ if (a->x != b->x || a->y != b->y ||
+ a->dw != b->dw || a->dh != b->dh)
+ {
+ res->change_id++;
+ break;
+ }
+ }
+ }
+
+ priv->prevret_num = res->num_parts;
+ MP_TARRAY_GROW(priv, priv->prevret, priv->prevret_num);
+ memcpy(priv->prevret, res->parts, res->num_parts * sizeof(priv->prevret[0]));
+
return sub_bitmaps_copy(NULL, res);
}