mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-03 14:08:56 +00:00
h264parser: Write Unregistered User Data
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5071>
This commit is contained in:
parent
4583d8c0e8
commit
d07ffae343
2 changed files with 60 additions and 0 deletions
|
@ -2845,6 +2845,19 @@ error:
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_h264_write_sei_user_data_unregistered (NalWriter * nw,
|
||||
GstH264UserDataUnregistered * udu)
|
||||
{
|
||||
WRITE_BYTES (nw, udu->uuid, 16);
|
||||
WRITE_BYTES (nw, udu->data, udu->size);
|
||||
|
||||
return TRUE;
|
||||
|
||||
error:
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_h264_write_sei_frame_packing (NalWriter * nw,
|
||||
GstH264FramePacking * frame_packing)
|
||||
|
@ -3029,6 +3042,12 @@ gst_h264_create_sei_memory_internal (guint8 nal_prefix_size,
|
|||
payload_size_data += rud->size;
|
||||
break;
|
||||
}
|
||||
case GST_H264_SEI_USER_DATA_UNREGISTERED:{
|
||||
GstH264UserDataUnregistered *udu = &msg->payload.user_data_unregistered;
|
||||
|
||||
payload_size_data = 16 + udu->size;
|
||||
break;
|
||||
}
|
||||
case GST_H264_SEI_FRAME_PACKING:{
|
||||
GstH264FramePacking *frame_packing = &msg->payload.frame_packing;
|
||||
guint leading_zeros, rest;
|
||||
|
@ -3216,6 +3235,15 @@ gst_h264_create_sei_memory_internal (guint8 nal_prefix_size,
|
|||
}
|
||||
have_written_data = TRUE;
|
||||
break;
|
||||
case GST_H264_SEI_USER_DATA_UNREGISTERED:
|
||||
GST_DEBUG ("Writing \"Unregistered user data\"");
|
||||
if (!gst_h264_write_sei_user_data_unregistered (&nw,
|
||||
&msg->payload.user_data_unregistered)) {
|
||||
GST_WARNING ("Failed to write \"Unregistered user data\"");
|
||||
goto error;
|
||||
}
|
||||
have_written_data = TRUE;
|
||||
break;
|
||||
case GST_H264_SEI_FRAME_PACKING:
|
||||
GST_DEBUG ("Writing \"Frame packing\"");
|
||||
if (!gst_h264_write_sei_frame_packing (&nw,
|
||||
|
|
|
@ -332,6 +332,16 @@ static guint8 h264_sei_user_data_registered[] = {
|
|||
0x00, 0xff, 0x80
|
||||
};
|
||||
|
||||
static guint8 h264_sei_user_data_unregistered[] = {
|
||||
0x00, 0x00, 0x00, 0x01, 0x06,
|
||||
0x05, // Payload type.
|
||||
0x18, // Payload size.
|
||||
0x4D, 0x49, 0x53, 0x50, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x65, 0x63,
|
||||
0x74, 0x69, 0x6D, 0x65, // UUID.
|
||||
0x70, 0x69, 0x67, 0x73, 0x20, 0x66, 0x6c, 0x79, // Payload data
|
||||
0x80
|
||||
};
|
||||
|
||||
/* frame packing, side-by-side */
|
||||
static guint8 h264_sei_frame_packing[] = {
|
||||
0x00, 0x00, 0x00, 0x01, 0x06, 0x2d, 0x07, 0x81, 0x81, 0x00, 0x00, 0x03,
|
||||
|
@ -425,6 +435,15 @@ check_sei_user_data_registered (const GstH264RegisteredUserData * a,
|
|||
return !memcmp (a->data, b->data, a->size);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
check_sei_user_data_unregistered (const GstH264UserDataUnregistered * a,
|
||||
const GstH264UserDataUnregistered * b)
|
||||
{
|
||||
return a->size == b->size &&
|
||||
!memcmp (a->uuid, b->uuid, sizeof (a->uuid)) &&
|
||||
!memcmp (a->data, b->data, a->size);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
check_sei_frame_packing (const GstH264FramePacking * a,
|
||||
const GstH264FramePacking * b)
|
||||
|
@ -594,6 +613,9 @@ GST_START_TEST (test_h264_create_sei)
|
|||
{h264_sei_user_data_registered, G_N_ELEMENTS (h264_sei_user_data_registered),
|
||||
GST_H264_SEI_REGISTERED_USER_DATA, {0,},
|
||||
(SEICheckFunc) check_sei_user_data_registered},
|
||||
{h264_sei_user_data_unregistered, G_N_ELEMENTS (h264_sei_user_data_unregistered),
|
||||
GST_H264_SEI_USER_DATA_UNREGISTERED, {0,},
|
||||
(SEICheckFunc) check_sei_user_data_unregistered},
|
||||
{h264_sei_frame_packing, G_N_ELEMENTS (h264_sei_frame_packing),
|
||||
GST_H264_SEI_FRAME_PACKING, {0,},
|
||||
(SEICheckFunc) check_sei_frame_packing},
|
||||
|
@ -671,6 +693,16 @@ GST_START_TEST (test_h264_create_sei)
|
|||
|
||||
dst_rud->data = g_malloc (src_rud->size);
|
||||
memcpy ((guint8 *) dst_rud->data, src_rud->data, src_rud->size);
|
||||
} else if (test_list[i].type == GST_H264_SEI_USER_DATA_UNREGISTERED) {
|
||||
GstH264UserDataUnregistered *dst_udu =
|
||||
&test_list[i].parsed_message.payload.user_data_unregistered;
|
||||
const GstH264SEIMessage *src_msg =
|
||||
&g_array_index (msg_array, GstH264SEIMessage, 0);
|
||||
const GstH264UserDataUnregistered *src_udu =
|
||||
&src_msg->payload.user_data_unregistered;
|
||||
|
||||
dst_udu->data = g_malloc (src_udu->size);
|
||||
memcpy ((guint8 *) dst_udu->data, src_udu->data, src_udu->size);
|
||||
}
|
||||
g_array_unref (msg_array);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue