/***************************************************************************** * dvbpsi_tot_detach ***************************************************************************** * Close a TDT/TOT decoder. *****************************************************************************/ void dvbpsi_tot_detach(dvbpsi_t* p_dvbpsi, uint8_t i_table_id, uint16_t i_extension) { assert(p_dvbpsi); assert(p_dvbpsi->p_decoder); dvbpsi_demux_t *p_demux = (dvbpsi_demux_t *)p_dvbpsi->p_decoder; dvbpsi_demux_subdec_t* p_subdec; i_extension = 0; /* NOTE: force to 0 when handling TDT/TOT */ p_subdec = dvbpsi_demuxGetSubDec(p_demux, i_table_id, i_extension); if (p_demux == NULL) { dvbpsi_error(p_dvbpsi, "TDT/TOT Decoder", "No such TDT/TOT decoder (table_id == 0x%02x," "extension == 0x%02x)", i_table_id, i_extension); return; } assert(p_subdec->p_decoder); dvbpsi_tot_decoder_t* p_tot_decoder; p_tot_decoder = (dvbpsi_tot_decoder_t*)p_subdec->p_decoder; if (p_tot_decoder->p_building_tot) dvbpsi_tot_delete(p_tot_decoder->p_building_tot); p_tot_decoder->p_building_tot = NULL; dvbpsi_DetachDemuxSubDecoder(p_demux, p_subdec); dvbpsi_DeleteDemuxSubDecoder(p_subdec); }
/***************************************************************************** * dvbpsi_nit_detach ***************************************************************************** * Close a NIT decoder. *****************************************************************************/ void dvbpsi_nit_detach(dvbpsi_t * p_dvbpsi, uint8_t i_table_id, uint16_t i_extension) { dvbpsi_demux_t *p_demux = (dvbpsi_demux_t *) p_dvbpsi->p_decoder; dvbpsi_demux_subdec_t* p_subdec; p_subdec = dvbpsi_demuxGetSubDec(p_demux, i_table_id, i_extension); if (p_subdec == NULL) { dvbpsi_error(p_dvbpsi, "NIT Decoder", "No such NIT decoder (table_id == 0x%02x," "extension == 0x%02x)", i_table_id, i_extension); return; } dvbpsi_nit_decoder_t* p_nit_decoder; p_nit_decoder = (dvbpsi_nit_decoder_t*)p_subdec->p_decoder; if (p_nit_decoder->p_building_nit) dvbpsi_nit_delete(p_nit_decoder->p_building_nit); p_nit_decoder->p_building_nit = NULL; /* Free demux sub table decoder */ dvbpsi_DetachDemuxSubDecoder(p_demux, p_subdec); dvbpsi_DeleteDemuxSubDecoder(p_subdec); }
/***************************************************************************** * dvbpsi_atsc_DetachETT ***************************************************************************** * Close a ETT decoder. The handle isn't valid any more. *****************************************************************************/ void dvbpsi_atsc_DetachETT(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_extension) { assert(p_dvbpsi); assert(p_dvbpsi->p_decoder); dvbpsi_demux_t *p_demux = (dvbpsi_demux_t *) p_dvbpsi->p_decoder; dvbpsi_demux_subdec_t* p_subdec; p_subdec = dvbpsi_demuxGetSubDec(p_demux, i_table_id, i_extension); if (p_subdec == NULL) { dvbpsi_error(p_dvbpsi, "ATSC ETT Decoder", "No such ETT decoder (table_id == 0x%02x," "extension == 0x%04x)", i_table_id, i_extension); return; } dvbpsi_atsc_ett_decoder_t* p_ett_decoder; p_ett_decoder = (dvbpsi_atsc_ett_decoder_t*)p_subdec->p_decoder; if (!p_ett_decoder) return; if (p_ett_decoder->p_building_ett) dvbpsi_atsc_DeleteETT(p_ett_decoder->p_building_ett); p_ett_decoder->p_building_ett = NULL; dvbpsi_DetachDemuxSubDecoder(p_demux, p_subdec); dvbpsi_DeleteDemuxSubDecoder(p_subdec); }
/***************************************************************************** * dvbpsi_sis_detach ***************************************************************************** * Close a SIS decoder. *****************************************************************************/ void dvbpsi_sis_detach(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_extension) { assert(p_dvbpsi); assert(p_dvbpsi->p_decoder); dvbpsi_demux_t *p_demux = (dvbpsi_demux_t *) p_dvbpsi->p_decoder; i_extension = 0; dvbpsi_demux_subdec_t* p_subdec; p_subdec = dvbpsi_demuxGetSubDec(p_demux, i_table_id, i_extension); if (p_demux == NULL) { dvbpsi_error(p_dvbpsi, "SIS Decoder", "No such SIS decoder (table_id == 0x%02x," "extension == 0x%02x)", i_table_id, i_extension); return; } assert(p_subdec->p_decoder); dvbpsi_sis_decoder_t* p_sis_decoder; p_sis_decoder = (dvbpsi_sis_decoder_t*)p_subdec->p_decoder; if (p_sis_decoder->p_building_sis) dvbpsi_sis_delete(p_sis_decoder->p_building_sis); p_sis_decoder->p_building_sis = NULL; dvbpsi_DetachDemuxSubDecoder(p_demux, p_subdec); dvbpsi_DeleteDemuxSubDecoder(p_subdec); }