[FFmpeg-devel] [PATCH 2/3] avformat/mov: set packet duration in fragmented input

James Almer jamrial at gmail.com
Wed Nov 20 22:27:04 EET 2024


From: Thierry Foucu <tfoucu at gmail.com>

Fixes ticket #11312.

Signed-off-by: James Almer <jamrial at gmail.com>
---
 libavformat/isom.h | 1 +
 libavformat/mov.c  | 4 ++++
 2 files changed, 5 insertions(+)

diff --git a/libavformat/isom.h b/libavformat/isom.h
index ff08f2a48d..9a086b05c2 100644
--- a/libavformat/isom.h
+++ b/libavformat/isom.h
@@ -62,6 +62,7 @@ typedef struct MOVStts {
 typedef struct MOVCtts {
     unsigned int count;
     int offset;
+    int duration; // used when handling fragments
 } MOVCtts;
 
 typedef struct MOVStsc {
diff --git a/libavformat/mov.c b/libavformat/mov.c
index 3e94a21418..c5c9fb10a6 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -4089,6 +4089,7 @@ static int64_t add_ctts_entry(MOVCtts** ctts_data, unsigned int* ctts_count, uns
 
     ctts_buf_new[*ctts_count].count = count;
     ctts_buf_new[*ctts_count].offset = offset;
+    ctts_buf_new[*ctts_count].duration = 0;
 
     *ctts_count = (*ctts_count) + 1;
     return *ctts_count;
@@ -5910,6 +5911,7 @@ static int mov_read_trun(MOVContext *c, AVIOContext *pb, MOVAtom atom)
         sti->index_entries[index_entry_pos].flags = index_entry_flags;
 
         sc->ctts_data[index_entry_pos].count = 1;
+        sc->ctts_data[index_entry_pos].duration = sample_duration;
         sc->ctts_data[index_entry_pos].offset = ctts_duration;
         index_entry_pos++;
 
@@ -10722,6 +10724,8 @@ 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].offset));
+        if (sc->ctts_data[sc->ctts_index].duration)
+            pkt->duration = sc->ctts_data[sc->ctts_index].duration;
 
         /* update ctts context */
         sc->ctts_sample++;
-- 
2.47.0



More information about the ffmpeg-devel mailing list