Compare commits
No commits in common. "c8" and "c9-beta" have entirely different histories.
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1 @@
|
|||||||
SOURCES/gst-plugins-bad-free-1.16.1.tar.xz
|
SOURCES/gst-plugins-bad-free-1.22.12.tar.xz
|
||||||
|
@ -1 +1 @@
|
|||||||
318b749af5a289650e380cbabc0293e422b9a3ba SOURCES/gst-plugins-bad-free-1.16.1.tar.xz
|
820fec0ec0790525d888c785a761afe9a10d6f99 SOURCES/gst-plugins-bad-free-1.22.12.tar.xz
|
||||||
|
@ -1,97 +0,0 @@
|
|||||||
From fba19d6c4975c1628ce47473a72b95e4e17992b4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Wim Taymans <wtaymans@redhat.com>
|
|
||||||
Date: Mon, 26 May 2025 15:42:55 +0200
|
|
||||||
Subject: [PATCH] h265parser: Fix max_dec_pic_buffering_minus1 bound check
|
|
||||||
|
|
||||||
Allowed max value is MaxDpbSize - 1
|
|
||||||
---
|
|
||||||
gst-libs/gst/codecparsers/gsth265parser.c | 32 ++++++++++++++++++++---
|
|
||||||
1 file changed, 28 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/gst-libs/gst/codecparsers/gsth265parser.c b/gst-libs/gst/codecparsers/gsth265parser.c
|
|
||||||
index 2e8ef182b..200a06796 100644
|
|
||||||
--- a/gst-libs/gst/codecparsers/gsth265parser.c
|
|
||||||
+++ b/gst-libs/gst/codecparsers/gsth265parser.c
|
|
||||||
@@ -75,6 +75,8 @@
|
|
||||||
GST_DEBUG_CATEGORY_STATIC (h265_parser_debug);
|
|
||||||
#define GST_CAT_DEFAULT h265_parser_debug
|
|
||||||
|
|
||||||
+#define MAX_DPB_SIZE 16
|
|
||||||
+
|
|
||||||
static gboolean initialized = FALSE;
|
|
||||||
#define INITIALIZE_DEBUG_CATEGORY \
|
|
||||||
if (!initialized) { \
|
|
||||||
@@ -1506,7 +1508,7 @@ gst_h265_parse_vps (GstH265NalUnit * nalu, GstH265VPS * vps)
|
|
||||||
for (i =
|
|
||||||
(vps->sub_layer_ordering_info_present_flag ? 0 :
|
|
||||||
vps->max_sub_layers_minus1); i <= vps->max_sub_layers_minus1; i++) {
|
|
||||||
- READ_UE_MAX (&nr, vps->max_dec_pic_buffering_minus1[i], G_MAXUINT32 - 1);
|
|
||||||
+ READ_UE_MAX (&nr, vps->max_dec_pic_buffering_minus1[i], MAX_DPB_SIZE - 1);
|
|
||||||
READ_UE_MAX (&nr, vps->max_num_reorder_pics[i],
|
|
||||||
vps->max_dec_pic_buffering_minus1[i]);
|
|
||||||
READ_UE_MAX (&nr, vps->max_latency_increase_plus1[i], G_MAXUINT32 - 1);
|
|
||||||
@@ -1702,7 +1704,7 @@ gst_h265_parse_sps (GstH265Parser * parser, GstH265NalUnit * nalu,
|
|
||||||
for (i =
|
|
||||||
(sps->sub_layer_ordering_info_present_flag ? 0 :
|
|
||||||
sps->max_sub_layers_minus1); i <= sps->max_sub_layers_minus1; i++) {
|
|
||||||
- READ_UE_MAX (&nr, sps->max_dec_pic_buffering_minus1[i], 16);
|
|
||||||
+ READ_UE_MAX (&nr, sps->max_dec_pic_buffering_minus1[i], MAX_DPB_SIZE - 1);
|
|
||||||
READ_UE_MAX (&nr, sps->max_num_reorder_pics[i],
|
|
||||||
sps->max_dec_pic_buffering_minus1[i]);
|
|
||||||
READ_UE_MAX (&nr, sps->max_latency_increase_plus1[i], G_MAXUINT32 - 1);
|
|
||||||
@@ -2107,6 +2109,8 @@ gst_h265_parser_parse_slice_hdr (GstH265Parser * parser,
|
|
||||||
|
|
||||||
if ((nalu->type != GST_H265_NAL_SLICE_IDR_W_RADL)
|
|
||||||
&& (nalu->type != GST_H265_NAL_SLICE_IDR_N_LP)) {
|
|
||||||
+ const GstH265ShortTermRefPicSet *ref_pic_sets = NULL;
|
|
||||||
+
|
|
||||||
READ_UINT16 (&nr, slice->pic_order_cnt_lsb,
|
|
||||||
(sps->log2_max_pic_order_cnt_lsb_minus4 + 4));
|
|
||||||
|
|
||||||
@@ -2116,21 +2120,41 @@ gst_h265_parser_parse_slice_hdr (GstH265Parser * parser,
|
|
||||||
(&slice->short_term_ref_pic_sets, &nr,
|
|
||||||
sps->num_short_term_ref_pic_sets, sps))
|
|
||||||
goto error;
|
|
||||||
+ ref_pic_sets = &slice->short_term_ref_pic_sets;
|
|
||||||
} else if (sps->num_short_term_ref_pic_sets > 1) {
|
|
||||||
const guint n = ceil_log2 (sps->num_short_term_ref_pic_sets);
|
|
||||||
READ_UINT8 (&nr, slice->short_term_ref_pic_set_idx, n);
|
|
||||||
CHECK_ALLOWED_MAX (slice->short_term_ref_pic_set_idx,
|
|
||||||
sps->num_short_term_ref_pic_sets - 1);
|
|
||||||
+ ref_pic_sets =
|
|
||||||
+ &sps->short_term_ref_pic_set[slice->short_term_ref_pic_set_idx];
|
|
||||||
+ } else {
|
|
||||||
+ ref_pic_sets = &sps->short_term_ref_pic_set[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sps->long_term_ref_pics_present_flag) {
|
|
||||||
guint32 limit;
|
|
||||||
+ gint max_num_long_term_pics = 0;
|
|
||||||
|
|
||||||
- if (sps->num_long_term_ref_pics_sps > 0)
|
|
||||||
+ if (sps->num_long_term_ref_pics_sps > 0) {
|
|
||||||
READ_UE_MAX (&nr, slice->num_long_term_sps,
|
|
||||||
sps->num_long_term_ref_pics_sps);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* Calculated upper bound num_long_term_pics can have. 7.4.7.1 */
|
|
||||||
+ max_num_long_term_pics =
|
|
||||||
+ /* sps_max_dec_pic_buffering_minus1[TemporalId], allowed max is
|
|
||||||
+ * MaxDpbSize - 1 */
|
|
||||||
+ MAX_DPB_SIZE - 1
|
|
||||||
+ - (gint) slice->num_long_term_sps
|
|
||||||
+ - (gint) ref_pic_sets->NumNegativePics
|
|
||||||
+ - (gint) ref_pic_sets->NumPositivePics;
|
|
||||||
+ if (max_num_long_term_pics < 0) {
|
|
||||||
+ GST_WARNING ("Invalid stream, too many reference pictures");
|
|
||||||
+ goto error;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- READ_UE_MAX (&nr, slice->num_long_term_pics, 16);
|
|
||||||
+ READ_UE_MAX (&nr, slice->num_long_term_pics, max_num_long_term_pics);
|
|
||||||
limit = slice->num_long_term_sps + slice->num_long_term_pics;
|
|
||||||
for (i = 0; i < limit; i++) {
|
|
||||||
if (i < slice->num_long_term_sps) {
|
|
||||||
--
|
|
||||||
2.49.0
|
|
||||||
|
|
@ -1,321 +0,0 @@
|
|||||||
From 24e891568537f4447d1c212dcb355a766296bdbb Mon Sep 17 00:00:00 2001
|
|
||||||
From: Wim Taymans <wtaymans@redhat.com>
|
|
||||||
Date: Tue, 12 Dec 2023 18:00:58 +0100
|
|
||||||
Subject: [PATCH] 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5638>
|
|
||||||
---
|
|
||||||
gst/mxf/mxfdemux.c | 114 +++++++++++++++++++++------------------------
|
|
||||||
gst/mxf/mxfdemux.h | 2 +-
|
|
||||||
2 files changed, 53 insertions(+), 63 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/gst/mxf/mxfdemux.c b/gst/mxf/mxfdemux.c
|
|
||||||
index f6e5ac048..b97dce1ad 100644
|
|
||||||
--- a/gst/mxf/mxfdemux.c
|
|
||||||
+++ b/gst/mxf/mxfdemux.c
|
|
||||||
@@ -154,10 +154,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,
|
|
||||||
@@ -167,22 +182,7 @@ gst_mxf_demux_reset_mxf_state (GstMXFDemux * demux)
|
|
||||||
|
|
||||||
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
|
|
||||||
@@ -200,7 +200,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->source_track = NULL;
|
|
||||||
@@ -713,8 +713,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) {
|
|
||||||
@@ -732,24 +731,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;
|
|
||||||
}
|
|
||||||
@@ -876,13 +874,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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -895,7 +887,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);
|
|
||||||
@@ -1117,7 +1109,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) {
|
|
||||||
@@ -1598,8 +1590,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) {
|
|
||||||
@@ -1731,7 +1722,7 @@ gst_mxf_demux_handle_generic_container_essence_element (GstMXFDemux * demux,
|
|
||||||
|
|
||||||
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)) {
|
|
||||||
@@ -2656,7 +2647,7 @@ gst_mxf_demux_handle_klv_packet (GstMXFDemux * demux, const MXFUL * key,
|
|
||||||
|
|
||||||
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 != demux->current_partition->partition.body_sid)
|
|
||||||
continue;
|
|
||||||
@@ -2719,7 +2710,7 @@ gst_mxf_demux_handle_klv_packet (GstMXFDemux * demux, const MXFUL * key,
|
|
||||||
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 != demux->current_partition->partition.body_sid)
|
|
||||||
continue;
|
|
||||||
@@ -2914,7 +2905,7 @@ from_index:
|
|
||||||
|
|
||||||
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 (index_start_position != -1 && t == etrack)
|
|
||||||
t->position = index_start_position;
|
|
||||||
@@ -2937,8 +2928,7 @@ from_index:
|
|
||||||
if (ret == GST_FLOW_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;
|
|
||||||
@@ -3020,7 +3010,7 @@ gst_mxf_demux_pull_and_handle_klv_packet (GstMXFDemux * demux)
|
|
||||||
|
|
||||||
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;
|
|
||||||
@@ -3627,8 +3617,8 @@ 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -4001,8 +3991,8 @@ 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -4284,7 +4274,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;
|
|
||||||
@@ -4325,8 +4315,8 @@ 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;
|
|
||||||
@@ -4350,8 +4340,8 @@ 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;
|
|
||||||
@@ -4624,7 +4614,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);
|
|
||||||
@@ -4701,8 +4691,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/gst/mxf/mxfdemux.h b/gst/mxf/mxfdemux.h
|
|
||||||
index aac3e67d0..a452980ee 100644
|
|
||||||
--- a/gst/mxf/mxfdemux.h
|
|
||||||
+++ b/gst/mxf/mxfdemux.h
|
|
||||||
@@ -182,7 +182,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
|
|
||||||
|
|
@ -1,114 +0,0 @@
|
|||||||
From b6353c44ca9f005d3b57ee07fda0570d80eecc0f Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com>
|
|
||||||
Date: Thu, 10 Aug 2023 15:45:01 +0300
|
|
||||||
Subject: [PATCH 3/5] 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5362>
|
|
||||||
---
|
|
||||||
gst/mxf/mxfup.c | 51 +++++++++++++++++++++++++++++++++++++++++--------
|
|
||||||
1 file changed, 43 insertions(+), 8 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/gst/mxf/mxfup.c b/gst/mxf/mxfup.c
|
|
||||||
index d8b6664da..ba86255f2 100644
|
|
||||||
--- a/gst/mxf/mxfup.c
|
|
||||||
+++ b/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
|
|
||||||
|
|
@ -1,45 +0,0 @@
|
|||||||
From 706abb367ab366be142fbea4e454fdaa7e7e2bcb Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com>
|
|
||||||
Date: Thu, 10 Aug 2023 15:47:03 +0300
|
|
||||||
Subject: [PATCH 4/5] 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5362>
|
|
||||||
---
|
|
||||||
gst/mxf/mxfd10.c | 3 ++-
|
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/gst/mxf/mxfd10.c b/gst/mxf/mxfd10.c
|
|
||||||
index 21401cf52..99c197ab9 100644
|
|
||||||
--- a/gst/mxf/mxfd10.c
|
|
||||||
+++ b/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
|
|
||||||
|
|
@ -1,42 +0,0 @@
|
|||||||
From 33868442087aac6f26f18aeafd527c1a75946f34 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Nicolas Dufresne <nicolas.dufresne@collabora.com>
|
|
||||||
Date: Wed, 17 Jan 2024 12:50:34 +0100
|
|
||||||
Subject: [PATCH 5/5] 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5364>
|
|
||||||
---
|
|
||||||
gst-libs/gst/codecparsers/gsth265parser.c | 2 ++
|
|
||||||
1 file changed, 2 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/gst-libs/gst/codecparsers/gsth265parser.c b/gst-libs/gst/codecparsers/gsth265parser.c
|
|
||||||
index 16fce006b..2e8ef182b 100644
|
|
||||||
--- a/gst-libs/gst/codecparsers/gsth265parser.c
|
|
||||||
+++ b/gst-libs/gst/codecparsers/gsth265parser.c
|
|
||||||
@@ -1490,6 +1490,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 */
|
|
||||||
@@ -1669,6 +1670,7 @@ gst_h265_parse_sps (GstH265Parser * parser, GstH265NalUnit * nalu,
|
|
||||||
sps->vps = vps;
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
@ -41,6 +41,7 @@ dataurisrc
|
|||||||
dccp
|
dccp
|
||||||
debugutils
|
debugutils
|
||||||
dtmf
|
dtmf
|
||||||
|
dvbsubenc
|
||||||
faceoverlay
|
faceoverlay
|
||||||
festival
|
festival
|
||||||
fieldanalysis
|
fieldanalysis
|
||||||
@ -84,6 +85,8 @@ proxy
|
|||||||
qtmux
|
qtmux
|
||||||
rawparse
|
rawparse
|
||||||
removesilence
|
removesilence
|
||||||
|
rist
|
||||||
|
rtmp2
|
||||||
rtp
|
rtp
|
||||||
rtpmux
|
rtpmux
|
||||||
rtpvp8
|
rtpvp8
|
||||||
@ -96,7 +99,9 @@ smooth
|
|||||||
speed
|
speed
|
||||||
stereo
|
stereo
|
||||||
subenc
|
subenc
|
||||||
|
switchbin
|
||||||
timecode
|
timecode
|
||||||
|
transcode
|
||||||
tta
|
tta
|
||||||
valve
|
valve
|
||||||
videofilters
|
videofilters
|
||||||
@ -164,20 +169,6 @@ for subdir in gst ext sys; do
|
|||||||
echo "**** Removing $MODULE ****"
|
echo "**** Removing $MODULE ****"
|
||||||
echo "Removing directory $dir"
|
echo "Removing directory $dir"
|
||||||
rm -r $dir || error "Cannot remove $dir"
|
rm -r $dir || error "Cannot remove $dir"
|
||||||
if grep -q "AG_GST_CHECK_PLUGIN($MODULE)" configure.ac ; then
|
|
||||||
echo "Removing element check for $MODULE"
|
|
||||||
grep -v "AG_GST_CHECK_PLUGIN($MODULE)" configure.ac > configure.ac.new && mv configure.ac.new configure.ac
|
|
||||||
fi
|
|
||||||
echo "Removing Makefile generation for $MODULE"
|
|
||||||
grep -v "$dir/Makefile" configure.ac > configure.ac.new && mv configure.ac.new configure.ac
|
|
||||||
# Urgh
|
|
||||||
if test $MODULE = real ; then
|
|
||||||
grep -v "AG_GST_DISABLE_PLUGIN(real)" configure.ac > configure.ac.new && mv configure.ac.new configure.ac
|
|
||||||
fi
|
|
||||||
echo "Removing documentation for $MODULE"
|
|
||||||
if grep -q "$MODULE" docs/plugins/Makefile.am ; then
|
|
||||||
grep -v $dir docs/plugins/Makefile.am > docs/plugins/Makefile.am.new && mv docs/plugins/Makefile.am.new docs/plugins/Makefile.am
|
|
||||||
fi
|
|
||||||
echo
|
echo
|
||||||
elif test $subdir = ext || test $subdir = sys; then
|
elif test $subdir = ext || test $subdir = sys; then
|
||||||
# Ignore library or system non-blacklisted plugins
|
# Ignore library or system non-blacklisted plugins
|
||||||
@ -197,10 +188,6 @@ if test "x$unknown" != "x"; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#autoreconf
|
|
||||||
NOCONFIGURE=1 \
|
|
||||||
./autogen.sh
|
|
||||||
|
|
||||||
popd > /dev/null
|
popd > /dev/null
|
||||||
|
|
||||||
tar cJf $NEW_SOURCE $DIRECTORY
|
tar cJf $NEW_SOURCE $DIRECTORY
|
||||||
|
45
SOURCES/openh264-add-license-file.patch
Normal file
45
SOURCES/openh264-add-license-file.patch
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
From b13e925daa574fb07aac0271f2b51c25ecb9d483 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Kalev Lember <klember@redhat.com>
|
||||||
|
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
|
||||||
|
|
149
SOURCES/openh264-drop-runtime-version-checks.patch
Normal file
149
SOURCES/openh264-drop-runtime-version-checks.patch
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
From 1dadccd48c97a4b7c96ae0307c2263107e7f1876 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Kalev Lember <klember@redhat.com>
|
||||||
|
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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5780>
|
||||||
|
---
|
||||||
|
.../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 <config.h>
|
||||||
|
-#endif
|
||||||
|
-
|
||||||
|
-#include <gst/gst.h>
|
||||||
|
-#include <wels/codec_api.h>
|
||||||
|
-#include <wels/codec_ver.h>
|
||||||
|
-#include <string.h>
|
||||||
|
-#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
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user