static void dump_section (GstMpegTsSection * section) { switch (GST_MPEGTS_SECTION_TYPE (section)) { case GST_MPEGTS_SECTION_PAT: dump_pat (section); break; case GST_MPEGTS_SECTION_PMT: dump_pmt (section); break; case GST_MPEGTS_SECTION_TDT: dump_tdt (section); break; case GST_MPEGTS_SECTION_TOT: dump_tot (section); break; case GST_MPEGTS_SECTION_SDT: dump_sdt (section); break; case GST_MPEGTS_SECTION_NIT: dump_nit (section); break; case GST_MPEGTS_SECTION_BAT: dump_bat (section); break; case GST_MPEGTS_SECTION_EIT: dump_eit (section); break; default: g_printf (" Unknown section type\n"); break; } }
void parse_table (GstMpegtsSection * section, void* data) { ATS_METADATA* metadata; metadata = (ATS_METADATA*)data; g_type_class_ref (GST_TYPE_MPEGTS_SECTION_TYPE); g_type_class_ref (GST_TYPE_MPEGTS_SECTION_TABLE_ID); g_type_class_ref (GST_TYPE_MPEGTS_RUNNING_STATUS); g_type_class_ref (GST_TYPE_MPEGTS_DESCRIPTOR_TYPE); g_type_class_ref (GST_TYPE_MPEGTS_DVB_DESCRIPTOR_TYPE); g_type_class_ref (GST_TYPE_MPEGTS_ATSC_DESCRIPTOR_TYPE); g_type_class_ref (GST_TYPE_MPEGTS_ISDB_DESCRIPTOR_TYPE); g_type_class_ref (GST_TYPE_MPEGTS_MISC_DESCRIPTOR_TYPE); g_type_class_ref (GST_TYPE_MPEGTS_ISO639_AUDIO_TYPE); g_type_class_ref (GST_TYPE_MPEGTS_DVB_SERVICE_TYPE); g_type_class_ref (GST_TYPE_MPEGTS_DVB_TELETEXT_TYPE); g_type_class_ref (GST_TYPE_MPEGTS_STREAM_TYPE); g_type_class_ref (GST_TYPE_MPEGTS_SECTION_DVB_TABLE_ID); g_type_class_ref (GST_TYPE_MPEGTS_SECTION_ATSC_TABLE_ID); g_type_class_ref (GST_TYPE_MPEGTS_SECTION_SCTE_TABLE_ID); g_type_class_ref (GST_TYPE_MPEGTS_MODULATION_TYPE); g_type_class_ref (GST_TYPE_MPEGTS_DVB_CODE_RATE); g_type_class_ref (GST_TYPE_MPEGTS_CABLE_OUTER_FEC_SCHEME); g_type_class_ref (GST_TYPE_MPEGTS_TERRESTRIAL_TRANSMISSION_MODE); g_type_class_ref (GST_TYPE_MPEGTS_TERRESTRIAL_GUARD_INTERVAL); g_type_class_ref (GST_TYPE_MPEGTS_TERRESTRIAL_HIERARCHY); g_type_class_ref (GST_TYPE_MPEGTS_DVB_LINKAGE_TYPE); g_type_class_ref (GST_TYPE_MPEGTS_DVB_LINKAGE_HAND_OVER_TYPE); g_type_class_ref (GST_TYPE_MPEGTS_COMPONENT_STREAM_CONTENT); g_type_class_ref (GST_TYPE_MPEGTS_CONTENT_NIBBLE_HI); switch (GST_MPEGTS_SECTION_TYPE (section)) { case GST_MPEGTS_SECTION_PAT: dump_pat (section, metadata); break; case GST_MPEGTS_SECTION_PMT: dump_pmt(section, data); break; case GST_MPEGTS_SECTION_SDT: dump_sdt (section, metadata); break; default: break; } }
/** * called when new section arrives. */ static gboolean _iface_mdw_demux_data_handler_new_data ( MdwDemuxDataHandler *self, const guint16 pid, const gsize size, const guint8* data) { g_assert( (CONVERT_8_TO_16(data[1], data[2]) & 0x0fff) == (size - 3)); /* only one fuction per time (thread safe)*/ static GStaticMutex mutex = G_STATIC_MUTEX_INIT; g_static_mutex_lock (&mutex); #define TABLE_ID data[0] g_printf("********NEW DUMP********\n"); g_printf("PID: %u 0x%04X\n", pid, pid); g_printf("PACKET SIZE: %u\n", (guint) size); g_printf("\n"); g_printf("table id: %u 0x%02X (%s)\n", TABLE_ID, TABLE_ID, table_id_to_name(TABLE_ID)); g_printf("syntax indication: %u\n", (data[1] & 0x80)?1:0); g_printf("private indication: %u\n", (data[1] & 0x40)?1:0); g_printf("reserved: %u\n", (data[1] & 0x30) >> 4); g_printf("section lenght: %u\n", CONVERT_8_TO_16(data[1],data[2]) & 0x0fff); #define PAT_ID 0x00 #define PMT_ID 0x02 switch (TABLE_ID) { case PAT_ID: dump_pat(data, size); break; case PMT_ID: dump_pmt(data, size); break; default: dump_generic(data, size); break; } g_printf("********END DUMP********\n"); g_static_mutex_unlock (&mutex); return TRUE; }