static void dvb_base_bin_handle_message (GstBin * bin, GstMessage * message) { DvbBaseBin *dvbbasebin; dvbbasebin = GST_DVB_BASE_BIN (bin); /* note: message->src might be a GstPad, so use element cast w/o typecheck */ if (GST_ELEMENT_CAST (message->src) == dvbbasebin->tsparse) { GstMpegtsSection *section = gst_message_parse_mpegts_section (message); if (section) { switch (GST_MPEGTS_SECTION_TYPE (section)) { case GST_MPEGTS_SECTION_PAT: dvb_base_bin_pat_info_cb (dvbbasebin, section); break; case GST_MPEGTS_SECTION_PMT: dvb_base_bin_pmt_info_cb (dvbbasebin, section); break; default: break; } gst_mpegts_section_unref (section); } } /* chain up */ GST_BIN_CLASS (parent_class)->handle_message (bin, message); }
static void _on_bus_message (GstBus * bus, GstMessage * message, GMainLoop * mainloop) { /* g_printf ("Got message %s\n", GST_MESSAGE_TYPE_NAME (message)); */ switch (GST_MESSAGE_TYPE (message)) { case GST_MESSAGE_ERROR: case GST_MESSAGE_EOS: g_main_loop_quit (mainloop); break; case GST_MESSAGE_ELEMENT: { GstMpegTsSection *section; if ((section = gst_message_parse_mpegts_section (message))) { g_print ("Got section: PID:0x%04x type:%s (table_id 0x%02x (%s)) at offset %" G_GUINT64_FORMAT "\n", section->pid, enum_name (GST_TYPE_MPEG_TS_SECTION_TYPE, section->section_type), section->table_id, enum_name (GST_TYPE_MPEG_TS_SECTION_TABLE_ID, section->table_id), section->offset); if (!section->short_section) { g_print (" subtable_extension:0x%04x, version_number:0x%02x\n", section->subtable_extension, section->version_number); g_print (" section_number:0x%02x last_section_number:0x%02x crc:0x%08x\n", section->section_number, section->last_section_number, section->crc); } dump_section (section); g_printf ("\n\n"); gst_mpegts_section_unref (section); } break; } default: break; } }