@@ -5700,11 +5700,16 @@ static int mov_read_trun(MOVContext *c, AVIOContext *pb, MOVAtom atom)
sc->ctts_data[index_entry_pos].count = 1;
sc->ctts_data[index_entry_pos].duration = ctts_duration;
+ if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
+ sc->ctts_data[index_entry_pos].duration = sample_duration;
+ } else {
+ sc->ctts_data[index_entry_pos].duration = ctts_duration;
+ }
index_entry_pos++;
av_log(c->fc, AV_LOG_TRACE, "AVIndex stream %d, sample %d, offset %"PRIx64", dts %"PRId64", "
- "size %u, distance %d, keyframe %d\n", st->index,
- index_entry_pos, offset, dts, sample_size, distance, keyframe);
+ "size %u, distance %d, keyframe %d duration %d\n", st->index,
+ index_entry_pos, offset, dts, sample_size, distance, keyframe, sc->ctts_data[index_entry_pos-1].duration);
distance++;
if (av_sat_add64(dts, sample_duration) != dts + (uint64_t)sample_duration)
return AVERROR_INVALIDDATA;
@@ -9894,6 +9899,9 @@ static int mov_finalize_packet(AVFormatContext *s, AVStream *st, AVIndexEntry *s
}
if (sc->ctts_data && sc->ctts_index < sc->ctts_count) {
pkt->pts = av_sat_add64(pkt->dts, av_sat_add64(sc->dts_shift, sc->ctts_data[sc->ctts_index].duration));
+ if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
+ pkt->duration = sc->ctts_data[sc->ctts_index].duration;
+ }
/* update ctts context */
sc->ctts_sample++;
if (sc->ctts_index < sc->ctts_count &&