qtmux: Fix update_expected_trailer_size() 64/285664/4 accepted/tizen/unified/20221221.165300
authorJeongmo Yang <jm80.yang@samsung.com>
Fri, 16 Dec 2022 06:22:30 +0000 (22:22 -0800)
committerJeongmo Yang <jm80.yang@samsung.com>
Mon, 19 Dec 2022 01:32:38 +0000 (10:32 +0900)
[Version] 1.20.0-44
[Issue Type] Bug fix

Change-Id: I387c43de3d9609aa8bc5a308ad5f6166f0dc364c
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
packaging/gstreamer.spec
subprojects/gst-plugins-good/gst/isomp4/gstqtmux.c

index ab6e778..d541439 100644 (file)
@@ -62,7 +62,7 @@
 
 Name:           %{_name}
 Version:        1.20.0
-Release:        43
+Release:        44
 Summary:        Streaming-Media Framework Runtime
 License:        LGPL-2.0+
 Group:          Multimedia/Framework
index 5ce2e5b..f6e76b9 100644 (file)
@@ -486,7 +486,7 @@ static GstElementClass *parent_class = NULL;
              stts = 16 + (8*stts_count)
              stsc = 28
              stsz = 20 + (4*frame)
-             stco = 16 + (4*frame)
+             stco = 16 + (4*stco_count)
 
          - AAC
              stsd = 94 (16, mp4a : 78(36 ,esds : 42))
@@ -531,8 +531,10 @@ gst_qt_mux_update_expected_trailer_size (GstQTMux *qtmux, GstQTMuxPad *pad)
   guint nb_video_frames = 0;
   guint nb_video_i_frames = 0;
   guint nb_video_stts_entry = 0;
+  guint nb_video_stco_entry = 0;
   guint nb_audio_frames = 0;
   guint nb_audio_stts_entry = 0;
+  guint nb_audio_stco_entry = 0;
   gboolean video_stream = FALSE;
   gboolean audio_stream = FALSE;
   guint exp_size = 0;
@@ -546,14 +548,16 @@ gst_qt_mux_update_expected_trailer_size (GstQTMux *qtmux, GstQTMuxPad *pad)
   qtmux_klass = (GstQTMuxClass *)(G_OBJECT_GET_CLASS(qtmux));
 
   if (!strncmp(GST_PAD_NAME(pad), "video", 5)) {
-    nb_video_frames += pad->trak->mdia.minf.stbl.stsz.table_size;
-    nb_video_i_frames += pad->trak->mdia.minf.stbl.stss.entries.len;
-    nb_video_stts_entry += pad->trak->mdia.minf.stbl.stts.entries.len;
+    nb_video_frames = pad->trak->mdia.minf.stbl.stsz.table_size;
+    nb_video_i_frames = pad->trak->mdia.minf.stbl.stss.entries.len;
+    nb_video_stts_entry = pad->trak->mdia.minf.stbl.stts.entries.len;
+    nb_video_stco_entry = pad->trak->mdia.minf.stbl.stco64.entries.len;
 
     video_stream = TRUE;
   } else if (!strncmp(GST_PAD_NAME(pad), "audio", 5)) {
-    nb_audio_frames += pad->trak->mdia.minf.stbl.stsz.table_size;
-    nb_audio_stts_entry += pad->trak->mdia.minf.stbl.stts.entries.len;
+    nb_audio_frames = pad->trak->mdia.minf.stbl.stsz.table_size;
+    nb_audio_stts_entry = pad->trak->mdia.minf.stbl.stts.entries.len;
+    nb_audio_stco_entry = pad->trak->mdia.minf.stbl.stco64.entries.len;
 
     audio_stream = TRUE;
   }
@@ -596,7 +600,7 @@ gst_qt_mux_update_expected_trailer_size (GstQTMux *qtmux, GstQTMuxPad *pad)
     /* frame related */
     exp_size += ENTRY_SIZE_VIDEO_ST + (ENTRY_SIZE_VIDEO_STTS * nb_video_stts_entry) +
                 (ENTRY_SIZE_VIDEO_STSS * nb_video_i_frames) + (ENTRY_SIZE_STSC) +
-                ((ENTRY_SIZE_VIDEO_STSZ + ENTRY_SIZE_VIDEO_STCO) * nb_video_frames);
+                (ENTRY_SIZE_VIDEO_STSZ * nb_video_frames) + (ENTRY_SIZE_VIDEO_STCO * nb_video_stco_entry);
 
     qtmux->video_expected_trailer_size = exp_size;
   }
@@ -604,7 +608,7 @@ gst_qt_mux_update_expected_trailer_size (GstQTMux *qtmux, GstQTMuxPad *pad)
   /* Calculate trailer size for audio stream */
   if (audio_stream) {
     exp_size += MUX_COMMON_SIZE_AUDIO_HEADER + ENTRY_SIZE_AUDIO_ST + (ENTRY_SIZE_AUDIO_STTS * nb_audio_stts_entry) +
-                (ENTRY_SIZE_STSC) + ((ENTRY_SIZE_AUDIO_STSZ + ENTRY_SIZE_AUDIO_STCO) * nb_audio_frames);
+                (ENTRY_SIZE_STSC) + (ENTRY_SIZE_AUDIO_STSZ * nb_audio_frames) + (ENTRY_SIZE_AUDIO_STCO * nb_audio_stco_entry);
 
     if (pad->fourcc == FOURCC_samr)
       exp_size += ENTRY_SIZE_AUDIO_AMR_STSD;