diff --git a/subprojects/gst-plugins-bad/gst/videoparsers/gsth264parse.c b/subprojects/gst-plugins-bad/gst/videoparsers/gsth264parse.c index 1ea0d80d5d..9e1fd251bf 100644 --- a/subprojects/gst-plugins-bad/gst/videoparsers/gsth264parse.c +++ b/subprojects/gst-plugins-bad/gst/videoparsers/gsth264parse.c @@ -235,7 +235,7 @@ gst_h264_parse_finalize (GObject * object) { GstH264Parse *h264parse = GST_H264_PARSE (object); - gst_video_user_data_unregistered_clear (&h264parse->user_data_unregistered); + gst_video_clear_user_data_unregistered (&h264parse->user_data_unregistered); g_object_unref (h264parse->frame_out); g_array_unref (h264parse->nal_backlog); @@ -263,6 +263,7 @@ gst_h264_parse_reset_frame (GstH264Parse * h264parse) h264parse->have_aud_in_frame = FALSE; gst_adapter_clear (h264parse->frame_out); gst_video_clear_user_data (&h264parse->user_data); + gst_video_clear_user_data_unregistered (&h264parse->user_data_unregistered); } static void diff --git a/subprojects/gst-plugins-bad/gst/videoparsers/gsth265parse.c b/subprojects/gst-plugins-bad/gst/videoparsers/gsth265parse.c index 6b215c2511..21b2f4162e 100644 --- a/subprojects/gst-plugins-bad/gst/videoparsers/gsth265parse.c +++ b/subprojects/gst-plugins-bad/gst/videoparsers/gsth265parse.c @@ -182,7 +182,8 @@ gst_h265_parse_finalize (GObject * object) { GstH265Parse *h265parse = GST_H265_PARSE (object); - gst_video_user_data_unregistered_clear (&h265parse->user_data_unregistered); + gst_video_clear_user_data_unregistered (&h265parse->user_data_unregistered); + g_object_unref (h265parse->frame_out); G_OBJECT_CLASS (parent_class)->finalize (object); @@ -208,6 +209,7 @@ gst_h265_parse_reset_frame (GstH265Parse * h265parse) h265parse->have_pps_in_frame = FALSE; gst_adapter_clear (h265parse->frame_out); gst_video_clear_user_data (&h265parse->user_data); + gst_video_clear_user_data_unregistered (&h265parse->user_data_unregistered); } static void diff --git a/subprojects/gst-plugins-bad/gst/videoparsers/gstvideoparseutils.c b/subprojects/gst-plugins-bad/gst/videoparsers/gstvideoparseutils.c index 518af9e0c9..4f62722a05 100644 --- a/subprojects/gst-plugins-bad/gst/videoparsers/gstvideoparseutils.c +++ b/subprojects/gst-plugins-bad/gst/videoparsers/gstvideoparseutils.c @@ -454,46 +454,35 @@ gst_video_clear_user_data (GstVideoParseUserData * user_data) /* * gst_video_parse_user_data_unregistered: * @elt: #GstElement that is parsing user data - * @user_data: #GstVideoParseUserDataUnregistered struct to hold parsed data + * @user_data: #GstVideoParseUserDataUnregistered to hold SEI User Data Unregistered * @br: #GstByteReader attached to buffer of user data * @uuid: User Data Unregistered UUID * - * Parse user data and store in @user_data + * Copy remaining bytes in @br and store in @user_data */ void gst_video_parse_user_data_unregistered (GstElement * elt, GstVideoParseUserDataUnregistered * user_data, GstByteReader * br, guint8 uuid[16]) { - gst_video_user_data_unregistered_clear (user_data); + gst_video_clear_user_data_unregistered (user_data); memcpy (&user_data->uuid, uuid, 16); - user_data->size = gst_byte_reader_get_size (br); - gst_byte_reader_dup_data (br, user_data->size, &user_data->data); -} -/* - * gst_video_user_data_unregistered_clear: - * @user_data: #GstVideoParseUserDataUnregistered holding SEI User Data Unregistered - * - * Clears the user data unregistered - */ -void -gst_video_user_data_unregistered_clear (GstVideoParseUserDataUnregistered * - user_data) -{ - g_free (user_data->data); - user_data->data = NULL; - user_data->size = 0; + user_data->size = gst_byte_reader_get_size (br); + if (!gst_byte_reader_dup_data (br, user_data->size, &user_data->data)) { + g_return_if_reached (); + } } /* * gst_video_push_user_data_unregistered: * @elt: #GstElement that is pushing user data * @user_data: #GstVideoParseUserDataUnregistered holding SEI User Data Unregistered - * @buf: #GstBuffer that receives the parsed data + * @buf: (transfer none): #GstBuffer that receives the unregistered data * - * After user data has been parsed, add the data to @buf + * Attach unregistered user data from @user_data to @buf as + * GstVideoSEIUserDataUnregisteredMeta */ void gst_video_push_user_data_unregistered (GstElement * elt, @@ -502,6 +491,19 @@ gst_video_push_user_data_unregistered (GstElement * elt, if (user_data->data != NULL) { gst_buffer_add_video_sei_user_data_unregistered_meta (buf, user_data->uuid, user_data->data, user_data->size); - gst_video_user_data_unregistered_clear (user_data); } } + +/* + * gst_video_clear_user_data_unregistered: + * @user_data: #GstVideoParseUserDataUnregistered holding SEI User Data Unregistered + * + * Clears the user data unregistered, resetting it for the next frame + */ +void gst_video_clear_user_data_unregistered + (GstVideoParseUserDataUnregistered * user_data) +{ + memset (&msg->uuid, 0, sizeof msg->uuid); + g_clear_pointer (&msg->data, g_free); + msg->size = 0; +} diff --git a/subprojects/gst-plugins-bad/gst/videoparsers/gstvideoparseutils.h b/subprojects/gst-plugins-bad/gst/videoparsers/gstvideoparseutils.h index 3cc0f5ea23..0ebe0018a4 100644 --- a/subprojects/gst-plugins-bad/gst/videoparsers/gstvideoparseutils.h +++ b/subprojects/gst-plugins-bad/gst/videoparsers/gstvideoparseutils.h @@ -169,7 +169,7 @@ typedef struct /* * GstVideoParseUserDataUnregistered * - * Holds unparsed User Data Unregistered. + * Holds unparsed, unregistered user data. */ typedef struct { @@ -192,10 +192,19 @@ void gst_video_push_user_data (GstElement * elt, void gst_video_clear_user_data (GstVideoParseUserData * user_data); -void gst_video_user_data_unregistered_clear(GstVideoParseUserDataUnregistered * user_data); -void gst_video_push_user_data_unregistered(GstElement * elt, GstVideoParseUserDataUnregistered * user_data, - GstBuffer * buf); +void gst_video_parse_user_data_unregistered (GstElement * elt, + GstVideoParseUserDataUnregistered * user_data, + GstByteReader * br, + guint8 uuid[16]); + +void gst_video_push_user_data_unregistered (GstElement * elt, + GstVideoParseUserDataUnregistered * user_data, + GstBuffer * buf); + +void gst_video_clear_user_data_unregistered (GstVideoParseUserDataUnregistered * user_data, + gboolean free); + G_END_DECLS #endif /* __VIDEO_PARSE_UTILS_H__ */