qtmux: Fix update_expected_trailer_size() 20/285720/1 accepted/tizen/7.0/unified/20221220.180242
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 03:23:01 +0000 (12:23 +0900)
[Version] 1.20.0-41
[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 bb74324b20425fe9062076c348472098e65ea173..cc470632d8368624c5cf1ade557bfadb2dab77b1 100644 (file)
@@ -62,7 +62,7 @@
 
 Name:           %{_name}
 Version:        1.20.0
-Release:        40
+Release:        41
 Summary:        Streaming-Media Framework Runtime
 License:        LGPL-2.0+
 Group:          Multimedia/Framework
index 5ce2e5b21ca16143cff26a90ff8cf643b766ef02..f6e76b96364e50d975800e0a48bf100bd2d54f72 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;