qtdemux: Use already parsed stsd entries instead of parsing them again

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8929>
This commit is contained in:
Sebastian Dröge 2025-05-04 15:48:55 +03:00 committed by GStreamer Marge Bot
parent cf2b1909ec
commit bb50741b73

View File

@ -14508,8 +14508,6 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak, guint32 * mvhd_matrix)
QtDemuxStream *stream = NULL;
const guint8 *stsd_data;
const guint8 *stsd_entry_data;
guint remaining_stsd_len;
guint stsd_entry_count;
guint stsd_index;
guint16 lang_code; /* quicktime lang code or packed iso code */
@ -14713,18 +14711,21 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak, guint32 * mvhd_matrix)
GST_LOG_OBJECT (qtdemux, "stsd len: %d", stsd_len);
GST_LOG_OBJECT (qtdemux, "stsd entry count: %u", stsd_entry_count);
stsd_entry_data = stsd_data + 16;
remaining_stsd_len = stsd_len - 16;
for (stsd_index = 0; stsd_index < stsd_entry_count; stsd_index++) {
GNode *stsd_entry;
const guint8 *stsd_entry_data;
guint32 fourcc;
gchar *codec = NULL;
QtDemuxStreamStsdEntry *entry = &stream->stsd_entries[stsd_index];
/* and that entry should fit within stsd */
len = QT_UINT32 (stsd_entry_data);
if (len > remaining_stsd_len)
stsd_entry = qtdemux_tree_get_child_by_index (stsd, stsd_index);
if (!stsd_entry)
goto corrupt_file;
stsd_entry_data = stsd_entry->data;
len = QT_UINT32 (stsd_entry_data);
entry->fourcc = fourcc = QT_FOURCC (stsd_entry_data + 4);
GST_LOG_OBJECT (qtdemux, "stsd type: %" GST_FOURCC_FORMAT,
GST_FOURCC_ARGS (entry->fourcc));
@ -17036,10 +17037,6 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak, guint32 * mvhd_matrix)
} else if (entry->fourcc == FOURCC_mp4a) {
entry->sampled = TRUE;
}
stsd_entry_data += len;
remaining_stsd_len -= len;
}
/* Sample grouping support */