static void dvb_base_bin_pad_added_cb (GstElement * mpegtsparse, GstPad * pad, DvbBaseBin * dvbbasebin) { DvbBaseBinProgram *program; gint program_number; gchar *padname; program_number = get_pad_program_number (pad); if (program_number == -1) return; program = dvb_base_bin_get_program (dvbbasebin, program_number); if (program == NULL) program = dvb_base_bin_add_program (dvbbasebin, program_number); program->selected = TRUE; padname = gst_pad_get_name (pad); program->ghost = gst_ghost_pad_new (padname, pad); gst_pad_set_active (program->ghost, TRUE); gst_element_add_pad (GST_ELEMENT (dvbbasebin), program->ghost); gst_element_no_more_pads (GST_ELEMENT (dvbbasebin)); /* if the program has a pmt, activate it now, otherwise it will get activated * when there's a PMT */ if (!program->active && program->pmt_pid != G_MAXUINT16) dvb_base_bin_activate_program (dvbbasebin, program); g_free (padname); }
static void dvb_base_bin_pad_removed_cb (GstElement * mpegtsparse, GstPad * pad, DvbBaseBin * dvbbasebin) { DvbBaseBinProgram *program; gint program_number; program_number = get_pad_program_number (pad); if (program_number == -1) return; program = dvb_base_bin_get_program (dvbbasebin, program_number); program->selected = FALSE; dvb_base_bin_deactivate_program (dvbbasebin, program); gst_element_remove_pad (GST_ELEMENT (dvbbasebin), program->ghost); program->ghost = NULL; }