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 ); }
/***************************************************************************** * main *****************************************************************************/ int main(int i_argc, char* pa_argv[]) { int i_fd; uint8_t data[188]; dvbpsi_t *p_dvbpsi; bool b_ok; if (i_argc != 2) return 1; i_fd = open(pa_argv[1], 0); if (i_fd < 0) return 1; p_dvbpsi = dvbpsi_new(&message, DVBPSI_MSG_DEBUG); if (p_dvbpsi == NULL) goto out; if (!dvbpsi_pat_attach(p_dvbpsi, DumpPAT, NULL)) goto out; b_ok = ReadPacket(i_fd, data); while(b_ok) { uint16_t i_pid = ((uint16_t)(data[1] & 0x1f) << 8) + data[2]; if(i_pid == 0x0) dvbpsi_packet_push(p_dvbpsi, data); b_ok = ReadPacket(i_fd, data); } out: if (p_dvbpsi) { dvbpsi_pat_detach(p_dvbpsi); dvbpsi_delete(p_dvbpsi); } close(i_fd); return 0; }