diff --git a/.gitignore b/.gitignore index 163c9bc..973b911 100644 --- a/.gitignore +++ b/.gitignore @@ -75,3 +75,4 @@ /gst-plugins-bad-free-1.18.2.tar.xz /gst-plugins-bad-free-1.18.4.tar.xz /gst-plugins-bad-free-1.22.1.tar.xz +/gst-plugins-bad-free-1.22.12.tar.xz diff --git a/0001-mxfdemux-Fix-integer-overflow-causing-out-of-bounds-.patch b/0001-mxfdemux-Fix-integer-overflow-causing-out-of-bounds-.patch deleted file mode 100644 index b9f0f61..0000000 --- a/0001-mxfdemux-Fix-integer-overflow-causing-out-of-bounds-.patch +++ /dev/null @@ -1,114 +0,0 @@ -From 27959a895db3949dee1c93cc05cb73465e2a1fbe Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= -Date: Thu, 10 Aug 2023 15:45:01 +0300 -Subject: [PATCH 1/4] mxfdemux: Fix integer overflow causing out of bounds - writes when handling invalid uncompressed video - -Check ahead of time when parsing the track information whether -width, height and bpp are valid and usable without overflows. - -Fixes ZDI-CAN-21660, CVE-2023-40474 - -Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2896 - -Part-of: ---- - subprojects/gst-plugins-bad/gst/mxf/mxfup.c | 51 +++++++++++++++++---- - 1 file changed, 43 insertions(+), 8 deletions(-) - -diff --git a/subprojects/gst-plugins-bad/gst/mxf/mxfup.c b/subprojects/gst-plugins-bad/gst/mxf/mxfup.c -index d8b6664dab..ba86255f20 100644 ---- a/subprojects/gst-plugins-bad/gst/mxf/mxfup.c -+++ b/subprojects/gst-plugins-bad/gst/mxf/mxfup.c -@@ -134,6 +134,8 @@ mxf_up_handle_essence_element (const MXFUL * key, GstBuffer * buffer, - gpointer mapping_data, GstBuffer ** outbuf) - { - MXFUPMappingData *data = mapping_data; -+ gsize expected_in_stride = 0, out_stride = 0; -+ gsize expected_in_size = 0, out_size = 0; - - /* SMPTE 384M 7.1 */ - if (key->u[12] != 0x15 || (key->u[14] != 0x01 && key->u[14] != 0x02 -@@ -162,22 +164,25 @@ mxf_up_handle_essence_element (const MXFUL * key, GstBuffer * buffer, - } - } - -- if (gst_buffer_get_size (buffer) != data->bpp * data->width * data->height) { -+ // Checked for overflows when parsing the descriptor -+ expected_in_stride = data->bpp * data->width; -+ out_stride = GST_ROUND_UP_4 (expected_in_stride); -+ expected_in_size = expected_in_stride * data->height; -+ out_size = out_stride * data->height; -+ -+ if (gst_buffer_get_size (buffer) != expected_in_size) { - GST_ERROR ("Invalid buffer size"); - gst_buffer_unref (buffer); - return GST_FLOW_ERROR; - } - -- if (data->bpp != 4 -- || GST_ROUND_UP_4 (data->width * data->bpp) != data->width * data->bpp) { -+ if (data->bpp != 4 || out_stride != expected_in_stride) { - guint y; - GstBuffer *ret; - GstMapInfo inmap, outmap; - guint8 *indata, *outdata; - -- ret = -- gst_buffer_new_and_alloc (GST_ROUND_UP_4 (data->width * data->bpp) * -- data->height); -+ ret = gst_buffer_new_and_alloc (out_size); - gst_buffer_map (buffer, &inmap, GST_MAP_READ); - gst_buffer_map (ret, &outmap, GST_MAP_WRITE); - indata = inmap.data; -@@ -185,8 +190,8 @@ mxf_up_handle_essence_element (const MXFUL * key, GstBuffer * buffer, - - for (y = 0; y < data->height; y++) { - memcpy (outdata, indata, data->width * data->bpp); -- outdata += GST_ROUND_UP_4 (data->width * data->bpp); -- indata += data->width * data->bpp; -+ outdata += out_stride; -+ indata += expected_in_stride; - } - - gst_buffer_unmap (buffer, &inmap); -@@ -394,6 +399,36 @@ mxf_up_create_caps (MXFMetadataTimelineTrack * track, GstTagList ** tags, - return NULL; - } - -+ if (caps) { -+ MXFUPMappingData *data = *mapping_data; -+ gsize expected_in_stride = 0, out_stride = 0; -+ gsize expected_in_size = 0, out_size = 0; -+ -+ // Do some checking of the parameters to see if they're valid and -+ // we can actually work with them. -+ if (data->image_start_offset > data->image_end_offset) { -+ GST_WARNING ("Invalid image start/end offset"); -+ g_free (data); -+ *mapping_data = NULL; -+ gst_clear_caps (&caps); -+ -+ return NULL; -+ } -+ -+ if (!g_size_checked_mul (&expected_in_stride, data->bpp, data->width) || -+ (out_stride = GST_ROUND_UP_4 (expected_in_stride)) < expected_in_stride -+ || !g_size_checked_mul (&expected_in_size, expected_in_stride, -+ data->height) -+ || !g_size_checked_mul (&out_size, out_stride, data->height)) { -+ GST_ERROR ("Invalid resolution or bit depth"); -+ g_free (data); -+ *mapping_data = NULL; -+ gst_clear_caps (&caps); -+ -+ return NULL; -+ } -+ } -+ - return caps; - } - --- -2.43.0 - diff --git a/0001-mxfdemux-Store-GstMXFDemuxEssenceTrack-in-their-own-.patch b/0001-mxfdemux-Store-GstMXFDemuxEssenceTrack-in-their-own-.patch deleted file mode 100644 index 9467b26..0000000 --- a/0001-mxfdemux-Store-GstMXFDemuxEssenceTrack-in-their-own-.patch +++ /dev/null @@ -1,323 +0,0 @@ -From db2e5ccfcf4db7fc3d199d885b07e5eb34770c19 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= -Date: Fri, 20 Oct 2023 00:09:57 +0300 -Subject: [PATCH 1/2] mxfdemux: Store GstMXFDemuxEssenceTrack in their own - fixed allocation - -Previously they were stored inline inside a GArray, but as references to -the tracks were stored in various other places although the array could -still be updated (and reallocated!), this could lead to dangling -references in various places. - -Instead now store them in a GPtrArray in their own allocation so each -track's memory position stays fixed. - -Fixes ZDI-CAN-22299 - -Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3055 - -Part-of: ---- - .../gst-plugins-bad/gst/mxf/mxfdemux.c | 116 ++++++++---------- - .../gst-plugins-bad/gst/mxf/mxfdemux.h | 2 +- - 2 files changed, 50 insertions(+), 68 deletions(-) - -diff --git a/subprojects/gst-plugins-bad/gst/mxf/mxfdemux.c b/subprojects/gst-plugins-bad/gst/mxf/mxfdemux.c -index d9eb9a5844..1b58989631 100644 ---- a/subprojects/gst-plugins-bad/gst/mxf/mxfdemux.c -+++ b/subprojects/gst-plugins-bad/gst/mxf/mxfdemux.c -@@ -170,10 +170,25 @@ gst_mxf_demux_partition_free (GstMXFDemuxPartition * partition) - } - - static void --gst_mxf_demux_reset_mxf_state (GstMXFDemux * demux) -+gst_mxf_demux_essence_track_free (GstMXFDemuxEssenceTrack * t) - { -- guint i; -+ if (t->offsets) -+ g_array_free (t->offsets, TRUE); -+ -+ g_free (t->mapping_data); -+ -+ if (t->tags) -+ gst_tag_list_unref (t->tags); -+ -+ if (t->caps) -+ gst_caps_unref (t->caps); -+ -+ g_free (t); -+} - -+static void -+gst_mxf_demux_reset_mxf_state (GstMXFDemux * demux) -+{ - GST_DEBUG_OBJECT (demux, "Resetting MXF state"); - - g_list_foreach (demux->partitions, (GFunc) gst_mxf_demux_partition_free, -@@ -182,23 +197,7 @@ gst_mxf_demux_reset_mxf_state (GstMXFDemux * demux) - demux->partitions = NULL; - - demux->current_partition = NULL; -- -- for (i = 0; i < demux->essence_tracks->len; i++) { -- GstMXFDemuxEssenceTrack *t = -- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, i); -- -- if (t->offsets) -- g_array_free (t->offsets, TRUE); -- -- g_free (t->mapping_data); -- -- if (t->tags) -- gst_tag_list_unref (t->tags); -- -- if (t->caps) -- gst_caps_unref (t->caps); -- } -- g_array_set_size (demux->essence_tracks, 0); -+ g_ptr_array_set_size (demux->essence_tracks, 0); - } - - static void -@@ -216,7 +215,7 @@ gst_mxf_demux_reset_linked_metadata (GstMXFDemux * demux) - - for (i = 0; i < demux->essence_tracks->len; i++) { - GstMXFDemuxEssenceTrack *track = -- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, i); -+ g_ptr_array_index (demux->essence_tracks, i); - - track->source_package = NULL; - track->delta_id = -1; -@@ -419,7 +418,7 @@ gst_mxf_demux_partition_postcheck (GstMXFDemux * demux, - - for (i = 0; i < demux->essence_tracks->len; i++) { - GstMXFDemuxEssenceTrack *cand = -- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, i); -+ g_ptr_array_index (demux->essence_tracks, i); - - if (cand->body_sid != partition->partition.body_sid) - continue; -@@ -866,8 +865,7 @@ gst_mxf_demux_update_essence_tracks (GstMXFDemux * demux) - - for (k = 0; k < demux->essence_tracks->len; k++) { - GstMXFDemuxEssenceTrack *tmp = -- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, -- k); -+ g_ptr_array_index (demux->essence_tracks, k); - - if (tmp->track_number == track->parent.track_number && - tmp->body_sid == edata->body_sid) { -@@ -885,24 +883,23 @@ gst_mxf_demux_update_essence_tracks (GstMXFDemux * demux) - } - - if (!etrack) { -- GstMXFDemuxEssenceTrack tmp; -+ GstMXFDemuxEssenceTrack *tmp = g_new0 (GstMXFDemuxEssenceTrack, 1); - -- memset (&tmp, 0, sizeof (tmp)); -- tmp.body_sid = edata->body_sid; -- tmp.index_sid = edata->index_sid; -- tmp.track_number = track->parent.track_number; -- tmp.track_id = track->parent.track_id; -- memcpy (&tmp.source_package_uid, &package->parent.package_uid, 32); -+ tmp->body_sid = edata->body_sid; -+ tmp->index_sid = edata->index_sid; -+ tmp->track_number = track->parent.track_number; -+ tmp->track_id = track->parent.track_id; -+ memcpy (&tmp->source_package_uid, &package->parent.package_uid, 32); - - if (demux->current_partition->partition.body_sid == edata->body_sid && - demux->current_partition->partition.body_offset == 0) -- tmp.position = 0; -+ tmp->position = 0; - else -- tmp.position = -1; -+ tmp->position = -1; - -- g_array_append_val (demux->essence_tracks, tmp); -+ g_ptr_array_add (demux->essence_tracks, tmp); - etrack = -- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, -+ g_ptr_array_index (demux->essence_tracks, - demux->essence_tracks->len - 1); - new = TRUE; - } -@@ -1050,13 +1047,7 @@ gst_mxf_demux_update_essence_tracks (GstMXFDemux * demux) - - next: - if (new) { -- g_free (etrack->mapping_data); -- if (etrack->tags) -- gst_tag_list_unref (etrack->tags); -- if (etrack->caps) -- gst_caps_unref (etrack->caps); -- -- g_array_remove_index (demux->essence_tracks, -+ g_ptr_array_remove_index (demux->essence_tracks, - demux->essence_tracks->len - 1); - } - } -@@ -1069,7 +1060,7 @@ gst_mxf_demux_update_essence_tracks (GstMXFDemux * demux) - - for (i = 0; i < demux->essence_tracks->len; i++) { - GstMXFDemuxEssenceTrack *etrack = -- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, i); -+ g_ptr_array_index (demux->essence_tracks, i); - - if (!etrack->source_package || !etrack->source_track || !etrack->caps) { - GST_ERROR_OBJECT (demux, "Failed to update essence track %u", i); -@@ -1438,7 +1429,7 @@ gst_mxf_demux_update_tracks (GstMXFDemux * demux) - - for (k = 0; k < demux->essence_tracks->len; k++) { - GstMXFDemuxEssenceTrack *tmp = -- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, k); -+ g_ptr_array_index (demux->essence_tracks, k); - - if (tmp->source_package == source_package && - tmp->source_track == source_track) { -@@ -1927,8 +1918,7 @@ gst_mxf_demux_pad_set_component (GstMXFDemux * demux, GstMXFDemuxPad * pad, - pad->current_essence_track = NULL; - - for (k = 0; k < demux->essence_tracks->len; k++) { -- GstMXFDemuxEssenceTrack *tmp = -- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, k); -+ GstMXFDemuxEssenceTrack *tmp = g_ptr_array_index (demux->essence_tracks, k); - - if (tmp->source_package == source_package && - tmp->source_track == source_track) { -@@ -2712,7 +2702,7 @@ gst_mxf_demux_handle_generic_container_essence_element (GstMXFDemux * demux, - if (!etrack) { - for (i = 0; i < demux->essence_tracks->len; i++) { - GstMXFDemuxEssenceTrack *tmp = -- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, i); -+ g_ptr_array_index (demux->essence_tracks, i); - - if (tmp->body_sid == demux->current_partition->partition.body_sid && - (tmp->track_number == track_number || tmp->track_number == 0)) { -@@ -3916,8 +3906,7 @@ from_track_offset: - gst_mxf_demux_set_partition_for_offset (demux, demux->offset); - - for (i = 0; i < demux->essence_tracks->len; i++) { -- GstMXFDemuxEssenceTrack *t = -- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, i); -+ GstMXFDemuxEssenceTrack *t = g_ptr_array_index (demux->essence_tracks, i); - - if (index_start_position != -1 && t == etrack) - t->position = index_start_position; -@@ -3941,8 +3930,7 @@ from_track_offset: - /* Handle EOS */ - for (i = 0; i < demux->essence_tracks->len; i++) { - GstMXFDemuxEssenceTrack *t = -- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, -- i); -+ g_ptr_array_index (demux->essence_tracks, i); - - if (t->position > 0) - t->duration = t->position; -@@ -4180,8 +4168,7 @@ gst_mxf_demux_pull_and_handle_klv_packet (GstMXFDemux * demux) - guint i; - for (i = 0; i < demux->essence_tracks->len; i++) { - GstMXFDemuxEssenceTrack *etrack = -- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, -- i); -+ g_ptr_array_index (demux->essence_tracks, i); - - if (etrack->body_sid != partition->partition.body_sid) - continue; -@@ -4652,9 +4639,8 @@ gst_mxf_demux_pad_to_track_and_position (GstMXFDemux * demux, - /* Get the corresponding essence track for the given source package and stream id */ - for (i = 0; i < demux->essence_tracks->len; i++) { - GstMXFDemuxEssenceTrack *track = -- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, i); -- GST_LOG_OBJECT (pad, -- "Looking at essence track body_sid:%d index_sid:%d", -+ g_ptr_array_index (demux->essence_tracks, i); -+ GST_LOG_OBJECT (pad, "Looking at essence track body_sid:%d index_sid:%d", - track->body_sid, track->index_sid); - if (clip->source_track_id == 0 || (track->track_id == clip->source_track_id - && mxf_umid_is_equal (&clip->source_package_id, -@@ -4903,8 +4889,7 @@ gst_mxf_demux_seek_push (GstMXFDemux * demux, GstEvent * event) - } - - for (i = 0; i < demux->essence_tracks->len; i++) { -- GstMXFDemuxEssenceTrack *t = -- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, i); -+ GstMXFDemuxEssenceTrack *t = g_ptr_array_index (demux->essence_tracks, i); - t->position = -1; - } - -@@ -5342,8 +5327,7 @@ gst_mxf_demux_seek_pull (GstMXFDemux * demux, GstEvent * event) - } - - for (i = 0; i < demux->essence_tracks->len; i++) { -- GstMXFDemuxEssenceTrack *t = -- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, i); -+ GstMXFDemuxEssenceTrack *t = g_ptr_array_index (demux->essence_tracks, i); - t->position = -1; - } - -@@ -5642,7 +5626,7 @@ gst_mxf_demux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) - - for (i = 0; i < demux->essence_tracks->len; i++) { - GstMXFDemuxEssenceTrack *t = -- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, i); -+ g_ptr_array_index (demux->essence_tracks, i); - - if (t->position > 0) - t->duration = t->position; -@@ -5683,8 +5667,7 @@ gst_mxf_demux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) - - for (i = 0; i < demux->essence_tracks->len; i++) { - GstMXFDemuxEssenceTrack *etrack = -- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, -- i); -+ g_ptr_array_index (demux->essence_tracks, i); - etrack->position = -1; - } - ret = TRUE; -@@ -5708,8 +5691,7 @@ gst_mxf_demux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) - - for (i = 0; i < demux->essence_tracks->len; i++) { - GstMXFDemuxEssenceTrack *t = -- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, -- i); -+ g_ptr_array_index (demux->essence_tracks, i); - t->position = -1; - } - demux->current_partition = NULL; -@@ -5982,7 +5964,7 @@ gst_mxf_demux_finalize (GObject * object) - - g_ptr_array_free (demux->src, TRUE); - demux->src = NULL; -- g_array_free (demux->essence_tracks, TRUE); -+ g_ptr_array_free (demux->essence_tracks, TRUE); - demux->essence_tracks = NULL; - - g_hash_table_destroy (demux->metadata); -@@ -6059,8 +6041,8 @@ gst_mxf_demux_init (GstMXFDemux * demux) - g_rw_lock_init (&demux->metadata_lock); - - demux->src = g_ptr_array_new (); -- demux->essence_tracks = -- g_array_new (FALSE, FALSE, sizeof (GstMXFDemuxEssenceTrack)); -+ demux->essence_tracks = g_ptr_array_new_with_free_func ((GDestroyNotify) -+ gst_mxf_demux_essence_track_free); - - gst_segment_init (&demux->segment, GST_FORMAT_TIME); - -diff --git a/subprojects/gst-plugins-bad/gst/mxf/mxfdemux.h b/subprojects/gst-plugins-bad/gst/mxf/mxfdemux.h -index d079a1de1a..1dc8a4edb5 100644 ---- a/subprojects/gst-plugins-bad/gst/mxf/mxfdemux.h -+++ b/subprojects/gst-plugins-bad/gst/mxf/mxfdemux.h -@@ -266,7 +266,7 @@ struct _GstMXFDemux - GList *partitions; - GstMXFDemuxPartition *current_partition; - -- GArray *essence_tracks; -+ GPtrArray *essence_tracks; - - GList *pending_index_table_segments; - GList *index_tables; /* one per BodySID / IndexSID */ --- -2.43.0 - diff --git a/0002-codecparsers-av1-Clip-max-tile-rows-and-cols-values.patch b/0002-codecparsers-av1-Clip-max-tile-rows-and-cols-values.patch deleted file mode 100644 index bfd8e34..0000000 --- a/0002-codecparsers-av1-Clip-max-tile-rows-and-cols-values.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 73f1409447033b8e3291a51893d5a027e2be15fc Mon Sep 17 00:00:00 2001 -From: Benjamin Gaignard -Date: Tue, 21 Nov 2023 14:26:54 +0100 -Subject: [PATCH 2/2] codecparsers: av1: Clip max tile rows and cols values - -Clip tile rows and cols to 64 as describe in AV1 specification -to avoid writing outside array range but preserve sb_cols -and sb_rows value which are used to futher computation. - -Fixes ZDI-CAN-22226 / CVE-2023-44429 - -Part-of: ---- - .../gst-libs/gst/codecparsers/gstav1parser.c | 14 ++++++++++---- - 1 file changed, 10 insertions(+), 4 deletions(-) - -diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.c b/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.c -index 22ffefd168..7ef583c7f5 100644 ---- a/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.c -+++ b/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.c -@@ -2243,7 +2243,9 @@ gst_av1_parse_tile_info (GstAV1Parser * parser, GstBitReader * br, - tile_width_sb = (sb_cols + (1 << parser->state.tile_cols_log2) - - 1) >> parser->state.tile_cols_log2; - i = 0; -- for (start_sb = 0; start_sb < sb_cols; start_sb += tile_width_sb) { -+ /* Fill mi_col_starts[] and make sure to not exceed array range */ -+ for (start_sb = 0; start_sb < sb_cols && i < GST_AV1_MAX_TILE_COLS; -+ start_sb += tile_width_sb) { - parser->state.mi_col_starts[i] = start_sb << sb_shift; - i += 1; - } -@@ -2272,7 +2274,9 @@ gst_av1_parse_tile_info (GstAV1Parser * parser, GstBitReader * br, - tile_height_sb = (sb_rows + (1 << parser->state.tile_rows_log2) - - 1) >> parser->state.tile_rows_log2; - i = 0; -- for (start_sb = 0; start_sb < sb_rows; start_sb += tile_height_sb) { -+ /* Fill mi_row_starts[] and make sure to not exceed array range */ -+ for (start_sb = 0; start_sb < sb_rows && i < GST_AV1_MAX_TILE_ROWS; -+ start_sb += tile_height_sb) { - parser->state.mi_row_starts[i] = start_sb << sb_shift; - i += 1; - } -@@ -2287,7 +2291,8 @@ gst_av1_parse_tile_info (GstAV1Parser * parser, GstBitReader * br, - } else { - widest_tile_sb = 0; - start_sb = 0; -- for (i = 0; start_sb < sb_cols; i++) { -+ /* Fill mi_col_starts[] and make sure to not exceed array range */ -+ for (i = 0; start_sb < sb_cols && i < GST_AV1_MAX_TILE_COLS; i++) { - parser->state.mi_col_starts[i] = start_sb << sb_shift; - max_width = MIN (sb_cols - start_sb, max_tile_width_sb); - tile_info->width_in_sbs_minus_1[i] = -@@ -2312,7 +2317,8 @@ gst_av1_parse_tile_info (GstAV1Parser * parser, GstBitReader * br, - max_tile_height_sb = MAX (max_tile_area_sb / widest_tile_sb, 1); - - start_sb = 0; -- for (i = 0; start_sb < sb_rows; i++) { -+ /* Fill mi_row_starts[] and make sure to not exceed array range */ -+ for (i = 0; start_sb < sb_rows && i < GST_AV1_MAX_TILE_ROWS; i++) { - parser->state.mi_row_starts[i] = start_sb << sb_shift; - max_height = MIN (sb_rows - start_sb, max_tile_height_sb); - tile_info->height_in_sbs_minus_1[i] = --- -2.43.0 - diff --git a/0002-mxfdemux-Check-number-of-channels-for-AES3-audio.patch b/0002-mxfdemux-Check-number-of-channels-for-AES3-audio.patch deleted file mode 100644 index 3c55bb3..0000000 --- a/0002-mxfdemux-Check-number-of-channels-for-AES3-audio.patch +++ /dev/null @@ -1,45 +0,0 @@ -From cfccf4b36197359271c95f20bfcda854f6c812cc Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= -Date: Thu, 10 Aug 2023 15:47:03 +0300 -Subject: [PATCH 2/4] mxfdemux: Check number of channels for AES3 audio - -Only up to 8 channels are allowed and using a higher number would cause -integer overflows when copying the data, and lead to out of bound -writes. - -Also check that each buffer is at least 4 bytes long to avoid another -overflow. - -Fixes ZDI-CAN-21661, CVE-2023-40475 - -Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2897 - -Part-of: ---- - subprojects/gst-plugins-bad/gst/mxf/mxfd10.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/subprojects/gst-plugins-bad/gst/mxf/mxfd10.c b/subprojects/gst-plugins-bad/gst/mxf/mxfd10.c -index 66c071372a..060d5a02de 100644 ---- a/subprojects/gst-plugins-bad/gst/mxf/mxfd10.c -+++ b/subprojects/gst-plugins-bad/gst/mxf/mxfd10.c -@@ -119,7 +119,7 @@ mxf_d10_sound_handle_essence_element (const MXFUL * key, GstBuffer * buffer, - gst_buffer_map (buffer, &map, GST_MAP_READ); - - /* Now transform raw AES3 into raw audio, see SMPTE 331M */ -- if ((map.size - 4) % 32 != 0) { -+ if (map.size < 4 || (map.size - 4) % 32 != 0) { - gst_buffer_unmap (buffer, &map); - GST_ERROR ("Invalid D10 sound essence buffer size"); - return GST_FLOW_ERROR; -@@ -219,6 +219,7 @@ mxf_d10_create_caps (MXFMetadataTimelineTrack * track, GstTagList ** tags, - GstAudioFormat audio_format; - - if (s->channel_count == 0 || -+ s->channel_count > 8 || - s->quantization_bits == 0 || - s->audio_sampling_rate.n == 0 || s->audio_sampling_rate.d == 0) { - GST_ERROR ("Invalid descriptor"); --- -2.43.0 - diff --git a/0003-av1parser-Fix-array-sizes-in-scalability-structure.patch b/0003-av1parser-Fix-array-sizes-in-scalability-structure.patch deleted file mode 100644 index 7bc4204..0000000 --- a/0003-av1parser-Fix-array-sizes-in-scalability-structure.patch +++ /dev/null @@ -1,66 +0,0 @@ -From 0ded5a6d028ad40604093690c44eb022ef793531 Mon Sep 17 00:00:00 2001 -From: Seungha Yang -Date: Thu, 23 Nov 2023 20:24:42 +0900 -Subject: [PATCH 3/4] av1parser: Fix array sizes in scalability structure - -Since the AV1 specification is not explicitly mentioning about -the array size bounds, array sizes in scalability structure -should be defined as possible maximum sizes that can have. - -Also, this commit removes GST_AV1_MAX_SPATIAL_LAYERS define from -public header which is API break but the define is misleading -and this patch is introducing ABI break already - -ZDI-CAN-22300 - -Part-of: ---- - .../gst-libs/gst/codecparsers/gstav1parser.h | 11 +++++------ - .../gst-plugins-bad/gst/videoparsers/gstav1parse.c | 2 +- - 2 files changed, 6 insertions(+), 7 deletions(-) - -diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h b/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h -index a5f1c761f6..7d2ec69fb5 100644 ---- a/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h -+++ b/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h -@@ -71,9 +71,8 @@ G_BEGIN_DECLS - #define GST_AV1_MAX_TILE_COUNT 512 - #define GST_AV1_MAX_OPERATING_POINTS \ - (GST_AV1_MAX_NUM_TEMPORAL_LAYERS * GST_AV1_MAX_NUM_SPATIAL_LAYERS) --#define GST_AV1_MAX_SPATIAL_LAYERS 2 /* correct? */ --#define GST_AV1_MAX_TEMPORAL_GROUP_SIZE 8 /* correct? */ --#define GST_AV1_MAX_TEMPORAL_GROUP_REFERENCES 8 /* correct? */ -+#define GST_AV1_MAX_TEMPORAL_GROUP_SIZE 255 -+#define GST_AV1_MAX_TEMPORAL_GROUP_REFERENCES 7 - #define GST_AV1_MAX_NUM_Y_POINTS 16 - #define GST_AV1_MAX_NUM_CB_POINTS 16 - #define GST_AV1_MAX_NUM_CR_POINTS 16 -@@ -968,9 +967,9 @@ struct _GstAV1MetadataScalability { - gboolean spatial_layer_dimensions_present_flag; - gboolean spatial_layer_description_present_flag; - gboolean temporal_group_description_present_flag; -- guint16 spatial_layer_max_width[GST_AV1_MAX_SPATIAL_LAYERS]; -- guint16 spatial_layer_max_height[GST_AV1_MAX_SPATIAL_LAYERS]; -- guint8 spatial_layer_ref_id[GST_AV1_MAX_SPATIAL_LAYERS]; -+ guint16 spatial_layer_max_width[GST_AV1_MAX_NUM_SPATIAL_LAYERS]; -+ guint16 spatial_layer_max_height[GST_AV1_MAX_NUM_SPATIAL_LAYERS]; -+ guint8 spatial_layer_ref_id[GST_AV1_MAX_NUM_SPATIAL_LAYERS]; - guint8 temporal_group_size; - - guint8 temporal_group_temporal_id[GST_AV1_MAX_TEMPORAL_GROUP_SIZE]; -diff --git a/subprojects/gst-plugins-bad/gst/videoparsers/gstav1parse.c b/subprojects/gst-plugins-bad/gst/videoparsers/gstav1parse.c -index 923bc5d70a..9eaa1f47d9 100644 ---- a/subprojects/gst-plugins-bad/gst/videoparsers/gstav1parse.c -+++ b/subprojects/gst-plugins-bad/gst/videoparsers/gstav1parse.c -@@ -1271,7 +1271,7 @@ gst_av1_parse_handle_sequence_obu (GstAV1Parse * self, GstAV1OBU * obu) - } - - val = (self->parser->state.operating_point_idc >> 8) & 0x0f; -- for (i = 0; i < (1 << GST_AV1_MAX_SPATIAL_LAYERS); i++) { -+ for (i = 0; i < GST_AV1_MAX_NUM_SPATIAL_LAYERS; i++) { - if (val & (1 << i)) - self->highest_spatial_id = i; - } --- -2.43.0 - diff --git a/0004-h265parser-Fix-possible-overflow-using-max_sub_layer.patch b/0004-h265parser-Fix-possible-overflow-using-max_sub_layer.patch deleted file mode 100644 index fa91de3..0000000 --- a/0004-h265parser-Fix-possible-overflow-using-max_sub_layer.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 6780451f22c87e926ebf60fe55e1a9e10517f6d1 Mon Sep 17 00:00:00 2001 -From: Nicolas Dufresne -Date: Wed, 9 Aug 2023 12:49:19 -0400 -Subject: [PATCH 4/4] h265parser: Fix possible overflow using - max_sub_layers_minus1 - -This fixes a possible overflow that can be triggered by an invalid value of -max_sub_layers_minus1 being set in the bitstream. The bitstream uses 3 bits, -but the allowed range is 0 to 6 only. - -Fixes ZDI-CAN-21768, CVE-2023-40476 - -Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2895 - -Part-of: ---- - .../gst-plugins-bad/gst-libs/gst/codecparsers/gsth265parser.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gsth265parser.c b/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gsth265parser.c -index fe775a86cd..44b723737a 100644 ---- a/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gsth265parser.c -+++ b/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gsth265parser.c -@@ -1845,6 +1845,7 @@ gst_h265_parse_vps (GstH265NalUnit * nalu, GstH265VPS * vps) - - READ_UINT8 (&nr, vps->max_layers_minus1, 6); - READ_UINT8 (&nr, vps->max_sub_layers_minus1, 3); -+ CHECK_ALLOWED (vps->max_sub_layers_minus1, 0, 6); - READ_UINT8 (&nr, vps->temporal_id_nesting_flag, 1); - - /* skip reserved_0xffff_16bits */ -@@ -2015,6 +2016,7 @@ gst_h265_parse_sps (GstH265Parser * parser, GstH265NalUnit * nalu, - READ_UINT8 (&nr, sps->vps_id, 4); - - READ_UINT8 (&nr, sps->max_sub_layers_minus1, 3); -+ CHECK_ALLOWED (sps->max_sub_layers_minus1, 0, 6); - READ_UINT8 (&nr, sps->temporal_id_nesting_flag, 1); - - if (!gst_h265_parse_profile_tier_level (&sps->profile_tier_level, &nr, --- -2.43.0 - diff --git a/gstreamer1-plugins-bad-free.spec b/gstreamer1-plugins-bad-free.spec index 4bc0a9c..9b2eb5b 100644 --- a/gstreamer1-plugins-bad-free.spec +++ b/gstreamer1-plugins-bad-free.spec @@ -2,42 +2,37 @@ %global _gobject_introspection 1.31.1 # Only have extras package on fedora -%if 0%{?fedora} -%bcond_without extras -%else -%bcond_with extras -%endif +%bcond extras %{defined fedora} +%bcond opencv %[ 0%{?fedora} >= 39 ] +%bcond openh264 %[ 0%{?fedora} >= 40 ] #global gitrel 140 #global gitcommit 4ca3a22b6b33ad8be4383063e76f79c4d346535d #global shortcommit %(c=%{gitcommit}; echo ${c:0:5}) Name: gstreamer1-plugins-bad-free -Version: 1.22.1 -Release: 4%{?gitcommit:.git%{shortcommit}}%{?dist} +Version: 1.22.12 +Release: 1%{?dist} Summary: GStreamer streaming media framework "bad" plugins License: LGPLv2+ and LGPLv2 URL: http://gstreamer.freedesktop.org/ %if 0%{?gitrel} -# git clone git://anongit.freedesktop.org/gstreamer/gst-plugins-good -# cd gst-plugins-good; git reset --hard %{gitcommit}; ./autogen.sh; make; make distcheck +# git clone git://anongit.freedesktop.org/gstreamer/gst-plugins-bad +# cd gst-plugins-bad; git reset --hard %{gitcommit}; ./autogen.sh; make; make distcheck # modified with gst-p-bad-cleanup.sh from SOURCE1 %else # The source is: -# http://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-%{version}.tar.xz +# https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-%{version}.tar.xz # modified with gst-p-bad-cleanup.sh from SOURCE1 %endif Source0: gst-plugins-bad-free-%{version}.tar.xz Source1: gst-p-bad-cleanup.sh -Patch0: 0001-mxfdemux-Store-GstMXFDemuxEssenceTrack-in-their-own-.patch -Patch1: 0002-codecparsers-av1-Clip-max-tile-rows-and-cols-values.patch -Patch2: 0001-mxfdemux-Fix-integer-overflow-causing-out-of-bounds-.patch -Patch3: 0002-mxfdemux-Check-number-of-channels-for-AES3-audio.patch -Patch4: 0003-av1parser-Fix-array-sizes-in-scalability-structure.patch -Patch5: 0004-h265parser-Fix-possible-overflow-using-max_sub_layer.patch - +# https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5622 +Patch: openh264-add-license-file.patch +# https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5780 +Patch: openh264-drop-runtime-version-checks.patch BuildRequires: meson >= 0.48.0 BuildRequires: gcc-c++ @@ -83,13 +78,14 @@ BuildRequires: libwebp-devel BuildRequires: mesa-libEGL-devel BuildRequires: vulkan-devel #BuildRequires: mesa-vulkan-devel -BuildRequires: webrtc-audio-processing-devel +BuildRequires: pkgconfig(webrtc-audio-processing) >= 0.3 %if 0 BuildRequires: wpewebkit-devel BuildRequires: wpebackend-fdo-devel %endif BuildRequires: glslc BuildRequires: libdrm-devel +BuildRequires: libva-devel %if %{with extras} BuildRequires: ladspa-devel @@ -114,15 +110,18 @@ BuildRequires: libxml2-devel BuildRequires: game-music-emu-devel BuildRequires: libkate-devel BuildRequires: libmodplug-devel +BuildRequires: libmpcdec-devel ## Plugins not ported #BuildRequires: libmusicbrainz-devel #BuildRequires: libtimidity-devel -BuildRequires: libva-devel BuildRequires: openal-soft-devel -## If enabled, adds ~90 additional deps; perhaps can be moved to a -## subpackage? -#BuildRequires: opencv-devel +%if %{with opencv} +BuildRequires: opencv-devel +%endif BuildRequires: openjpeg2-devel +%if %{with openh264} +BuildRequires: pkgconfig(openh264) +%endif BuildRequires: pkgconfig(spandsp) >= 0.0.6 ## Plugins not ported #BuildRequires: SDL-devel @@ -137,12 +136,20 @@ BuildRequires: pkgconfig(ldacBT-enc) %endif BuildRequires: qrencode-devel BuildRequires: json-glib-devel +BuildRequires: vo-amrwbenc-devel +BuildRequires: libavtp-devel +BuildRequires: libdca-devel +BuildRequires: flite-devel %endif +Requires: %{name}-libs%{?_isa} = %{version}-%{release} + %if 0%{?fedora} >= 31 || 0%{?rhel} >= 9 # libgstfdkaac.so used to be shipped in -nonfree Obsoletes: gstreamer1-plugins-bad-nonfree < 1.16.1-2 %endif +# dtsdec, dvbsuboverlay, siren used to be shipped in -freeworld +Conflicts: gstreamer1-plugins-bad-freeworld < 1.22.7-2 # Drop after f36 Provides: gst-transcoder = 1.16.0-4 @@ -219,6 +226,49 @@ plugin which allows playback of midi files. %endif +%if %{with opencv} +%package opencv +Summary: GStreamer "bad" plugins OpenCV plugins +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: opencv-data + +%description opencv +GStreamer is a streaming media framework, based on graphs of elements which +operate on media data. + +gstreamer-plugins-bad contains plug-ins that aren't tested well enough, +or the code is not of good enough quality. + +This package (%{name}-opencv) contains the OpenCV plugins. +%endif + + +%if %{with openh264} +%package -n gstreamer1-plugin-openh264 +Summary: GStreamer OpenH264 plugin +License: LGPL-2.0-or-later AND BSD-2-Clause +# Prefer actual openh264 library over the noopenh264 stub +Suggests: openh264%{_isa} + +%description -n gstreamer1-plugin-openh264 +GStreamer is a streaming media framework, based on graphs of elements which +operate on media data. + +This package contains the OpenH264 plugin. +%endif + + +%package libs +Summary: Runtime libraries for the GStreamer media framework "bad" plug-ins + +%description libs +GStreamer is a streaming media framework, based on graphs of elements which +operate on media data. + +This package contains the runtime libraries for plugins that +aren't tested well enough, or the code is not of good enough quality. + + %package devel Summary: Development files for the GStreamer media framework "bad" plug-ins Requires: %{name}%{?_isa} = %{version}-%{release} @@ -238,13 +288,7 @@ aren't tested well enough, or the code is not of good enough quality. %prep -%setup -q -n gst-plugins-bad-%{version} -%patch0 -p3 -%patch1 -p3 -%patch2 -p3 -%patch3 -p3 -%patch4 -p3 -%patch5 -p3 +%autosetup -n gst-plugins-bad-%{version} -p3 %build %meson \ @@ -260,25 +304,31 @@ aren't tested well enough, or the code is not of good enough quality. %{!?with_extras:-D ttml=disabled -D kate=disabled } \ %{!?with_extras:-D modplug=disabled } \ %{!?with_extras:-D openal=disabled } \ - %{!?with_extras:-D opencv=disabled -D openjpeg=disabled } \ + %{!?with_opencv:-D opencv=disabled } \ + %{!?with_openh264:-D openh264=disabled } \ + %{!?with_extras:-D openjpeg=disabled } \ %{!?with_extras:-D wildmidi=disabled -D zbar=disabled } \ %{!?with_extras:-D gme=disabled -D lv2=disabled } \ %{!?with_extras:-D webrtc=disabled -D aom=disabled } \ %{!?with_extras:-D teletext=disabled -D srt=disabled } \ %{!?with_extras:-D openmpt=disabled -D microdns=disabled } \ %{!?with_extras:-D ladspa=disabled } \ + %{!?with_extras:-D avtp=disabled -D dts=disabled } \ + %{!?with_extras:-D flite=disabled } \ -D doc=disabled -D magicleap=disabled -D msdk=disabled \ - -D dts=disabled -D faac=disabled -D faad=disabled \ + -D faac=disabled -D faad=disabled \ -D mpeg2enc=disabled -D mplex=disabled \ -D neon=disabled -D rtmp=disabled \ - -D flite=disabled -D sbc=disabled -D opencv=disabled \ - %{!?with_extras:-D spandsp=disabled -D va=disabled } \ - -D voamrwbenc=disabled -D x265=disabled \ - -D dvbsuboverlay=disabled -D dvdspu=disabled -D siren=disabled \ + -D sbc=disabled \ + %{!?with_extras:-D spandsp=disabled } \ + %{!?with_extras:-D voamrwbenc=disabled } \ + -D x265=disabled \ + -D dvdspu=disabled \ -D opensles=disabled -D tinyalsa=disabled \ - -D wasapi=disabled -D wasapi2=disabled -D avtp=disabled \ + -D wasapi=disabled -D wasapi2=disabled \ -D dc1394=disabled -D directfb=disabled -D iqa=disabled \ - -D libde265=disabled -D musepack=disabled -D openni2=disabled \ + -D libde265=disabled -D openni2=disabled \ + %{!?with_extras:-D musepack=disabled } \ -D svthevcenc=disabled -D voaacenc=disabled \ -D zxing=disabled -D wpe=disabled -D x11=disabled \ %ifarch s390x @@ -287,7 +337,7 @@ aren't tested well enough, or the code is not of good enough quality. %{!?with_extras:-D ldac=disabled } \ %endif %{!?with_extras:-D qroverlay=disabled } \ - -D openh264=disabled -D gs=disabled -D isac=disabled \ + -D gs=disabled -D isac=disabled \ -D onnx=disabled -D openaptx=disabled -Dgpl=enabled \ -D amfcodec=disabled -D directshow=disabled -D qsv=disabled @@ -296,6 +346,12 @@ aren't tested well enough, or the code is not of good enough quality. %install %meson_install +%if %{with opencv} +# no pkgconfig file or GIR, nothing aside from the plugin uses the library +rm -f $RPM_BUILD_ROOT%{_includedir}/gstreamer-%{majorminor}/gst/opencv/* +rm -f $RPM_BUILD_ROOT%{_libdir}/libgstopencv-%{majorminor}.so +%endif + # Register as an AppStream component to be visible in the software center # # NOTE: It would be *awesome* if this file was maintained by the upstream @@ -346,6 +402,39 @@ cat > $RPM_BUILD_ROOT%{_metainfodir}/gstreamer-bad-free.appdata.xml < EOF +%if %{with openh264} +cat > $RPM_BUILD_ROOT%{_metainfodir}/gstreamer-openh264.appdata.xml < + + + gstreamer-openh264 + CC0-1.0 + GStreamer Multimedia Codecs - H.264 + Multimedia playback for H.264 + +

+ This addon includes a codec for H.264 playback and encoding. +

+

+ These codecs can be used to encode and decode media files where the + format is not patent encumbered. +

+

+ A codec decodes audio and video for playback or editing and is also + used for transmission or storage. + Different codecs are used in video-conferencing, streaming media and + video editing applications. +

+
+ http://gstreamer.freedesktop.org/ + https://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer + http://gstreamer.freedesktop.org/documentation/ + http://www.gnome.org/friends/ + +
+EOF +%endif + %find_lang gst-plugins-bad-%{majorminor} # unpackaged files @@ -357,7 +446,7 @@ rm $RPM_BUILD_ROOT%{_bindir}/playout %license COPYING %doc AUTHORS NEWS README.md README.static-linking RELEASE REQUIREMENTS -%{_metainfodir}/*.appdata.xml +%{_metainfodir}/gstreamer-bad-free.appdata.xml %{_bindir}/gst-transcoder-%{majorminor} # presets @@ -375,53 +464,6 @@ rm $RPM_BUILD_ROOT%{_bindir}/playout %{_datadir}/gstreamer-%{majorminor}/encoding-profiles/file-extension/webm.gep %{_datadir}/gstreamer-%{majorminor}/encoding-profiles/online-services/youtube.gep -# opencv data -#{_datadir}/gst-plugins-bad/%{majorminor}/opencv_haarcascades/ - -%{_libdir}/libgstadaptivedemux-%{majorminor}.so.* -%{_libdir}/libgstbasecamerabinsrc-%{majorminor}.so.* -%{_libdir}/libgstbadaudio-%{majorminor}.so.* -%{_libdir}/libgstcodecparsers-%{majorminor}.so.* -%{_libdir}/libgstcodecs-%{majorminor}.so.* -%{_libdir}/libgstcuda-%{majorminor}.so.* -%{_libdir}/libgstinsertbin-%{majorminor}.so.* -%{_libdir}/libgstisoff-%{majorminor}.so.* -%{_libdir}/libgstmpegts-%{majorminor}.so.* -#{_libdir}/libgstopencv-%{majorminor}.so.* -%{_libdir}/libgstplay-%{majorminor}.so.* -%{_libdir}/libgstplayer-%{majorminor}.so.* -%{_libdir}/libgstphotography-%{majorminor}.so.* -%{_libdir}/libgstsctp-%{majorminor}.so.* -%{_libdir}/libgsttranscoder-%{majorminor}.so.* -%{_libdir}/libgsturidownloader-%{majorminor}.so.* -%{_libdir}/libgstvulkan-%{majorminor}.so.* -%if %{with extras} -%{_libdir}/libgstva-%{majorminor}.so.* -%endif -%{_libdir}/libgstwebrtc-%{majorminor}.so.* -%if %{with extras} -%{_libdir}/libgstwebrtcnice-%{majorminor}.so.* -%endif -%if 0%{?fedora} || 0%{?rhel} > 7 -%{_libdir}/libgstwayland-%{majorminor}.so.* -%endif - -%{_libdir}/girepository-1.0/CudaGst-1.0.typelib -%{_libdir}/girepository-1.0/GstBadAudio-1.0.typelib -%{_libdir}/girepository-1.0/GstCodecs-1.0.typelib -%{_libdir}/girepository-1.0/GstCuda-1.0.typelib -%{_libdir}/girepository-1.0/GstInsertBin-1.0.typelib -%{_libdir}/girepository-1.0/GstMpegts-1.0.typelib -%{_libdir}/girepository-1.0/GstPlay-1.0.typelib -%{_libdir}/girepository-1.0/GstPlayer-1.0.typelib -%{_libdir}/girepository-1.0/GstTranscoder-1.0.typelib -%if %{with extras} -%{_libdir}/girepository-1.0/GstVa-1.0.typelib -%endif -%{_libdir}/girepository-1.0/GstVulkan-1.0.typelib -%{_libdir}/girepository-1.0/GstVulkanWayland-1.0.typelib -%{_libdir}/girepository-1.0/GstWebRTC-1.0.typelib - # Plugins without external dependencies %{_libdir}/gstreamer-%{majorminor}/libgstaccurip.so %{_libdir}/gstreamer-%{majorminor}/libgstadpcmdec.so @@ -441,14 +483,11 @@ rm $RPM_BUILD_ROOT%{_bindir}/playout %{_libdir}/gstreamer-%{majorminor}/libgstcoloreffects.so %{_libdir}/gstreamer-%{majorminor}/libgstdash.so %{_libdir}/gstreamer-%{majorminor}/libgstdvbsubenc.so +%{_libdir}/gstreamer-%{majorminor}/libgstdvbsuboverlay.so %{_libdir}/gstreamer-%{majorminor}/libgstfaceoverlay.so %if %{with extras} %{_libdir}/gstreamer-%{majorminor}/libgstfbdevsink.so %endif - -%if 0%{?fedora} >= 31 || 0%{?rhel} >= 9 -%{_libdir}/gstreamer-%{majorminor}/libgstfdkaac.so -%endif %{_libdir}/gstreamer-%{majorminor}/libgstfestival.so %{_libdir}/gstreamer-%{majorminor}/libgstfieldanalysis.so %{_libdir}/gstreamer-%{majorminor}/libgstfreeverb.so @@ -485,6 +524,7 @@ rm $RPM_BUILD_ROOT%{_bindir}/playout %{_libdir}/gstreamer-%{majorminor}/libgstsdpelem.so %{_libdir}/gstreamer-%{majorminor}/libgstsegmentclip.so %{_libdir}/gstreamer-%{majorminor}/libgstshm.so +%{_libdir}/gstreamer-%{majorminor}/libgstsiren.so %{_libdir}/gstreamer-%{majorminor}/libgstsmooth.so %{_libdir}/gstreamer-%{majorminor}/libgstsmoothstreaming.so %{_libdir}/gstreamer-%{majorminor}/libgstspeed.so @@ -512,6 +552,9 @@ rm $RPM_BUILD_ROOT%{_bindir}/playout %{_libdir}/gstreamer-%{majorminor}/libgstclosedcaption.so %{_libdir}/gstreamer-%{majorminor}/libgstcolormanagement.so %{_libdir}/gstreamer-%{majorminor}/libgstdtls.so +%if 0%{?fedora} >= 31 || 0%{?rhel} >= 9 +%{_libdir}/gstreamer-%{majorminor}/libgstfdkaac.so +%endif %{_libdir}/gstreamer-%{majorminor}/libgsthls.so %{_libdir}/gstreamer-%{majorminor}/libgstgsm.so %{_libdir}/gstreamer-%{majorminor}/libgstgtkwayland.so @@ -523,6 +566,7 @@ rm $RPM_BUILD_ROOT%{_bindir}/playout %{_libdir}/gstreamer-%{majorminor}/libgstsndfile.so %{_libdir}/gstreamer-%{majorminor}/libgstsoundtouch.so %{_libdir}/gstreamer-%{majorminor}/libgstsrtp.so +%{_libdir}/gstreamer-%{majorminor}/libgstva.so %{_libdir}/gstreamer-%{majorminor}/libgstvulkan.so %if 0%{?fedora} || 0%{?rhel} > 7 %{_libdir}/gstreamer-%{majorminor}/libgstwaylandsink.so @@ -544,13 +588,19 @@ rm $RPM_BUILD_ROOT%{_bindir}/playout %if %{with extras} %files extras +# presets +%{_datadir}/gstreamer-%{majorminor}/presets/GstVoAmrwbEnc.prs + # Plugins with external dependencies %{_libdir}/gstreamer-%{majorminor}/libgstaom.so %{_libdir}/gstreamer-%{majorminor}/libgstassrender.so +%{_libdir}/gstreamer-%{majorminor}/libgstavtp.so %{_libdir}/gstreamer-%{majorminor}/libgstbs2b.so %{_libdir}/gstreamer-%{majorminor}/libgstchromaprint.so %{_libdir}/gstreamer-%{majorminor}/libgstcurl.so %{_libdir}/gstreamer-%{majorminor}/libgstdecklink.so +%{_libdir}/gstreamer-%{majorminor}/libgstdtsdec.so +%{_libdir}/gstreamer-%{majorminor}/libgstflite.so %{_libdir}/gstreamer-%{majorminor}/libgstgme.so %{_libdir}/gstreamer-%{majorminor}/libgstkate.so %{_libdir}/gstreamer-%{majorminor}/libgstladspa.so @@ -559,8 +609,8 @@ rm $RPM_BUILD_ROOT%{_bindir}/playout %endif %{_libdir}/gstreamer-%{majorminor}/libgstmicrodns.so %{_libdir}/gstreamer-%{majorminor}/libgstmodplug.so +%{_libdir}/gstreamer-%{majorminor}/libgstmusepack.so %{_libdir}/gstreamer-%{majorminor}/libgstopenal.so -#{_libdir}/gstreamer-%{majorminor}/libgstopencv.so %{_libdir}/gstreamer-%{majorminor}/libgstopenexr.so %{_libdir}/gstreamer-%{majorminor}/libgstopenjpeg.so %{_libdir}/gstreamer-%{majorminor}/libgstopenmpt.so @@ -568,7 +618,7 @@ rm $RPM_BUILD_ROOT%{_bindir}/playout %{_libdir}/gstreamer-%{majorminor}/libgstspandsp.so %{_libdir}/gstreamer-%{majorminor}/libgstsrt.so %{_libdir}/gstreamer-%{majorminor}/libgstteletext.so -%{_libdir}/gstreamer-%{majorminor}/libgstva.so +%{_libdir}/gstreamer-%{majorminor}/libgstvoamrwbenc.so %files zbar # Plugins with external dependencies @@ -583,6 +633,62 @@ rm $RPM_BUILD_ROOT%{_bindir}/playout %{_libdir}/gstreamer-%{majorminor}/libgstwildmidi.so %endif +%if %{with opencv} +%files opencv +# Plugins with external dependencies +%{_libdir}/gstreamer-%{majorminor}/libgstopencv.so +%{_libdir}/libgstopencv-%{majorminor}.so.0{,.*} +%endif + +%if %{with openh264} +%files -n gstreamer1-plugin-openh264 +%license COPYING +%license ext/openh264/LICENSE +%{_metainfodir}/gstreamer-openh264.appdata.xml +%{_libdir}/gstreamer-1.0/libgstopenh264.so +%endif + +%files libs +%license COPYING +%{_libdir}/libgstadaptivedemux-%{majorminor}.so.0{,.*} +%{_libdir}/libgstbasecamerabinsrc-%{majorminor}.so.0{,.*} +%{_libdir}/libgstbadaudio-%{majorminor}.so.0{,.*} +%{_libdir}/libgstcodecparsers-%{majorminor}.so.0{,.*} +%{_libdir}/libgstcodecs-%{majorminor}.so.0{,.*} +%{_libdir}/libgstcuda-%{majorminor}.so.0{,.*} +%{_libdir}/libgstinsertbin-%{majorminor}.so.0{,.*} +%{_libdir}/libgstisoff-%{majorminor}.so.0{,.*} +%{_libdir}/libgstmpegts-%{majorminor}.so.0{,.*} +%{_libdir}/libgstplay-%{majorminor}.so.0{,.*} +%{_libdir}/libgstplayer-%{majorminor}.so.0{,.*} +%{_libdir}/libgstphotography-%{majorminor}.so.0{,.*} +%{_libdir}/libgstsctp-%{majorminor}.so.0{,.*} +%{_libdir}/libgsttranscoder-%{majorminor}.so.0{,.*} +%{_libdir}/libgsturidownloader-%{majorminor}.so.0{,.*} +%{_libdir}/libgstvulkan-%{majorminor}.so.0{,.*} +%{_libdir}/libgstva-%{majorminor}.so.0{,.*} +%{_libdir}/libgstwebrtc-%{majorminor}.so.0{,.*} +%if %{with extras} +%{_libdir}/libgstwebrtcnice-%{majorminor}.so.0{,.*} +%endif +%if 0%{?fedora} || 0%{?rhel} > 7 +%{_libdir}/libgstwayland-%{majorminor}.so.0{,.*} +%endif + +%{_libdir}/girepository-1.0/CudaGst-1.0.typelib +%{_libdir}/girepository-1.0/GstBadAudio-1.0.typelib +%{_libdir}/girepository-1.0/GstCodecs-1.0.typelib +%{_libdir}/girepository-1.0/GstCuda-1.0.typelib +%{_libdir}/girepository-1.0/GstInsertBin-1.0.typelib +%{_libdir}/girepository-1.0/GstMpegts-1.0.typelib +%{_libdir}/girepository-1.0/GstPlay-1.0.typelib +%{_libdir}/girepository-1.0/GstPlayer-1.0.typelib +%{_libdir}/girepository-1.0/GstTranscoder-1.0.typelib +%{_libdir}/girepository-1.0/GstVa-1.0.typelib +%{_libdir}/girepository-1.0/GstVulkan-1.0.typelib +%{_libdir}/girepository-1.0/GstVulkanWayland-1.0.typelib +%{_libdir}/girepository-1.0/GstWebRTC-1.0.typelib + %files devel %if 0 %doc %{_datadir}/gtk-doc/html/gst-plugins-bad-plugins-%{majorminor} @@ -598,9 +704,7 @@ rm $RPM_BUILD_ROOT%{_bindir}/playout %{_datadir}/gir-1.0/GstPlay-%{majorminor}.gir %{_datadir}/gir-1.0/GstPlayer-%{majorminor}.gir %{_datadir}/gir-1.0/GstTranscoder-%{majorminor}.gir -%if %{with extras} %{_datadir}/gir-1.0/GstVa-%{majorminor}.gir -%endif %{_datadir}/gir-1.0/GstVulkan-%{majorminor}.gir %{_datadir}/gir-1.0/GstVulkanWayland-%{majorminor}.gir %{_datadir}/gir-1.0/GstWebRTC-%{majorminor}.gir @@ -622,9 +726,7 @@ rm $RPM_BUILD_ROOT%{_bindir}/playout %{_libdir}/libgsttranscoder-%{majorminor}.so %{_libdir}/libgsturidownloader-%{majorminor}.so %{_libdir}/libgstvulkan-%{majorminor}.so -%if %{with extras} %{_libdir}/libgstva-%{majorminor}.so -%endif %{_libdir}/libgstwebrtc-%{majorminor}.so %if %{with extras} %{_libdir}/libgstwebrtcnice-%{majorminor}.so @@ -647,9 +749,7 @@ rm $RPM_BUILD_ROOT%{_bindir}/playout %{_includedir}/gstreamer-%{majorminor}/gst/sctp %{_includedir}/gstreamer-%{majorminor}/gst/transcoder %{_includedir}/gstreamer-%{majorminor}/gst/uridownloader -%if %{with extras} %{_includedir}/gstreamer-%{majorminor}/gst/va/ -%endif %{_includedir}/gstreamer-%{majorminor}/gst/vulkan/ %{_includedir}/gstreamer-%{majorminor}/gst/wayland/ %{_includedir}/gstreamer-%{majorminor}/gst/webrtc/ @@ -666,9 +766,7 @@ rm $RPM_BUILD_ROOT%{_bindir}/playout %{_libdir}/pkgconfig/gstreamer-plugins-bad-%{majorminor}.pc %{_libdir}/pkgconfig/gstreamer-sctp-%{majorminor}.pc %{_libdir}/pkgconfig/gstreamer-transcoder-%{majorminor}.pc -%if %{with extras} %{_libdir}/pkgconfig/gstreamer-va-%{majorminor}.pc -%endif %{_libdir}/pkgconfig/gstreamer-vulkan-%{majorminor}.pc %{_libdir}/pkgconfig/gstreamer-vulkan-wayland-%{majorminor}.pc %{_libdir}/pkgconfig/gstreamer-wayland-%{majorminor}.pc @@ -679,43 +777,163 @@ rm $RPM_BUILD_ROOT%{_bindir}/playout %changelog -* Wed Jan 17 2024 Wim Taymans - 1.22.1-4 -- CVE-2023-40474: Integer overflow leading to heap overwrite in MXF -- CVE-2023-40475: Integer overflow leading to heap overwrite in MXF -- CVE-2023-40476: Integer overflow in H.265 video parser -- ZDI-CAN-22300: buffer overflow vulnerability -- Resolves: RHEL-19501, RHEL-19505, RHEL-19506, RHEL-20201 +* Tue Apr 30 2024 Gwyn Ciesla - 1.22.12-1 +- 1.22.12 -* Thu Jan 11 2024 Wim Taymans - 1.22.1-3 -- Bump version -- Resolves: RHEL-16795, RHEL-16788 +* Thu Apr 18 2024 Gwyn Ciesla - 1.22.11-1 +- 1.22.11 -* Tue Dec 12 2023 Wim Taymans - 1.22.1-2 -- Patch CVE-2023-44429: AV1 codec parser heap-based buffer overflow -- Patch CVE-2023-44446: MXF demuxer use-after-free -- Resolves: RHEL-17030, RHEL-17039 +* Thu Feb 08 2024 Kalev Lember - 1.22.9-3 +- Add gstreamer1-plugin-openh264 subpackage with the openh264 plugin -* Thu Apr 13 2023 Wim Taymans - 1.22.1-1 +* Tue Feb 06 2024 Yaakov Selkowitz - 1.22.9-2 +- Rebuilt for opencv-4.9.0 + +* Thu Jan 25 2024 Gwyn Ciesla - 1.22.9-1 +- 1.22.9 + +* Wed Jan 24 2024 Fedora Release Engineering - 1.22.8-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Sat Jan 20 2024 Fedora Release Engineering - 1.22.8-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Mon Jan 08 2024 Yaakov Selkowitz - 1.22.8-3 +- Backport of "va: fixes for Mesa driver" +- Resolves: rhbz#2256693 + +* Wed Dec 20 2023 Yaakov Selkowitz - 1.22.8-2 +- Enable dvbsuboverlay and siren plugins +- Enable avtp, dtsdec, and flite plugins in extras + +* Mon Dec 18 2023 Gwyn Ciesla - 1.22.8-1 +- 1.22.8 + +* Tue Nov 21 2023 Michael Catanzaro - 1.22.7-2 +- Move gstva from extras into main package + +* Tue Nov 14 2023 Gwyn Ciesla - 1.22.7-1 +- 1.22.7 + +* Fri Sep 22 2023 Yaakov Selkowitz - 1.22.5-2 +- Separate libs subpackage +- Enable opencv as separate subpackage + +* Fri Jul 21 2023 Wim Taymans - 1.22.5-1 +- Update to 1.22.5 + +* Thu Jul 20 2023 Fedora Release Engineering - 1.22.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Thu May 25 2023 Wim Taymans - 1.22.3-1 +- Update to 1.22.3 + +* Sun May 21 2023 Sérgio Basto - 1.22.2-4 +- Remove obsolete of plugins-bad-freeworld to workaround a dnf bug + https://bugzilla.redhat.com/show_bug.cgi?id=1867376#c9 + +* Thu Apr 27 2023 Yaakov Selkowitz - 1.22.2-3 +- Fix migration of musepack and voamrwbenc to -bad-free-extras + +* Mon Apr 24 2023 Yaakov Selkowitz - 1.22.2-2 +- Enable musepack and voamrwbenc in extras + +* Thu Apr 13 2023 Wim Taymans - 1.22.2-1 +- Update to 1.22.2 + +* Mon Mar 13 2023 Wim Taymans - 1.22.1-1 - Update to 1.22.1 -* Mon Nov 07 2022 Tomas Popela - 1.18.4-6 -- Fix FTBFS by BR wayland-protocols-devel -- Resolves: rhbz#2140540 +* Tue Jan 24 2023 Wim Taymans - 1.22.0-1 +- Update to 1.22.0 -* Mon Aug 09 2021 Mohan Boddu -- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags - Related: rhbz#1991688 +* Fri Jan 20 2023 Wim Taymans - 1.21.90-1 +- Update to 1.21.90 -* Wed Jun 16 2021 Mohan Boddu -- Rebuilt for RHEL 9 BETA for openssl 3.0 - Related: rhbz#1971065 +* Thu Jan 19 2023 Fedora Release Engineering - 1.20.5-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild -* Mon Jun 07 2021 Wim Taymans - 1.18.4-3 -- Apply vulkan multilib patch -- Resolves: rhbz#1915341 +* Wed Jan 11 2023 Wim Taymans - 1.20.5-1 +- Update to 1.20.5 +- Remove unwanted crypto dependencies. -* Fri Apr 16 2021 Mohan Boddu -- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 +* Mon Nov 14 2022 Stephen Gallagher - 1.20.4-2 +- Drop vdpau configure option +- The libgstva plugin is now excluded from file listings when disabled +- Resolves: rhbz#2141093 + +* Thu Oct 13 2022 Wim Taymans - 1.20.4-1 +- Update to 1.20.4 + +* Thu Jul 21 2022 Fedora Release Engineering - 1.20.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Mon Jul 18 2022 Wim Taymans - 1.20.3-1 +- Update to 1.20.3 + +* Wed Jun 22 2022 Robert-André Mauchin - 1.20.0-4 +- Rebuilt for new aom + +* Sat Jun 18 2022 Scott Talbert - 1.20.0-3 +- Rebuild for srt-1.5.0 (#2097636, #2098341) + +* Fri May 20 2022 Sandro Mani - 1.20.0-2 +- Rebuild for gdal-3.5.0 and/or openjpeg-2.5.0 + +* Fri Feb 4 2022 Wim Taymans - 1.20.0-1 +- Update to 1.20.0 + +* Thu Feb 03 2022 Scott Talbert - 1.19.3-6 +- Enable rtmp2 plugin (#1915517) + +* Thu Jan 20 2022 Fedora Release Engineering - 1.19.3-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Mon Jan 10 2022 Scott Talbert - 1.19.3-4 +- Fix GstPlayer with GstPlayerVideoOverlayVideoRenderer (#2035937) + +* Mon Jan 10 2022 Scott Talbert - 1.19.3-3 +- Add BR for wayland-protocols-devel to fix another FTBFS + +* Mon Nov 22 2021 Scott Talbert - 1.19.3-2 +- Fix FTBFS with meson 0.60.1 (#2025782) + +* Thu Nov 11 2021 Wim Taymans - 1.19.3-1 +- Update to 1.19.3 +- Remove ofa plugin, is was removed + +* Thu Sep 23 2021 Wim Taymans - 1.19.2-1 +- Update to 1.19.2 + +* Tue Sep 14 2021 Sahana Prasad - 1.19.1-8 +- Rebuilt with OpenSSL 3.0.0 + +* Sat Aug 21 2021 Richard Shaw - 1.19.1-7 +- Rebuild for OpenEXR/Imath 3.1. + +* Tue Aug 10 2021 Richard Shaw - 1.19.1-6 +- Rebuild for OpenEXR 3. + +* Thu Jul 22 2021 Fedora Release Engineering - 1.19.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Mon Jul 19 2021 Wim Taymans - 1.19.1-4 +- Enable sctp plugin + +* Mon Jun 21 2021 Gwyn Ciesla - 1.19.1-3 +- Fluidsynth rebuild. + +* Sun Jun 13 2021 Robert-André Mauchin - 1.19.1-2 +- Rebuilt for aom v3.1.1 + +* Thu Jun 03 2021 Wim Taymans - 1.19.1-1 +- Update to 1.19.1 + +* Wed May 26 2021 Nicolas Chauvet - 1.18.4-3 +- Rebuilt for srt + +* Tue Apr 6 2021 Wim Taymans - 1.18.4-2 +- Add patch to fix multilib issues with vulkan (#1915341) * Tue Mar 16 2021 Wim Taymans - 1.18.4-1 - Update to 1.18.4 diff --git a/openh264-add-license-file.patch b/openh264-add-license-file.patch new file mode 100644 index 0000000..b4c57ee --- /dev/null +++ b/openh264-add-license-file.patch @@ -0,0 +1,45 @@ +From b13e925daa574fb07aac0271f2b51c25ecb9d483 Mon Sep 17 00:00:00 2001 +From: Kalev Lember +Date: Wed, 8 Nov 2023 14:41:14 +0100 +Subject: [PATCH 1/1] openh264: Add LICENSE file + +The openh264 plugin is BSD-licensed, different from the rest of the +gst-plugins-bad. This commit splits the license text out in its own file +to make it easier for binary distributions to distribute the license +text. +--- + .../gst-plugins-bad/ext/openh264/LICENSE | 22 +++++++++++++++++++ + 1 file changed, 22 insertions(+) + create mode 100644 subprojects/gst-plugins-bad/ext/openh264/LICENSE + +diff --git a/subprojects/gst-plugins-bad/ext/openh264/LICENSE b/subprojects/gst-plugins-bad/ext/openh264/LICENSE +new file mode 100644 +index 00000000000..e57601b4fb6 +--- /dev/null ++++ b/subprojects/gst-plugins-bad/ext/openh264/LICENSE +@@ -0,0 +1,22 @@ ++Copyright (c) 2014, Ericsson AB. All rights reserved. ++ ++Redistribution and use in source and binary forms, with or without modification, ++are permitted provided that the following conditions are met: ++ ++1. Redistributions of source code must retain the above copyright notice, this ++list of conditions and the following disclaimer. ++ ++2. Redistributions in binary form must reproduce the above copyright notice, this ++list of conditions and the following disclaimer in the documentation and/or other ++materials provided with the distribution. ++ ++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ++ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ++IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, ++INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT ++NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ++PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, ++WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ++ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY ++OF SUCH DAMAGE. +-- +GitLab + diff --git a/openh264-drop-runtime-version-checks.patch b/openh264-drop-runtime-version-checks.patch new file mode 100644 index 0000000..b77264d --- /dev/null +++ b/openh264-drop-runtime-version-checks.patch @@ -0,0 +1,149 @@ +From 1dadccd48c97a4b7c96ae0307c2263107e7f1876 Mon Sep 17 00:00:00 2001 +From: Kalev Lember +Date: Wed, 6 Dec 2023 14:58:38 +0100 +Subject: [PATCH] openh264: Drop runtime version checks + +With the way the runtime checks are currently set up, every single +openh264 release, no matter how minor, is considered an ABI break and +requires gst-plugins-bad recompilation. This is unnecessarily strict +because it doesn't allow downstream distributions to ship any openh264 +bug fix version updates without breaking gstreamer's openh264 support. + +Years ago, at the time when gstreamer's openh264 support was merged, +openh264 releases were done without a versioned soname (the library was +just libopenh264.so, unversioned). Since then, starting with version +1.3.0, openh264 has started using versioned sonames and the intent has +been to bump the soname every time there's a new release with an ABI +change. + +This patch drops the strict version check. meson.build already has a +minimum requirement on openh264 version 1.3.0 where soname versioning +was added, which should be good enough to ensure that the library is +using soname versioning. + +Part-of: +--- + .../ext/openh264/gstopenh264dec.cpp | 7 +-- + .../ext/openh264/gstopenh264element.c | 48 ------------------- + .../ext/openh264/gstopenh264elements.h | 2 - + .../ext/openh264/gstopenh264enc.cpp | 7 +-- + .../gst-plugins-bad/ext/openh264/meson.build | 1 - + 5 files changed, 4 insertions(+), 61 deletions(-) + delete mode 100644 subprojects/gst-plugins-bad/ext/openh264/gstopenh264element.c + +diff --git a/subprojects/gst-plugins-bad/ext/openh264/gstopenh264dec.cpp b/subprojects/gst-plugins-bad/ext/openh264/gstopenh264dec.cpp +index 77f2b8fe348..f3302567c7b 100644 +--- a/subprojects/gst-plugins-bad/ext/openh264/gstopenh264dec.cpp ++++ b/subprojects/gst-plugins-bad/ext/openh264/gstopenh264dec.cpp +@@ -459,10 +459,7 @@ openh264dec_element_init (GstPlugin * plugin) + { + GST_DEBUG_CATEGORY_INIT (gst_openh264dec_debug_category, "openh264dec", 0, + "debug category for openh264dec element"); +- if (openh264_element_init (plugin)) +- return gst_element_register (plugin, "openh264dec", GST_RANK_MARGINAL, +- GST_TYPE_OPENH264DEC); + +- GST_ERROR ("Incorrect library version loaded, expecting %s", g_strCodecVer); +- return FALSE; ++ return gst_element_register (plugin, "openh264dec", GST_RANK_MARGINAL, ++ GST_TYPE_OPENH264DEC); + } +diff --git a/subprojects/gst-plugins-bad/ext/openh264/gstopenh264element.c b/subprojects/gst-plugins-bad/ext/openh264/gstopenh264element.c +deleted file mode 100644 +index 3c5c378c81e..00000000000 +--- a/subprojects/gst-plugins-bad/ext/openh264/gstopenh264element.c ++++ /dev/null +@@ -1,48 +0,0 @@ +-/* +- * Copyright (c) 2014, Ericsson AB. All rights reserved. +- * +- * Redistribution and use in source and binary forms, with or without modification, +- * are permitted provided that the following conditions are met: +- * +- * 1. Redistributions of source code must retain the above copyright notice, this +- * list of conditions and the following disclaimer. +- * +- * 2. Redistributions in binary form must reproduce the above copyright notice, this +- * list of conditions and the following disclaimer in the documentation and/or other +- * materials provided with the distribution. +- * +- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +- * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +- * OF SUCH DAMAGE. +- */ +- +-#ifdef HAVE_CONFIG_H +-#include +-#endif +- +-#include +-#include +-#include +-#include +-#include "gstopenh264elements.h" +- +- +-gboolean +-openh264_element_init (GstPlugin * plugin) +-{ +- OpenH264Version libver; +- /* g_stCodecVersion is the version detected at build time as defined in the +- * headers and WelsGetCodecVersion() is the version detected at runtime. +- * This is a safeguard to avoid crashes since OpenH264 has been changing +- * ABI without changing the SONAME. +- */ +- libver = WelsGetCodecVersion (); +- return (memcmp (&libver, &g_stCodecVersion, sizeof (libver)) == 0); +-} +diff --git a/subprojects/gst-plugins-bad/ext/openh264/gstopenh264elements.h b/subprojects/gst-plugins-bad/ext/openh264/gstopenh264elements.h +index 572f6a8e078..5c9582941ee 100644 +--- a/subprojects/gst-plugins-bad/ext/openh264/gstopenh264elements.h ++++ b/subprojects/gst-plugins-bad/ext/openh264/gstopenh264elements.h +@@ -27,8 +27,6 @@ + + G_BEGIN_DECLS + +-gboolean openh264_element_init (GstPlugin * plugin); +- + GST_ELEMENT_REGISTER_DECLARE (openh264dec); + GST_ELEMENT_REGISTER_DECLARE (openh264enc); + +diff --git a/subprojects/gst-plugins-bad/ext/openh264/gstopenh264enc.cpp b/subprojects/gst-plugins-bad/ext/openh264/gstopenh264enc.cpp +index 6b54b1584f8..05c126cfc64 100644 +--- a/subprojects/gst-plugins-bad/ext/openh264/gstopenh264enc.cpp ++++ b/subprojects/gst-plugins-bad/ext/openh264/gstopenh264enc.cpp +@@ -1066,10 +1066,7 @@ openh264enc_element_init (GstPlugin * plugin) + { + GST_DEBUG_CATEGORY_INIT (gst_openh264enc_debug_category, "openh264enc", 0, + "debug category for openh264enc element"); +- if (openh264_element_init (plugin)) +- return gst_element_register (plugin, "openh264enc", GST_RANK_MARGINAL, +- GST_TYPE_OPENH264ENC); + +- GST_ERROR ("Incorrect library version loaded, expecting %s", g_strCodecVer); +- return FALSE; ++ return gst_element_register (plugin, "openh264enc", GST_RANK_MARGINAL, ++ GST_TYPE_OPENH264ENC); + } +diff --git a/subprojects/gst-plugins-bad/ext/openh264/meson.build b/subprojects/gst-plugins-bad/ext/openh264/meson.build +index 1f0a198b05e..c6f247e1cdd 100644 +--- a/subprojects/gst-plugins-bad/ext/openh264/meson.build ++++ b/subprojects/gst-plugins-bad/ext/openh264/meson.build +@@ -1,7 +1,6 @@ + openh264_sources = [ + 'gstopenh264dec.cpp', + 'gstopenh264enc.cpp', +- 'gstopenh264element.c', + 'gstopenh264plugin.c', + ] + +-- +GitLab + diff --git a/sources b/sources index dd765ae..ab8013c 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (gst-plugins-bad-free-1.22.1.tar.xz) = c3d120d5e4b98d806e97e3d42270d8848c1de4d5209e2bf33fa44557c937b34418a7baedae2d160ce2be3a8657570229a65df3d4901257cb33c9f2e1b5f1b59b +SHA512 (gst-plugins-bad-free-1.22.12.tar.xz) = 791a35edcfbf3ac6e4442ff0cf43f41edd547ebeeafa33771c365345dd04319453bea7a0a3d706a665e7e5c579d45072b182cfecae5595c25064653745e96972