static void check_on_demand_playlist (const gchar * data) { GstM3U8Client *client; GstM3U8 *pl; GstM3U8MediaFile *file; client = load_playlist (data); pl = client->current; /* Sequence should be 0 as it's an ondemand playlist */ assert_equals_int (client->sequence, 0); /* Check that we are not live */ assert_equals_int (gst_m3u8_client_is_live (client), FALSE); /* Check number of entries */ assert_equals_int (g_list_length (pl->files), 4); /* Check first media segments */ file = GST_M3U8_MEDIA_FILE (g_list_first (pl->files)->data); assert_equals_string (file->uri, "http://media.example.com/001.ts"); assert_equals_int (file->sequence, 0); /* Check last media segments */ file = GST_M3U8_MEDIA_FILE (g_list_last (pl->files)->data); assert_equals_string (file->uri, "http://media.example.com/004.ts"); assert_equals_int (file->sequence, 3); gst_m3u8_client_free (client); }
static void do_test_load_main_playlist_variant (const gchar * playlist) { GstM3U8Client *client; GstM3U8 *stream; GList *tmp; client = load_playlist (playlist); assert_equals_int (g_list_length (client->main->lists), 4); /* Audio-Only */ tmp = g_list_first (client->main->lists); stream = GST_M3U8 (tmp->data); assert_equals_int (stream->bandwidth, 65000); assert_equals_int (stream->program_id, 1); assert_equals_string (stream->uri, "http://example.com/audio-only.m3u8"); assert_equals_string (stream->codecs, "\"mp4a.40.5\""); /* Low */ tmp = g_list_next (tmp); stream = GST_M3U8 (tmp->data); assert_equals_int (stream->bandwidth, 128000); assert_equals_int (stream->program_id, 1); assert_equals_string (stream->uri, "http://example.com/low.m3u8"); /* Mid */ tmp = g_list_next (tmp); stream = GST_M3U8 (tmp->data); assert_equals_int (stream->bandwidth, 256000); assert_equals_int (stream->program_id, 1); assert_equals_string (stream->uri, "http://example.com/mid.m3u8"); /* High */ tmp = g_list_next (tmp); stream = GST_M3U8 (tmp->data); assert_equals_int (stream->bandwidth, 768000); assert_equals_int (stream->program_id, 1); assert_equals_string (stream->uri, "http://example.com/hi.m3u8"); /* Check the first playlist is selected */ assert_equals_int (client->current != NULL, TRUE); assert_equals_int (client->current->bandwidth, 128000); gst_m3u8_client_free (client); }
static void _check_media_info (GstSegment * segment, BufferDesc * bufs) { GList *reports; GstEvent *segev; GstBuffer *buffer; GstElement *decoder; GstPad *srcpad, *sinkpad; GstValidateReport *report; GstValidateMonitor *monitor; GstValidateRunner *runner; GstMediaDescriptor *mdesc; GError *err = NULL; gint i, num_issues = 0; fail_unless (g_setenv ("GST_VALIDATE_REPORTING_DETAILS", "all", TRUE)); runner = gst_validate_runner_new (); mdesc = (GstMediaDescriptor *) gst_media_descriptor_parser_new_from_xml (runner, media_info, &err); decoder = fake_decoder_new (); monitor = gst_validate_monitor_factory_create (GST_OBJECT (decoder), runner, NULL); gst_validate_monitor_set_media_descriptor (monitor, mdesc); srcpad = gst_pad_new ("src", GST_PAD_SRC); sinkpad = decoder->sinkpads->data; ASSERT_OBJECT_REFCOUNT (sinkpad, "decoder ref", 1); fail_unless (gst_pad_activate_mode (srcpad, GST_PAD_MODE_PUSH, TRUE)); fail_unless_equals_int (gst_element_set_state (decoder, GST_STATE_PLAYING), GST_STATE_CHANGE_SUCCESS); assert_equals_string (gst_pad_link_get_name (gst_pad_link (srcpad, sinkpad)), gst_pad_link_get_name (GST_PAD_LINK_OK)); gst_check_setup_events_with_stream_id (srcpad, decoder, gst_caps_from_string ("video/x-fake"), GST_FORMAT_TIME, "the-stream"); if (segment) { segev = gst_event_new_segment (segment); fail_unless (gst_pad_push_event (srcpad, segev)); } for (i = 0; bufs[i].content != NULL; i++) { BufferDesc *buf = &bufs[i]; buffer = _create_buffer (buf); assert_equals_string (gst_flow_get_name (gst_pad_push (srcpad, buffer)), gst_flow_get_name (GST_FLOW_OK)); reports = gst_validate_runner_get_reports (runner); num_issues += buf->num_issues; assert_equals_int (g_list_length (reports), num_issues); if (buf->num_issues) { GList *tmp = g_list_nth (reports, num_issues - buf->num_issues); while (tmp) { report = tmp->data; fail_unless_equals_int (report->level, GST_VALIDATE_REPORT_LEVEL_WARNING); fail_unless_equals_int (report->issue->issue_id, WRONG_BUFFER); tmp = tmp->next; } } } /* clean up */ fail_unless (gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PUSH, FALSE)); fail_unless_equals_int (gst_element_set_state (decoder, GST_STATE_NULL), GST_STATE_CHANGE_SUCCESS); gst_object_unref (srcpad); check_destroyed (decoder, sinkpad, NULL); check_destroyed (runner, NULL, NULL); }