mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-06 23:48:53 +00:00
tests: qtdemux: test correct pad names are created
Test correct pad names are created in accordance to their media type in mss mode. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/628>
This commit is contained in:
parent
f8e686078d
commit
d6f6e8410e
1 changed files with 147 additions and 0 deletions
|
@ -740,6 +740,152 @@ GST_START_TEST (test_qtdemux_stream_change)
|
||||||
|
|
||||||
GST_END_TEST;
|
GST_END_TEST;
|
||||||
|
|
||||||
|
static void
|
||||||
|
qtdemux_pad_added_cb_check_name (GstElement * element, GstPad * pad,
|
||||||
|
gchar * data)
|
||||||
|
{
|
||||||
|
gchar *pad_name = gst_pad_get_name (pad);
|
||||||
|
|
||||||
|
GST_DEBUG_OBJECT (pad, "New pad added");
|
||||||
|
fail_unless (!g_strcmp0 (pad_name, data));
|
||||||
|
g_free (pad_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
GST_START_TEST (test_qtdemux_pad_names)
|
||||||
|
{
|
||||||
|
GstElement *qtdemux_v;
|
||||||
|
GstElement *qtdemux_a;
|
||||||
|
GstPad *sinkpad;
|
||||||
|
gchar *expected_video_pad_name;
|
||||||
|
gchar *expected_audio_pad_name;
|
||||||
|
GstBuffer *inbuf;
|
||||||
|
GstSegment segment;
|
||||||
|
GstEvent *event;
|
||||||
|
GstCaps *caps;
|
||||||
|
GstCaps *mediacaps;
|
||||||
|
|
||||||
|
/* The goal of this test is to check that qtdemux can create proper
|
||||||
|
* pad names with encrypted stream caps in mss mode.
|
||||||
|
*
|
||||||
|
* Input Caps:
|
||||||
|
* - media-caps with cenc
|
||||||
|
*
|
||||||
|
* Expected behaviour
|
||||||
|
* - Demux exposes src pad with names in accordance to their media types
|
||||||
|
*/
|
||||||
|
expected_video_pad_name = g_strdup ("video_0");
|
||||||
|
qtdemux_v = gst_element_factory_make ("qtdemux", NULL);
|
||||||
|
gst_element_set_state (qtdemux_v, GST_STATE_PLAYING);
|
||||||
|
sinkpad = gst_element_get_static_pad (qtdemux_v, "sink");
|
||||||
|
|
||||||
|
/* We'll want to know when the source pad is added */
|
||||||
|
g_signal_connect (qtdemux_v, "pad-added", (GCallback)
|
||||||
|
qtdemux_pad_added_cb_check_name, expected_video_pad_name);
|
||||||
|
|
||||||
|
/* Send the initial STREAM_START and segment (TIME) event */
|
||||||
|
event = gst_event_new_stream_start ("TEST");
|
||||||
|
GST_DEBUG ("Pushing stream-start event");
|
||||||
|
fail_unless (gst_pad_send_event (sinkpad, event) == TRUE);
|
||||||
|
|
||||||
|
/* Send CAPS event* */
|
||||||
|
mediacaps = gst_caps_new_simple ("application/x-cenc",
|
||||||
|
"stream-format", G_TYPE_STRING, "avc",
|
||||||
|
"format", G_TYPE_STRING, "H264",
|
||||||
|
"width", G_TYPE_INT, 512,
|
||||||
|
"height", G_TYPE_INT, 288,
|
||||||
|
"original-media-type", G_TYPE_STRING, "video/x-h264",
|
||||||
|
"protection-system", G_TYPE_STRING,
|
||||||
|
"9a04f079-9840-4286-ab92-e65be0885f95", NULL);
|
||||||
|
caps =
|
||||||
|
gst_caps_new_simple ("video/quicktime", "variant", G_TYPE_STRING,
|
||||||
|
"mss-fragmented", "timesacle", G_TYPE_UINT64, 10000000, "media-caps",
|
||||||
|
GST_TYPE_CAPS, mediacaps, NULL);
|
||||||
|
|
||||||
|
/* Send segment event* */
|
||||||
|
event = gst_event_new_caps (caps);
|
||||||
|
GST_DEBUG ("Pushing caps event");
|
||||||
|
fail_unless (gst_pad_send_event (sinkpad, event) == TRUE);
|
||||||
|
gst_caps_unref (mediacaps);
|
||||||
|
gst_caps_unref (caps);
|
||||||
|
|
||||||
|
gst_segment_init (&segment, GST_FORMAT_TIME);
|
||||||
|
event = gst_event_new_segment (&segment);
|
||||||
|
GST_DEBUG ("Pushing segment event");
|
||||||
|
fail_unless (gst_pad_send_event (sinkpad, event) == TRUE);
|
||||||
|
|
||||||
|
/* Send the first fragment */
|
||||||
|
/* NOTE: mss streams don't have moov */
|
||||||
|
inbuf = gst_buffer_new_and_alloc (seg_1_moof_size);
|
||||||
|
gst_buffer_fill (inbuf, 0, seg_1_m4f, seg_1_moof_size);
|
||||||
|
GST_BUFFER_PTS (inbuf) = 0;
|
||||||
|
GST_BUFFER_OFFSET (inbuf) = 0;
|
||||||
|
GST_BUFFER_FLAG_SET (inbuf, GST_BUFFER_FLAG_DISCONT);
|
||||||
|
GST_DEBUG ("Pushing video fragment");
|
||||||
|
fail_unless (gst_pad_chain (sinkpad, inbuf) == GST_FLOW_OK);
|
||||||
|
|
||||||
|
gst_object_unref (sinkpad);
|
||||||
|
gst_element_set_state (qtdemux_v, GST_STATE_NULL);
|
||||||
|
gst_object_unref (qtdemux_v);
|
||||||
|
g_free (expected_video_pad_name);
|
||||||
|
|
||||||
|
/* Repeat test for audio media type */
|
||||||
|
expected_audio_pad_name = g_strdup ("audio_0");
|
||||||
|
qtdemux_a = gst_element_factory_make ("qtdemux", NULL);
|
||||||
|
gst_element_set_state (qtdemux_a, GST_STATE_PLAYING);
|
||||||
|
sinkpad = gst_element_get_static_pad (qtdemux_a, "sink");
|
||||||
|
|
||||||
|
/* We'll want to know when the source pad is added */
|
||||||
|
g_signal_connect (qtdemux_a, "pad-added", (GCallback)
|
||||||
|
qtdemux_pad_added_cb_check_name, expected_audio_pad_name);
|
||||||
|
|
||||||
|
/* Send the initial STREAM_START and segment (TIME) event */
|
||||||
|
event = gst_event_new_stream_start ("TEST");
|
||||||
|
GST_DEBUG ("Pushing stream-start event");
|
||||||
|
fail_unless (gst_pad_send_event (sinkpad, event) == TRUE);
|
||||||
|
|
||||||
|
/* Send CAPS event* */
|
||||||
|
mediacaps = gst_caps_new_simple ("application/x-cenc",
|
||||||
|
"mpegversion", G_TYPE_INT, 4,
|
||||||
|
"channels", G_TYPE_INT, 2,
|
||||||
|
"rate", G_TYPE_INT, 48000,
|
||||||
|
"original-media-type", G_TYPE_STRING, "audio/mpeg",
|
||||||
|
"protection-system", G_TYPE_STRING,
|
||||||
|
"9a04f079-9840-4286-ab92-e65be0885f95", NULL);
|
||||||
|
caps =
|
||||||
|
gst_caps_new_simple ("video/quicktime", "variant", G_TYPE_STRING,
|
||||||
|
"mss-fragmented", "timesacle", G_TYPE_UINT64, 10000000, "media-caps",
|
||||||
|
GST_TYPE_CAPS, mediacaps, NULL);
|
||||||
|
|
||||||
|
/* Send segment event* */
|
||||||
|
event = gst_event_new_caps (caps);
|
||||||
|
GST_DEBUG ("Pushing caps event");
|
||||||
|
fail_unless (gst_pad_send_event (sinkpad, event) == TRUE);
|
||||||
|
gst_caps_unref (mediacaps);
|
||||||
|
gst_caps_unref (caps);
|
||||||
|
|
||||||
|
gst_segment_init (&segment, GST_FORMAT_TIME);
|
||||||
|
event = gst_event_new_segment (&segment);
|
||||||
|
GST_DEBUG ("Pushing segment event");
|
||||||
|
fail_unless (gst_pad_send_event (sinkpad, event) == TRUE);
|
||||||
|
|
||||||
|
/* Send the first fragment */
|
||||||
|
/* NOTE: mss streams don't have moov */
|
||||||
|
inbuf = gst_buffer_new_and_alloc (seg_1_moof_size);
|
||||||
|
gst_buffer_fill (inbuf, 0, seg_1_m4f, seg_1_moof_size);
|
||||||
|
GST_BUFFER_PTS (inbuf) = 0;
|
||||||
|
GST_BUFFER_OFFSET (inbuf) = 0;
|
||||||
|
GST_BUFFER_FLAG_SET (inbuf, GST_BUFFER_FLAG_DISCONT);
|
||||||
|
GST_DEBUG ("Pushing audio fragment");
|
||||||
|
fail_unless (gst_pad_chain (sinkpad, inbuf) == GST_FLOW_OK);
|
||||||
|
|
||||||
|
gst_object_unref (sinkpad);
|
||||||
|
gst_element_set_state (qtdemux_a, GST_STATE_NULL);
|
||||||
|
gst_object_unref (qtdemux_a);
|
||||||
|
g_free (expected_audio_pad_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
GST_END_TEST;
|
||||||
|
|
||||||
static Suite *
|
static Suite *
|
||||||
qtdemux_suite (void)
|
qtdemux_suite (void)
|
||||||
{
|
{
|
||||||
|
@ -752,6 +898,7 @@ qtdemux_suite (void)
|
||||||
tcase_add_test (tc_chain, test_qtdemux_input_gap);
|
tcase_add_test (tc_chain, test_qtdemux_input_gap);
|
||||||
tcase_add_test (tc_chain, test_qtdemux_duplicated_moov);
|
tcase_add_test (tc_chain, test_qtdemux_duplicated_moov);
|
||||||
tcase_add_test (tc_chain, test_qtdemux_stream_change);
|
tcase_add_test (tc_chain, test_qtdemux_stream_change);
|
||||||
|
tcase_add_test (tc_chain, test_qtdemux_pad_names);
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue