示例#1
0
文件: pat.c 项目: mwgoldsmith/dvbpsi
/*****************************************************************************
 * 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;
}
示例#2
0
/*****************************************************************************
* 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;
}
示例#3
0
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;
}
示例#4
0
/*****************************************************************************
 * 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);
}