/***************************************************************************** * 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_ReInitETT * *****************************************************************************/ static void dvbpsi_ReInitETT(dvbpsi_atsc_ett_decoder_t *p_decoder, const bool b_force) { assert(p_decoder); dvbpsi_decoder_reset(DVBPSI_DECODER(p_decoder), b_force); /* Force redecoding */ if (b_force) { /* Free structures */ if (p_decoder->p_building_ett) dvbpsi_atsc_DeleteETT(p_decoder->p_building_ett); } p_decoder->p_building_ett = NULL; }
void ts_psip_context_Delete( ts_psip_context_t *p_ctx ) { assert( !p_ctx->p_mgt || !p_ctx->etts.i_size ); assert( !p_ctx->p_vct || !p_ctx->eits.i_size ); if( p_ctx->p_mgt ) dvbpsi_atsc_DeleteMGT( p_ctx->p_mgt ); if( p_ctx->p_stt ) dvbpsi_atsc_DeleteSTT( p_ctx->p_stt ); if ( p_ctx->p_vct ) dvbpsi_atsc_DeleteVCT( p_ctx->p_vct ); if( p_ctx->p_a65 ) atsc_a65_handle_Release( p_ctx->p_a65 ); /* Things only used for ETT/EIT */ for( int i=0; i<p_ctx->etts.i_size; i++ ) dvbpsi_atsc_DeleteETT( p_ctx->etts.p_elems[i] ); for( int i=0; i<p_ctx->eits.i_size; i++ ) dvbpsi_atsc_DeleteEIT( p_ctx->eits.p_elems[i] ); ARRAY_RESET( p_ctx->etts ); ARRAY_RESET( p_ctx->eits ); free( p_ctx ); }