/***************************************************************************** * dvbpsi_pat_detach ***************************************************************************** * Close a PAT decoder. The handle isn't valid any more. *****************************************************************************/ void dvbpsi_pat_detach(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_extension) { assert(p_dvbpsi); dvbpsi_pat_decoder_t *p_pat_decoder = (dvbpsi_pat_decoder_t*) dvbpsi_decoder_chain_get(p_dvbpsi, i_table_id, i_extension); if (!p_pat_decoder) { dvbpsi_error(p_dvbpsi, "PAT Decoder", "No such PAT decoder (table_id == 0x%02x," "extension == 0x%02x)", i_table_id, i_extension); return; } /* Remove table decoder from chain */ if (!dvbpsi_decoder_chain_remove(p_dvbpsi, DVBPSI_DECODER(p_pat_decoder))) { dvbpsi_error(p_dvbpsi, "PAT Decoder", "Failed to remove" "extension == 0x%02x)", i_table_id, i_extension); return; } if (p_pat_decoder->p_building_pat) dvbpsi_pat_delete(p_pat_decoder->p_building_pat); p_pat_decoder->p_building_pat = NULL; dvbpsi_decoder_delete(DVBPSI_DECODER(p_pat_decoder)); p_pat_decoder = NULL; }
/***************************************************************************** * dvbpsi_pat_detach ***************************************************************************** * Close a PAT decoder. The handle isn't valid any more. *****************************************************************************/ void dvbpsi_pat_detach( dvbpsi_t *p_dvbpsi ) { assert( p_dvbpsi ); assert( p_dvbpsi->p_decoder ); dvbpsi_pat_decoder_t* p_pat_decoder = (dvbpsi_pat_decoder_t *) p_dvbpsi->p_decoder; if ( p_pat_decoder->p_building_pat ) dvbpsi_pat_delete( p_pat_decoder->p_building_pat ); p_pat_decoder->p_building_pat = NULL; dvbpsi_decoder_delete( p_dvbpsi->p_decoder ); p_dvbpsi->p_decoder = NULL; }
static void dvbpsi_ReInitPAT( dvbpsi_pat_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_pat ) dvbpsi_pat_delete( p_decoder->p_building_pat ); } p_decoder->p_building_pat = NULL; }
/***************************************************************************** * DumpPAT *****************************************************************************/ static void DumpPAT(void* p_zero, dvbpsi_pat_t* p_pat) { dvbpsi_pat_program_t* p_program = p_pat->p_first_program; printf( "\n"); printf( "New PAT\n"); printf( " transport_stream_id : %d\n", p_pat->i_ts_id); printf( " version_number : %d\n", p_pat->i_version); printf( " | program_number @ [NIT|PMT]_PID\n"); while(p_program) { printf(" | %14d @ 0x%x (%d)\n", p_program->i_number, p_program->i_pid, p_program->i_pid); p_program = p_program->p_next; } printf( " active : %d\n", p_pat->b_current_next); dvbpsi_pat_delete(p_pat); }