mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-24 02:31:03 +00:00
mpegtsparse: fix sdt parsing.
fix parsing of everything for each service from eit schedule flag on and also add a running-status parameter to the bus message structure.
This commit is contained in:
parent
8fade13db1
commit
2e6de387ac
1 changed files with 28 additions and 9 deletions
|
@ -1264,17 +1264,16 @@ mpegts_packetizer_parse_sdt (MpegTSPacketizer * packetizer,
|
||||||
service_id = GST_READ_UINT16_BE (data);
|
service_id = GST_READ_UINT16_BE (data);
|
||||||
data += 2;
|
data += 2;
|
||||||
|
|
||||||
/* reserved */
|
EIT_schedule = ((*data & 0x02) == 2);
|
||||||
|
EIT_present_following = (*data & 0x01) == 1;
|
||||||
|
|
||||||
data += 1;
|
data += 1;
|
||||||
|
|
||||||
tmp = GST_READ_UINT16_BE (data);
|
tmp = GST_READ_UINT16_BE (data);
|
||||||
data += 2;
|
|
||||||
|
|
||||||
EIT_schedule = (tmp >> 15);
|
running_status = (*data >> 5) & 0x07;
|
||||||
EIT_present_following = (tmp >> 14) & 0x01;
|
scrambled = (*data >> 4) & 0x01;
|
||||||
running_status = (tmp >> 5) & 0x03;
|
|
||||||
scrambled = (tmp >> 4) & 0x01;
|
|
||||||
descriptors_loop_length = tmp & 0x0FFF;
|
descriptors_loop_length = tmp & 0x0FFF;
|
||||||
|
data += 2;
|
||||||
|
|
||||||
/* TODO send tag event down relevant pad for channel name and provider */
|
/* TODO send tag event down relevant pad for channel name and provider */
|
||||||
service_name = g_strdup_printf ("service-%d", service_id);
|
service_name = g_strdup_printf ("service-%d", service_id);
|
||||||
|
@ -1307,7 +1306,26 @@ mpegts_packetizer_parse_sdt (MpegTSPacketizer * packetizer,
|
||||||
(gchar *) DESC_DVB_SERVICE_name_text (service_descriptor);
|
(gchar *) DESC_DVB_SERVICE_name_text (service_descriptor);
|
||||||
if (servicename_length + serviceprovider_name_length + 2 <=
|
if (servicename_length + serviceprovider_name_length + 2 <=
|
||||||
DESC_LENGTH (service_descriptor)) {
|
DESC_LENGTH (service_descriptor)) {
|
||||||
|
gchar *running_status_tmp;
|
||||||
|
switch (running_status) {
|
||||||
|
case 0:
|
||||||
|
running_status_tmp = "undefined";
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
running_status_tmp = "not running";
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
running_status_tmp = "starts in a few seconds";
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
running_status_tmp = "pausing";
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
running_status_tmp = "running";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
running_status_tmp = "reserved";
|
||||||
|
}
|
||||||
servicename_tmp =
|
servicename_tmp =
|
||||||
get_encoding_and_convert (servicename, servicename_length);
|
get_encoding_and_convert (servicename, servicename_length);
|
||||||
serviceprovider_name_tmp =
|
serviceprovider_name_tmp =
|
||||||
|
@ -1317,7 +1335,8 @@ mpegts_packetizer_parse_sdt (MpegTSPacketizer * packetizer,
|
||||||
gst_structure_set (service,
|
gst_structure_set (service,
|
||||||
"name", G_TYPE_STRING, servicename_tmp,
|
"name", G_TYPE_STRING, servicename_tmp,
|
||||||
"provider-name", G_TYPE_STRING, serviceprovider_name_tmp,
|
"provider-name", G_TYPE_STRING, serviceprovider_name_tmp,
|
||||||
"scrambled", G_TYPE_BOOLEAN, scrambled, NULL);
|
"scrambled", G_TYPE_BOOLEAN, scrambled,
|
||||||
|
"running-status", G_TYPE_STRING, running_status_tmp, NULL);
|
||||||
|
|
||||||
g_free (servicename_tmp);
|
g_free (servicename_tmp);
|
||||||
g_free (serviceprovider_name_tmp);
|
g_free (serviceprovider_name_tmp);
|
||||||
|
|
Loading…
Reference in a new issue