summaryrefslogtreecommitdiffstats
path: root/video
diff options
context:
space:
mode:
Diffstat (limited to 'video')
-rw-r--r--video/decode/dec_video.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/video/decode/dec_video.c b/video/decode/dec_video.c
index a78203b49a..67c5eaccd7 100644
--- a/video/decode/dec_video.c
+++ b/video/decode/dec_video.c
@@ -390,6 +390,13 @@ void video_set_start(struct dec_video *d_video, double start_pts)
d_video->start_pts = start_pts;
}
+static bool is_new_segment(struct dec_video *d_video, struct demux_packet *p)
+{
+ return p->segmented &&
+ (p->start != d_video->start || p->end != d_video->end ||
+ p->codec != d_video->codec);
+}
+
void video_work(struct dec_video *d_video)
{
if (d_video->current_mpi || !d_video->vd_driver)
@@ -402,7 +409,7 @@ void video_work(struct dec_video *d_video)
return;
}
- if (d_video->packet && d_video->packet->new_segment) {
+ if (d_video->packet && is_new_segment(d_video, d_video->packet)) {
assert(!d_video->new_segment);
d_video->new_segment = d_video->packet;
d_video->packet = NULL;
@@ -472,8 +479,6 @@ void video_work(struct dec_video *d_video)
d_video->start = new_segment->start;
d_video->end = new_segment->end;
- new_segment->new_segment = false;
-
d_video->packet = new_segment;
d_video->current_state = DATA_AGAIN;
}