From dbefcc1e6cd6cbb7583d69c6777ac85e5afafa75 Mon Sep 17 00:00:00 2001 From: Jeongmo Yang Date: Thu, 15 Dec 2022 22:22:30 -0800 Subject: [PATCH] qtmux: Fix update_expected_trailer_size() [Version] 1.20.0-44 [Issue Type] Bug fix Change-Id: I387c43de3d9609aa8bc5a308ad5f6166f0dc364c Signed-off-by: Jeongmo Yang --- packaging/gstreamer.spec | 2 +- subprojects/gst-plugins-good/gst/isomp4/gstqtmux.c | 20 ++++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/packaging/gstreamer.spec b/packaging/gstreamer.spec index ab6e778..d541439 100644 --- a/packaging/gstreamer.spec +++ b/packaging/gstreamer.spec @@ -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 diff --git a/subprojects/gst-plugins-good/gst/isomp4/gstqtmux.c b/subprojects/gst-plugins-good/gst/isomp4/gstqtmux.c index 5ce2e5b..f6e76b9 100644 --- a/subprojects/gst-plugins-good/gst/isomp4/gstqtmux.c +++ b/subprojects/gst-plugins-good/gst/isomp4/gstqtmux.c @@ -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; -- 2.7.4