+ if (prev_segments) {
+ if (pls->start_seq_no > prev_start_seq_no && c->first_timestamp != AV_NOPTS_VALUE) {
+ int64_t prev_timestamp = c->first_timestamp;
+ int i;
+ int64_t diff = pls->start_seq_no - prev_start_seq_no;
+ for (i = 0; i < prev_n_segments && i < diff; i++) {
+ c->first_timestamp += prev_segments[i]->duration;
+ }
+ av_log(c->ctx, AV_LOG_DEBUG, "Media sequence change (%"PRId64" -> %"PRId64")"
+ " reflected in first_timestamp: %"PRId64" -> %"PRId64"\n",
+ prev_start_seq_no, pls->start_seq_no,
+ prev_timestamp, c->first_timestamp);
+ } else if (pls->start_seq_no < prev_start_seq_no) {
+ av_log(c->ctx, AV_LOG_WARNING, "Media sequence changed unexpectedly: %"PRId64" -> %"PRId64"\n",
+ prev_start_seq_no, pls->start_seq_no);
+ }
+ free_segment_dynarray(prev_segments, prev_n_segments);
+ av_freep(&prev_segments);
+ }