mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-22 00:06:36 +00:00
gst/mpegtsparse/: Parsed the satellite delivery system descriptor and added into nit's transport structure for delive...
Original commit message from CVS: * gst/mpegtsparse/gstmpegdesc.h: * gst/mpegtsparse/mpegtspacketizer.c: Parsed the satellite delivery system descriptor and added into nit's transport structure for delivery over the bus.
This commit is contained in:
parent
450442adae
commit
457fd5e1af
3 changed files with 146 additions and 2 deletions
|
@ -1,3 +1,11 @@
|
|||
2008-01-23 Zaheer Abbas Merali <zaheerabbas at merali dot org>
|
||||
|
||||
* gst/mpegtsparse/gstmpegdesc.h:
|
||||
* gst/mpegtsparse/mpegtspacketizer.c:
|
||||
Parsed the satellite delivery system descriptor and
|
||||
added into nit's transport structure for delivery
|
||||
over the bus.
|
||||
|
||||
2008-01-22 Zaheer Abbas Merali <zaheerabbas at merali dot org>
|
||||
|
||||
* gst/mpegtsparse/mpegtspacketizer.c:
|
||||
|
|
|
@ -265,6 +265,15 @@
|
|||
#define DESC_DVB_SHORT_EVENT_description_text(desc) (desc + 6 + DESC_DVB_SHORT_EVENT_name_length(desc) + 1)
|
||||
#define DESC_DVB_SHORT_EVENT_description_length(desc) (desc[6 + DESC_DVB_SHORT_EVENT_name_length(desc)])
|
||||
|
||||
/* DVB Satellite Delivery System Descriptor */
|
||||
#define DESC_DVB_SATELLITE_DELIVERY_SYSTEM_frequency(desc) (desc + 2)
|
||||
#define DESC_DVB_SATELLITE_DELIVERY_SYSTEM_orbital_position(desc) (desc + 6)
|
||||
#define DESC_DVB_SATELLITE_DELIVERY_SYSTEM_west_east_flag(desc) ((desc[8] & 0x80) == 0x80)
|
||||
#define DESC_DVB_SATELLITE_DELIVERY_SYSTEM_polarization(desc) ((desc[8] & 0x60) >> 5)
|
||||
#define DESC_DVB_SATELLITE_DELIVERY_SYSTEM_modulation(desc) (desc[8] & 0x1F)
|
||||
#define DESC_DVB_SATELLITE_DELIVERY_SYSTEM_symbol_rate(desc) (desc + 9)
|
||||
#define DESC_DVB_SATELLITE_DELIVERY_SYSTEM_fec_inner(desc) (desc[12] & 0x0F)
|
||||
|
||||
typedef struct {
|
||||
guint n_desc;
|
||||
guint8 data_length;
|
||||
|
|
|
@ -548,7 +548,7 @@ GstStructure *
|
|||
mpegts_packetizer_parse_nit (MpegTSPacketizer * packetizer,
|
||||
MpegTSPacketizerSection * section)
|
||||
{
|
||||
GstStructure *nit = NULL, *transport = NULL;
|
||||
GstStructure *nit = NULL, *transport = NULL, *satellite = NULL;
|
||||
guint8 *data, *end, *entry_begin;
|
||||
guint16 network_id, transport_stream_id, original_network_id;
|
||||
guint tmp;
|
||||
|
@ -626,7 +626,6 @@ mpegts_packetizer_parse_nit (MpegTSPacketizer * packetizer,
|
|||
NULL);
|
||||
g_free (networkname_tmp);
|
||||
}
|
||||
|
||||
gst_mpeg_descriptor_free (mpegdescriptor);
|
||||
|
||||
descriptors = g_value_array_new (0);
|
||||
|
@ -681,6 +680,134 @@ mpegts_packetizer_parse_nit (MpegTSPacketizer * packetizer,
|
|||
gst_structure_free (transport);
|
||||
goto error;
|
||||
}
|
||||
GstMPEGDescriptor *mpegdescriptor =
|
||||
gst_mpeg_descriptor_parse (data, descriptors_loop_length);
|
||||
guint8 *satellitedelivery;
|
||||
|
||||
if ((satellitedelivery =
|
||||
gst_mpeg_descriptor_find (mpegdescriptor,
|
||||
DESC_DVB_SATELLITE_DELIVERY_SYSTEM))) {
|
||||
|
||||
guint8 *frequency_bcd =
|
||||
DESC_DVB_SATELLITE_DELIVERY_SYSTEM_frequency (satellitedelivery);
|
||||
guint32 frequency =
|
||||
10 * ((frequency_bcd[3] & 0x0F) +
|
||||
10 * ((frequency_bcd[3] & 0xF0) >> 4) +
|
||||
100 * (frequency_bcd[2] & 0x0F) +
|
||||
1000 * ((frequency_bcd[2] & 0xF0) >> 4) +
|
||||
10000 * (frequency_bcd[1] & 0x0F) +
|
||||
100000 * ((frequency_bcd[1] & 0xF0) >> 4) +
|
||||
1000000 * (frequency_bcd[0] & 0x0F) +
|
||||
10000000 * ((frequency_bcd[0] & 0xF0) >> 4));
|
||||
guint8 *orbital_bcd =
|
||||
DESC_DVB_SATELLITE_DELIVERY_SYSTEM_orbital_position
|
||||
(satellitedelivery);
|
||||
gfloat orbital =
|
||||
(orbital_bcd[1] & 0x0F) / 10. + ((orbital_bcd[1] & 0xF0) >> 4) +
|
||||
10 * (orbital_bcd[0] & 0x0F) + 100 * ((orbital_bcd[0] & 0xF0) >> 4);
|
||||
gboolean east =
|
||||
DESC_DVB_SATELLITE_DELIVERY_SYSTEM_west_east_flag
|
||||
(satellitedelivery);
|
||||
guint8 polarization =
|
||||
DESC_DVB_SATELLITE_DELIVERY_SYSTEM_polarization (satellitedelivery);
|
||||
gchar *polarization_str;
|
||||
guint8 modulation =
|
||||
DESC_DVB_SATELLITE_DELIVERY_SYSTEM_modulation (satellitedelivery);
|
||||
gchar *modulation_str;
|
||||
guint8 *symbol_rate_bcd =
|
||||
DESC_DVB_SATELLITE_DELIVERY_SYSTEM_symbol_rate (satellitedelivery);
|
||||
guint32 symbol_rate =
|
||||
(symbol_rate_bcd[2] & 0x0F) +
|
||||
10 * ((symbol_rate_bcd[2] & 0xF0) >> 4) +
|
||||
100 * (symbol_rate_bcd[1] & 0x0F) +
|
||||
1000 * ((symbol_rate_bcd[1] & 0xF0) >> 4) +
|
||||
10000 * (symbol_rate_bcd[0] & 0x0F) +
|
||||
100000 * ((symbol_rate_bcd[0] & 0xF0) >> 4);
|
||||
guint8 fec_inner =
|
||||
DESC_DVB_SATELLITE_DELIVERY_SYSTEM_fec_inner (satellitedelivery);
|
||||
gchar *fec_inner_str;
|
||||
|
||||
switch (polarization) {
|
||||
case 0:
|
||||
polarization_str = g_strdup ("horizontal");
|
||||
break;
|
||||
case 1:
|
||||
polarization_str = g_strdup ("vertical");
|
||||
break;
|
||||
case 2:
|
||||
polarization_str = g_strdup ("left");
|
||||
break;
|
||||
case 3:
|
||||
polarization_str = g_strdup ("right");
|
||||
break;
|
||||
default:
|
||||
polarization_str = g_strdup ("");
|
||||
}
|
||||
switch (fec_inner) {
|
||||
case 0:
|
||||
fec_inner_str = g_strdup ("undefined");
|
||||
break;
|
||||
case 1:
|
||||
fec_inner_str = g_strdup ("1/2");
|
||||
break;
|
||||
case 2:
|
||||
fec_inner_str = g_strdup ("2/3");
|
||||
break;
|
||||
case 3:
|
||||
fec_inner_str = g_strdup ("3/4");
|
||||
break;
|
||||
case 4:
|
||||
fec_inner_str = g_strdup ("5/6");
|
||||
break;
|
||||
case 5:
|
||||
fec_inner_str = g_strdup ("7/8");
|
||||
break;
|
||||
case 6:
|
||||
fec_inner_str = g_strdup ("8/9");
|
||||
break;
|
||||
case 0xF:
|
||||
fec_inner_str = g_strdup ("none");
|
||||
break;
|
||||
default:
|
||||
fec_inner_str = g_strdup ("reserved");
|
||||
}
|
||||
switch (modulation) {
|
||||
case 0x00:
|
||||
modulation_str = g_strdup ("undefined");
|
||||
break;
|
||||
case 0x01:
|
||||
modulation_str = g_strdup ("QAM16");
|
||||
break;
|
||||
case 0x02:
|
||||
modulation_str = g_strdup ("QAM32");
|
||||
break;
|
||||
case 0x03:
|
||||
modulation_str = g_strdup ("QAM64");
|
||||
break;
|
||||
case 0x04:
|
||||
modulation_str = g_strdup ("QAM128");
|
||||
break;
|
||||
case 0x05:
|
||||
modulation_str = g_strdup ("QAM256");
|
||||
break;
|
||||
default:
|
||||
modulation_str = g_strdup ("reserved");
|
||||
}
|
||||
satellite = gst_structure_new ("satellite",
|
||||
"orbital", G_TYPE_FLOAT, orbital,
|
||||
"east-or-west", G_TYPE_STRING, east ? "east" : "west",
|
||||
"modulation", G_TYPE_STRING, modulation_str,
|
||||
"frequency", G_TYPE_UINT, frequency,
|
||||
"polarization", G_TYPE_STRING, polarization_str,
|
||||
"symbol-rate", G_TYPE_UINT, symbol_rate,
|
||||
"inner-fec", G_TYPE_STRING, fec_inner_str, NULL);
|
||||
g_free (polarization_str);
|
||||
g_free (fec_inner_str);
|
||||
g_free (modulation_str);
|
||||
gst_structure_set (transport, "satellite", GST_TYPE_STRUCTURE,
|
||||
satellite, NULL);
|
||||
}
|
||||
gst_mpeg_descriptor_free (mpegdescriptor);
|
||||
|
||||
descriptors = g_value_array_new (0);
|
||||
if (!mpegts_packetizer_parse_descriptors (packetizer,
|
||||
|
|
Loading…
Reference in a new issue