(stream->continuity_counter == MAX_CONTINUITY && cc == 0))) {
GST_LOG ("CONTINUITY: Got expected %d", cc);
} else {
- GST_WARNING ("CONTINUITY: Mismatch packet %d, stream %d",
- cc, stream->continuity_counter);
- if (stream->state != PENDING_PACKET_EMPTY)
- stream->state = PENDING_PACKET_DISCONT;
+ if (stream->state != PENDING_PACKET_EMPTY) {
+ if (packet->payload_unit_start_indicator) {
+ /* A mismatch is fatal, except if this is the beginning of a new
+ * frame (from which we can recover) */
+ if (G_UNLIKELY (stream->data)) {
+ g_free (stream->data);
+ stream->data = NULL;
+ }
+ stream->state = PENDING_PACKET_HEADER;
+ } else {
+ GST_WARNING ("CONTINUITY: Mismatch packet %d, stream %d",
+ cc, stream->continuity_counter);
+ stream->state = PENDING_PACKET_DISCONT;
+ }
+ }
}
stream->continuity_counter = cc;