| @@ -2218,32 +2218,32 @@ static int mov_preroll_write_stbl_atoms(AVIOContext *pb, MOVTrack *track) | |||||
| av_assert0(track->par->codec_id == AV_CODEC_ID_OPUS || track->par->codec_id == AV_CODEC_ID_AAC); | av_assert0(track->par->codec_id == AV_CODEC_ID_OPUS || track->par->codec_id == AV_CODEC_ID_AAC); | ||||
| if (track->par->codec_id == AV_CODEC_ID_OPUS) { | if (track->par->codec_id == AV_CODEC_ID_OPUS) { | ||||
| for (i = 0; i < track->entry; i++) { | |||||
| int roll_samples_remaining = roll_samples; | |||||
| int distance = 0; | |||||
| for (j = i - 1; j >= 0; j--) { | |||||
| roll_samples_remaining -= get_cluster_duration(track, j); | |||||
| distance++; | |||||
| if (roll_samples_remaining <= 0) | |||||
| break; | |||||
| } | |||||
| /* We don't have enough preceeding samples to compute a valid | |||||
| roll_distance here, so this sample can't be independently | |||||
| decoded. */ | |||||
| if (roll_samples_remaining > 0) | |||||
| distance = 0; | |||||
| /* Verify distance is a minimum of 2 (60ms) packets and a maximum of | |||||
| 32 (2.5ms) packets. */ | |||||
| av_assert0(distance == 0 || (distance >= 2 && distance <= 32)); | |||||
| if (i && distance == sgpd_entries[entries].roll_distance) { | |||||
| sgpd_entries[entries].count++; | |||||
| } else { | |||||
| entries++; | |||||
| sgpd_entries[entries].count = 1; | |||||
| sgpd_entries[entries].roll_distance = distance; | |||||
| sgpd_entries[entries].group_description_index = distance ? ++group : 0; | |||||
| for (i = 0; i < track->entry; i++) { | |||||
| int roll_samples_remaining = roll_samples; | |||||
| int distance = 0; | |||||
| for (j = i - 1; j >= 0; j--) { | |||||
| roll_samples_remaining -= get_cluster_duration(track, j); | |||||
| distance++; | |||||
| if (roll_samples_remaining <= 0) | |||||
| break; | |||||
| } | |||||
| /* We don't have enough preceeding samples to compute a valid | |||||
| roll_distance here, so this sample can't be independently | |||||
| decoded. */ | |||||
| if (roll_samples_remaining > 0) | |||||
| distance = 0; | |||||
| /* Verify distance is a minimum of 2 (60ms) packets and a maximum of | |||||
| 32 (2.5ms) packets. */ | |||||
| av_assert0(distance == 0 || (distance >= 2 && distance <= 32)); | |||||
| if (i && distance == sgpd_entries[entries].roll_distance) { | |||||
| sgpd_entries[entries].count++; | |||||
| } else { | |||||
| entries++; | |||||
| sgpd_entries[entries].count = 1; | |||||
| sgpd_entries[entries].roll_distance = distance; | |||||
| sgpd_entries[entries].group_description_index = distance ? ++group : 0; | |||||
| } | |||||
| } | } | ||||
| } | |||||
| } else { | } else { | ||||
| entries++; | entries++; | ||||
| sgpd_entries[entries].count = track->sample_count; | sgpd_entries[entries].count = track->sample_count; | ||||