summaryrefslogtreecommitdiffstats
path: root/audio/decode/dec_audio.c
diff options
context:
space:
mode:
Diffstat (limited to 'audio/decode/dec_audio.c')
-rw-r--r--audio/decode/dec_audio.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/audio/decode/dec_audio.c b/audio/decode/dec_audio.c
index 387a479a8c..5eca89b1e2 100644
--- a/audio/decode/dec_audio.c
+++ b/audio/decode/dec_audio.c
@@ -196,6 +196,12 @@ static void fix_audio_pts(struct dec_audio *da)
da->pts += mp_aframe_duration(da->current_frame);
}
+static bool is_new_segment(struct dec_audio *da, struct demux_packet *p)
+{
+ return p->segmented &&
+ (p->start != da->start || p->end != da->end || p->codec != da->codec);
+}
+
void audio_work(struct dec_audio *da)
{
if (da->current_frame || !da->ad_driver)
@@ -208,7 +214,7 @@ void audio_work(struct dec_audio *da)
return;
}
- if (da->packet && da->packet->new_segment) {
+ if (da->packet && is_new_segment(da, da->packet)) {
assert(!da->new_segment);
da->new_segment = da->packet;
da->packet = NULL;
@@ -260,8 +266,6 @@ void audio_work(struct dec_audio *da)
da->start = new_segment->start;
da->end = new_segment->end;
- new_segment->new_segment = false;
-
da->packet = new_segment;
da->current_state = DATA_AGAIN;
}