void ts_si_Del( demux_t *p_demux, ts_si_t *si ) { if( dvbpsi_decoder_present( si->handle ) ) dvbpsi_DetachDemux( si->handle ); dvbpsi_delete( si->handle ); if( si->eitpid ) PIDRelease( p_demux, si->eitpid ); if( si->tdtpid ) PIDRelease( p_demux, si->tdtpid ); free( si ); }
void ts_pat_Del( demux_t *p_demux, ts_pat_t *pat ) { if( dvbpsi_decoder_present( pat->handle ) ) dvbpsi_pat_detach( pat->handle ); dvbpsi_delete( pat->handle ); for( int i=0; i<pat->programs.i_size; i++ ) PIDRelease( p_demux, pat->programs.p_elems[i] ); ARRAY_RESET( pat->programs ); free( pat ); }
void ts_pmt_Del( demux_t *p_demux, ts_pmt_t *pmt ) { if( dvbpsi_decoder_present( pmt->handle ) ) dvbpsi_pmt_detach( pmt->handle ); dvbpsi_delete( pmt->handle ); for( int i=0; i<pmt->e_streams.i_size; i++ ) PIDRelease( p_demux, pmt->e_streams.p_elems[i] ); ARRAY_RESET( pmt->e_streams ); if( pmt->p_mgt ) PIDRelease( p_demux, pmt->p_mgt ); if( pmt->iod ) ODFree( pmt->iod ); for( int i=0; i<pmt->od.objects.i_size; i++ ) ODFree( pmt->od.objects.p_elems[i] ); ARRAY_RESET( pmt->od.objects ); if( pmt->i_number > -1 ) es_out_Control( p_demux->out, ES_OUT_DEL_GROUP, pmt->i_number ); free( pmt ); }
void ts_psip_Del( demux_t *p_demux, ts_psip_t *psip ) { if( psip->p_ctx ) ts_psip_context_Delete( psip->p_ctx ); ts_pes_ChainDelete_es( p_demux, psip->p_eas_es ); if( psip->handle ) { ATSC_Detach_Dvbpsi_Decoders( psip->handle ); dvbpsi_delete( psip->handle ); } for( int i=0; i<psip->eit.i_size; i++ ) PIDRelease( p_demux, psip->eit.p_elems[i] ); ARRAY_RESET( psip->eit ); free( psip ); }