Commit f7380f22 authored by Jean-Paul Saman's avatar Jean-Paul Saman

dvbinfo: use chained decoders iso of old demux API

parent d6e0e5c6
...@@ -47,8 +47,8 @@ ...@@ -47,8 +47,8 @@
/* The libdvbpsi distribution defines DVBPSI_DIST */ /* The libdvbpsi distribution defines DVBPSI_DIST */
#ifdef DVBPSI_DIST #ifdef DVBPSI_DIST
# include "../../src/dvbpsi.h" # include "../../src/dvbpsi.h"
# include "../../src/demux.h"
# include "../../src/psi.h" # include "../../src/psi.h"
# include "../../src/chain.h"
# include "../../src/descriptor.h" # include "../../src/descriptor.h"
# include "../../src/tables/pat.h" # include "../../src/tables/pat.h"
# include "../../src/tables/pmt.h" # include "../../src/tables/pmt.h"
...@@ -68,8 +68,8 @@ ...@@ -68,8 +68,8 @@
# include "../../src/tables/atsc_vct.h" # include "../../src/tables/atsc_vct.h"
#else #else
# include <dvbpsi/dvbpsi.h> # include <dvbpsi/dvbpsi.h>
# include <dvbpsi/demux.h>
# include <dvbpsi/psi.h> # include <dvbpsi/psi.h>
# include <dvbpsi/chain.h>
# include <dvbpsi/descriptor.h> # include <dvbpsi/descriptor.h>
# include <dvbpsi/pat.h> # include <dvbpsi/pat.h>
# include <dvbpsi/pmt.h> # include <dvbpsi/pmt.h>
...@@ -285,7 +285,7 @@ struct ts_stream_t ...@@ -285,7 +285,7 @@ struct ts_stream_t
/***************************************************************************** /*****************************************************************************
* Local prototypes * Local prototypes
*****************************************************************************/ *****************************************************************************/
static void handle_PAT(void* p_data, dvbpsi_pat_t* p_pat);
static void handle_PMT(void* p_data, dvbpsi_pmt_t* p_pmt); static void handle_PMT(void* p_data, dvbpsi_pmt_t* p_pmt);
static void handle_CAT(void* p_data, dvbpsi_cat_t* p_cat); static void handle_CAT(void* p_data, dvbpsi_cat_t* p_cat);
static void handle_SDT(void* p_data, dvbpsi_sdt_t* p_sdt); static void handle_SDT(void* p_data, dvbpsi_sdt_t* p_sdt);
...@@ -304,6 +304,8 @@ static void handle_atsc_ETT(void* p_data, dvbpsi_atsc_ett_t *p_ett); ...@@ -304,6 +304,8 @@ static void handle_atsc_ETT(void* p_data, dvbpsi_atsc_ett_t *p_ett);
static void handle_atsc_STT(void* p_data, dvbpsi_atsc_stt_t *p_stt); static void handle_atsc_STT(void* p_data, dvbpsi_atsc_stt_t *p_stt);
static const char *AACProfileToString(dvbpsi_aac_profile_and_level_t profile); static const char *AACProfileToString(dvbpsi_aac_profile_and_level_t profile);
static void DeleteTableDecoder(dvbpsi_t *p_dvbpsi, uint8_t i_table, uint16_t i_extension);
/***************************************************************************** /*****************************************************************************
* mdate: current time in milliseconds * mdate: current time in milliseconds
*****************************************************************************/ *****************************************************************************/
...@@ -592,9 +594,15 @@ static void handle_subtable(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_e ...@@ -592,9 +594,15 @@ static void handle_subtable(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_e
{ {
switch (i_table_id) switch (i_table_id)
{ {
#if 0 /* already handled */
case 0x00: // PAT case 0x00: // PAT
if (!dvbpsi_pat_attach(p_dvbpsi, i_table_id, i_extension, handle_PAT, p_data))
fprintf(stderr, "dvbinfo: Failed to attach PAT decoder\n");
break;
case 0x01: // CAT case 0x01: // CAT
if (!dvbpsi_cat_attach(p_dvbpsi, i_table_id, i_extension, handle_CAT, p_data))
fprintf(stderr, "dvbinfo: Failed to attach CAT decoder\n");
break;
#if 0 /* already handled */
case 0x02: // program_map_section case 0x02: // program_map_section
case 0x03: // transport_stream_description_section case 0x03: // transport_stream_description_section
case 0x04: /* ISO_IEC_14496_scene_description_section */ case 0x04: /* ISO_IEC_14496_scene_description_section */
...@@ -666,8 +674,11 @@ static void handle_subtable(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_e ...@@ -666,8 +674,11 @@ static void handle_subtable(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_e
if (!dvbpsi_tot_attach(p_dvbpsi, i_table_id, i_extension, handle_TOT, p_data)) if (!dvbpsi_tot_attach(p_dvbpsi, i_table_id, i_extension, handle_TOT, p_data))
fprintf(stderr, "dvbinfo: Failed to attach TOT subdecoder\n"); fprintf(stderr, "dvbinfo: Failed to attach TOT subdecoder\n");
break; break;
#if 0
case 0x71: // RST running_status_section case 0x71: // RST running_status_section
if (!dvbpsi_rst_attach(p_dvbpsi, i_table_id, i_extension, handle_RST, p_data))
fprintf(stderr, "dvbinfo: Failed to attach RST subdecoder\n");
break;
#if 0
case 0x72: // ST stuffing_section case 0x72: // ST stuffing_section
case 0x74: // application information section (TS 102 812 [15]) case 0x74: // application information section (TS 102 812 [15])
case 0x75: // container section (TS 102 323 [13]) case 0x75: // container section (TS 102 323 [13])
...@@ -747,7 +758,9 @@ static void handle_PAT(void* p_data, dvbpsi_pat_t* p_pat) ...@@ -747,7 +758,9 @@ static void handle_PAT(void* p_data, dvbpsi_pat_t* p_pat)
p_pmt->pid_pmt->i_pid = p_program->i_pid; p_pmt->pid_pmt->i_pid = p_program->i_pid;
p_pmt->p_next = NULL; p_pmt->p_next = NULL;
if (!dvbpsi_pmt_attach(p_pmt->handle, p_program->i_number, handle_PMT, p_stream)) /* PMT table_id == 0x02 and extenion == 0x0 */
if (!dvbpsi_pmt_attach(p_pmt->handle, 0x02, 0x0,
p_program->i_number, handle_PMT, p_stream))
{ {
fprintf(stderr, "dvbinfo: Failed to attach new pmt decoder\n"); fprintf(stderr, "dvbinfo: Failed to attach new pmt decoder\n");
dvbpsi_delete(p_pmt->handle); dvbpsi_delete(p_pmt->handle);
...@@ -1937,7 +1950,7 @@ static void handle_atsc_MGT(void *p_data, dvbpsi_atsc_mgt_t *p_mgt) ...@@ -1937,7 +1950,7 @@ static void handle_atsc_MGT(void *p_data, dvbpsi_atsc_mgt_t *p_mgt)
p->pid->i_pid = p_table->i_table_type_pid; p->pid->i_pid = p_table->i_table_type_pid;
p->p_next = NULL; p->p_next = NULL;
if (!dvbpsi_AttachDemux(p->handle, handle_subtable, p_stream)) if (!dvbpsi_decoder_chain_new(p->handle, handle_subtable, DeleteTableDecoder, p_stream))
{ {
fprintf(stderr, "dvbinfo: Failed to attach new ATSC EIT decoder\n"); fprintf(stderr, "dvbinfo: Failed to attach new ATSC EIT decoder\n");
dvbpsi_delete(p->handle); dvbpsi_delete(p->handle);
...@@ -2282,6 +2295,99 @@ static void handle_CAT(void *p_data, dvbpsi_cat_t *p_cat) ...@@ -2282,6 +2295,99 @@ static void handle_CAT(void *p_data, dvbpsi_cat_t *p_cat)
dvbpsi_cat_delete(p_cat); dvbpsi_cat_delete(p_cat);
} }
/*****************************************************************************
* Delete decoder from chain
*****************************************************************************/
static void DeleteTableDecoder(dvbpsi_t *p_dvbpsi, uint8_t i_table, uint16_t i_extension)
{
switch (i_table)
{
case 0x00: dvbpsi_pat_detach(p_dvbpsi, i_table, i_extension); break;
case 0x01: dvbpsi_cat_detach(p_dvbpsi, i_table, i_extension); break;
#if 0 /* already handled */
case 0x02: // program_map_section
case 0x03: // transport_stream_description_section
case 0x04: /* ISO_IEC_14496_scene_description_section */
case 0x05: /* ISO_IEC_14496_object_descriptor_section */
case 0x06: /* Metadata_section */
case 0x07: /* IPMP_Control_Information_section (defined in ISO/IEC 13818-11) */
/* 0x08-0x3F: ITU-T Rec. H.222.0 | ISO/IEC 13818-1 reserved */
#endif
case 0x40: // NIT network_information_section - actual_network
case 0x41: dvbpsi_nit_detach(p_dvbpsi, i_table, i_extension); break; // NIT network_information_section - other_network
case 0x42: dvbpsi_sdt_detach(p_dvbpsi, i_table, i_extension); break;
#if 0
/* 0x43 to 0x45 reserved for future use */
case 0x46: // service_description_section - other_transport_stream
/* 0x47 to 0x49 reserved for future use */
#endif
case 0x4A: dvbpsi_bat_detach(p_dvbpsi, i_table, i_extension); break; // BAT bouquet_association_section
//0x4B to 0x4D reserved for future use
case 0x4E: // EIT event_information_section - actual_transport_stream, present/following
case 0x4F: // EIT event_information_section - other_transport_stream, present/following
//0x50 to 0x5F event_information_section - actual_transport_stream, schedule
case 0x50:
case 0x51:
case 0x52:
case 0x53:
case 0x54:
case 0x55:
case 0x56:
case 0x57:
case 0x58:
case 0x59:
case 0x5A:
case 0x5B:
case 0x5C:
case 0x5D:
case 0x5E:
case 0x5F:
//0x60 to 0x6F event_information_section - other_transport_stream, schedule
case 0x60:
case 0x61:
case 0x62:
case 0x63:
case 0x64:
case 0x65:
case 0x66:
case 0x67:
case 0x68:
case 0x69:
case 0x6A:
case 0x6B:
case 0x6C:
case 0x6D:
case 0x6E:
case 0x6F: dvbpsi_eit_detach(p_dvbpsi, i_table, i_extension); break;
case 0x70: /* TDT */
case 0x73: dvbpsi_tot_detach(p_dvbpsi, i_table, i_extension); break; /* TOT only */
case 0x71: dvbpsi_rst_detach(p_dvbpsi, i_table, i_extension); break; /* RST running_status_section */
#if 0
case 0x72: // ST stuffing_section
case 0x74: // application information section (TS 102 812 [15])
case 0x75: // container section (TS 102 323 [13])
case 0x76: // related content section (TS 102 323 [13])
case 0x77: // content identifier section (TS 102 323 [13])
case 0x78: // MPE-FEC section (EN 301 192 [4])
case 0x79: // resolution notification section (TS 102 323 [13])
#endif
/* Handle ATSC PSI tables */
case 0xC7: dvbpsi_atsc_DetachMGT(p_dvbpsi, i_table, i_extension); break; /* ATSC MGT */
case 0xC8: /* ATSC VCT */
case 0xC9: dvbpsi_atsc_DetachVCT(p_dvbpsi, i_table, i_extension); break; /* ATSC VCT */
case 0xCB: dvbpsi_atsc_DetachEIT(p_dvbpsi, i_table, i_extension); break; /* ATSC EIT */
case 0xCC: dvbpsi_atsc_DetachETT(p_dvbpsi, i_table, i_extension); break; /* ATSC ETT */
case 0xCD: dvbpsi_atsc_DetachSTT(p_dvbpsi, i_table, i_extension); break; /* ATSC STT */
#ifdef TS_USE_SCTE_SIS
case 0xFC: dvbpsi_sis_detach(p_dvbpsi, i_table, i_extension); break; /* SIS */
#endif
default:
fprintf(stderr, "dvbinfo: Failed to detach table decoder (table_id: %d, extension: %d)\n",
i_table, i_extension);
break;
}
}
/***************************************************************************** /*****************************************************************************
* Public API * Public API
*****************************************************************************/ *****************************************************************************/
...@@ -2310,7 +2416,7 @@ ts_stream_t *libdvbpsi_init(int debug, ts_stream_log_cb pf_log, void *cb_data) ...@@ -2310,7 +2416,7 @@ ts_stream_t *libdvbpsi_init(int debug, ts_stream_log_cb pf_log, void *cb_data)
stream->pat.handle = dvbpsi_new(&dvbpsi_message, stream->level); stream->pat.handle = dvbpsi_new(&dvbpsi_message, stream->level);
if (stream->pat.handle == NULL) if (stream->pat.handle == NULL)
goto error; goto error;
if (!dvbpsi_pat_attach(stream->pat.handle, handle_PAT, stream)) if (!dvbpsi_decoder_chain_new(stream->pat.handle, handle_subtable, DeleteTableDecoder, stream))
{ {
dvbpsi_delete(stream->pat.handle); dvbpsi_delete(stream->pat.handle);
stream->pat.handle = NULL; stream->pat.handle = NULL;
...@@ -2320,7 +2426,7 @@ ts_stream_t *libdvbpsi_init(int debug, ts_stream_log_cb pf_log, void *cb_data) ...@@ -2320,7 +2426,7 @@ ts_stream_t *libdvbpsi_init(int debug, ts_stream_log_cb pf_log, void *cb_data)
stream->cat.handle = dvbpsi_new(&dvbpsi_message, stream->level); stream->cat.handle = dvbpsi_new(&dvbpsi_message, stream->level);
if (stream->cat.handle == NULL) if (stream->cat.handle == NULL)
goto error; goto error;
if (!dvbpsi_cat_attach(stream->cat.handle, handle_CAT, stream)) if (!dvbpsi_decoder_chain_new(stream->cat.handle, handle_subtable, DeleteTableDecoder, stream))
{ {
dvbpsi_delete(stream->cat.handle); dvbpsi_delete(stream->cat.handle);
stream->cat.handle = NULL; stream->cat.handle = NULL;
...@@ -2330,7 +2436,7 @@ ts_stream_t *libdvbpsi_init(int debug, ts_stream_log_cb pf_log, void *cb_data) ...@@ -2330,7 +2436,7 @@ ts_stream_t *libdvbpsi_init(int debug, ts_stream_log_cb pf_log, void *cb_data)
stream->sdt.handle = dvbpsi_new(&dvbpsi_message, stream->level); stream->sdt.handle = dvbpsi_new(&dvbpsi_message, stream->level);
if (stream->sdt.handle == NULL) if (stream->sdt.handle == NULL)
goto error; goto error;
if (!dvbpsi_AttachDemux(stream->sdt.handle, handle_subtable, stream)) if (!dvbpsi_decoder_chain_new(stream->sdt.handle, handle_subtable, DeleteTableDecoder, stream))
{ {
dvbpsi_delete(stream->sdt.handle); dvbpsi_delete(stream->sdt.handle);
stream->sdt.handle = NULL; stream->sdt.handle = NULL;
...@@ -2340,7 +2446,7 @@ ts_stream_t *libdvbpsi_init(int debug, ts_stream_log_cb pf_log, void *cb_data) ...@@ -2340,7 +2446,7 @@ ts_stream_t *libdvbpsi_init(int debug, ts_stream_log_cb pf_log, void *cb_data)
stream->rst.handle = dvbpsi_new(&dvbpsi_message, stream->level); stream->rst.handle = dvbpsi_new(&dvbpsi_message, stream->level);
if (stream->rst.handle == NULL) if (stream->rst.handle == NULL)
goto error; goto error;
if (!dvbpsi_rst_attach(stream->rst.handle, handle_RST, stream)) if (!dvbpsi_decoder_chain_new(stream->rst.handle, handle_subtable, DeleteTableDecoder, stream))
{ {
dvbpsi_delete(stream->rst.handle); dvbpsi_delete(stream->rst.handle);
stream->rst.handle = NULL; stream->rst.handle = NULL;
...@@ -2350,7 +2456,7 @@ ts_stream_t *libdvbpsi_init(int debug, ts_stream_log_cb pf_log, void *cb_data) ...@@ -2350,7 +2456,7 @@ ts_stream_t *libdvbpsi_init(int debug, ts_stream_log_cb pf_log, void *cb_data)
stream->eit.handle = dvbpsi_new(&dvbpsi_message, stream->level); stream->eit.handle = dvbpsi_new(&dvbpsi_message, stream->level);
if (stream->eit.handle == NULL) if (stream->eit.handle == NULL)
goto error; goto error;
if (!dvbpsi_AttachDemux(stream->eit.handle, handle_subtable, stream)) if (!dvbpsi_decoder_chain_new(stream->eit.handle, handle_subtable, DeleteTableDecoder, stream))
{ {
dvbpsi_delete(stream->eit.handle); dvbpsi_delete(stream->eit.handle);
stream->eit.handle = NULL; stream->eit.handle = NULL;
...@@ -2360,7 +2466,7 @@ ts_stream_t *libdvbpsi_init(int debug, ts_stream_log_cb pf_log, void *cb_data) ...@@ -2360,7 +2466,7 @@ ts_stream_t *libdvbpsi_init(int debug, ts_stream_log_cb pf_log, void *cb_data)
stream->tdt.handle = dvbpsi_new(&dvbpsi_message, stream->level); stream->tdt.handle = dvbpsi_new(&dvbpsi_message, stream->level);
if (stream->tdt.handle == NULL) if (stream->tdt.handle == NULL)
goto error; goto error;
if (!dvbpsi_AttachDemux(stream->tdt.handle, handle_subtable, stream)) if (!dvbpsi_decoder_chain_new(stream->tdt.handle, handle_subtable, DeleteTableDecoder, stream))
{ {
dvbpsi_delete(stream->tdt.handle); dvbpsi_delete(stream->tdt.handle);
stream->tdt.handle = NULL; stream->tdt.handle = NULL;
...@@ -2371,7 +2477,7 @@ ts_stream_t *libdvbpsi_init(int debug, ts_stream_log_cb pf_log, void *cb_data) ...@@ -2371,7 +2477,7 @@ ts_stream_t *libdvbpsi_init(int debug, ts_stream_log_cb pf_log, void *cb_data)
stream->atsc.handle = dvbpsi_new(&dvbpsi_message, stream->level); stream->atsc.handle = dvbpsi_new(&dvbpsi_message, stream->level);
if (stream->atsc.handle == NULL) if (stream->atsc.handle == NULL)
goto error; goto error;
if (!dvbpsi_AttachDemux(stream->atsc.handle, handle_subtable, stream)) if (!dvbpsi_decoder_chain_new(stream->atsc.handle, handle_subtable, DeleteTableDecoder, stream))
{ {
dvbpsi_delete(stream->atsc.handle); dvbpsi_delete(stream->atsc.handle);
stream->atsc.handle = NULL; stream->atsc.handle = NULL;
...@@ -2393,20 +2499,20 @@ ts_stream_t *libdvbpsi_init(int debug, ts_stream_log_cb pf_log, void *cb_data) ...@@ -2393,20 +2499,20 @@ ts_stream_t *libdvbpsi_init(int debug, ts_stream_log_cb pf_log, void *cb_data)
return stream; return stream;
error: error:
if (dvbpsi_decoder_present(stream->pat.handle)) if (dvbpsi_decoder_chain_delete(stream->pat.handle))
dvbpsi_pat_detach(stream->pat.handle); fprintf(stderr, "dvbinfo: failed to delete PAT decoder chain! .. possibly leaking memory!!\n");
if (dvbpsi_decoder_present(stream->cat.handle)) if (dvbpsi_decoder_chain_delete(stream->cat.handle))
dvbpsi_cat_detach(stream->cat.handle); fprintf(stderr, "dvbinfo: failed to delete CAT decoder chain! .. possibly leaking memory!!\n");
if (dvbpsi_decoder_present(stream->sdt.handle)) if (dvbpsi_decoder_chain_delete(stream->sdt.handle))
dvbpsi_DetachDemux(stream->sdt.handle); fprintf(stderr, "dvbinfo: failed to delete SDT decoder chain! .. possibly leaking memory!!\n");
if (dvbpsi_decoder_present(stream->eit.handle)) if (dvbpsi_decoder_chain_delete(stream->eit.handle))
dvbpsi_DetachDemux(stream->eit.handle); fprintf(stderr, "dvbinfo: failed to delete EIT decoder chain! .. possibly leaking memory!!\n");
if (dvbpsi_decoder_present(stream->rst.handle)) if (dvbpsi_decoder_chain_delete(stream->rst.handle))
dvbpsi_rst_detach(stream->rst.handle); fprintf(stderr, "dvbinfo: failed to delete RST decoder chain! .. possibly leaking memory!!\n");
if (dvbpsi_decoder_present(stream->tdt.handle)) if (dvbpsi_decoder_chain_delete(stream->tdt.handle))
dvbpsi_DetachDemux(stream->tdt.handle); fprintf(stderr, "dvbinfo: failed to delete TDT decoder chain! .. possibly leaking memory!!\n");
if (dvbpsi_decoder_present(stream->atsc.handle)) if (dvbpsi_decoder_chain_delete(stream->atsc.handle))
dvbpsi_DetachDemux(stream->atsc.handle); fprintf(stderr, "dvbinfo: failed to delete ATSC decoder chain! .. possibly leaking memory!!\n");
if (stream->pat.handle) if (stream->pat.handle)
dvbpsi_delete(stream->pat.handle); dvbpsi_delete(stream->pat.handle);
...@@ -2432,19 +2538,18 @@ void libdvbpsi_exit(ts_stream_t *stream) ...@@ -2432,19 +2538,18 @@ void libdvbpsi_exit(ts_stream_t *stream)
{ {
summary(stdout, stream); summary(stdout, stream);
if (dvbpsi_decoder_present(stream->pat.handle)) if (dvbpsi_decoder_chain_delete(stream->pat.handle))
dvbpsi_pat_detach(stream->pat.handle); fprintf(stderr, "dvbinfo: failed to delete PAT decoder chain! .. possibly leaking memory!!\n");
ts_pmt_t *p_pmt = stream->pmt; ts_pmt_t *p_pmt = stream->pmt;
ts_pmt_t *p_prev = NULL; ts_pmt_t *p_prev = NULL;
while (p_pmt) while (p_pmt)
{ {
dvbpsi_t *handle = p_pmt->handle; dvbpsi_t *handle = p_pmt->handle;
if (dvbpsi_decoder_present(handle)) if (!dvbpsi_decoder_chain_delete(handle))
{ fprintf(stderr, "dvbinfo: failed to delete PMT decoder chain! .. possibly leaking memory!!\n");
dvbpsi_pmt_detach(handle);
dvbpsi_delete(p_pmt->handle); dvbpsi_delete(p_pmt->handle);
}
stream->i_pmt--; stream->i_pmt--;
p_prev = p_pmt; p_prev = p_pmt;
p_pmt = p_pmt->p_next; p_pmt = p_pmt->p_next;
...@@ -2458,11 +2563,10 @@ void libdvbpsi_exit(ts_stream_t *stream) ...@@ -2458,11 +2563,10 @@ void libdvbpsi_exit(ts_stream_t *stream)
while (p_atsc_eit) while (p_atsc_eit)
{ {
dvbpsi_t *handle = p_atsc_eit->handle; dvbpsi_t *handle = p_atsc_eit->handle;
if (dvbpsi_decoder_present(handle)) if (!dvbpsi_decoder_chain_delete(handle))
{ fprintf(stderr, "dvbinfo: failed to delete EIT decoder chain! .. possibly leaking memory!!\n");
dvbpsi_DetachDemux(handle);
dvbpsi_delete(p_atsc_eit->handle); dvbpsi_delete(p_atsc_eit->handle);
}
stream->i_atsc_eit--; stream->i_atsc_eit--;
p_atsc_prev = p_atsc_eit; p_atsc_prev = p_atsc_eit;
p_atsc_eit = p_atsc_eit->p_next; p_atsc_eit = p_atsc_eit->p_next;
...@@ -2471,18 +2575,18 @@ void libdvbpsi_exit(ts_stream_t *stream) ...@@ -2471,18 +2575,18 @@ void libdvbpsi_exit(ts_stream_t *stream)
free(p_atsc_prev); free(p_atsc_prev);
} }
if (dvbpsi_decoder_present(stream->cat.handle)) if (dvbpsi_decoder_chain_delete(stream->cat.handle))
dvbpsi_cat_detach(stream->cat.handle); fprintf(stderr, "dvbinfo: failed to delete CAT decoder chain! .. possibly leaking memory!!\n");
if (dvbpsi_decoder_present(stream->sdt.handle)) if (dvbpsi_decoder_chain_delete(stream->sdt.handle))
dvbpsi_DetachDemux(stream->sdt.handle); fprintf(stderr, "dvbinfo: failed to delete SDT decoder chain! .. possibly leaking memory!!\n");
if (dvbpsi_decoder_present(stream->rst.handle)) if (dvbpsi_decoder_chain_delete(stream->eit.handle))
dvbpsi_rst_detach(stream->rst.handle); fprintf(stderr, "dvbinfo: failed to delete EIT decoder chain! .. possibly leaking memory!!\n");
if (dvbpsi_decoder_present(stream->eit.handle)) if (dvbpsi_decoder_chain_delete(stream->rst.handle))
dvbpsi_DetachDemux(stream->eit.handle); fprintf(stderr, "dvbinfo: failed to delete RST decoder chain! .. possibly leaking memory!!\n");
if (dvbpsi_decoder_present(stream->tdt.handle)) if (dvbpsi_decoder_chain_delete(stream->tdt.handle))
dvbpsi_DetachDemux(stream->tdt.handle); fprintf(stderr, "dvbinfo: failed to delete TDT decoder chain! .. possibly leaking memory!!\n");
if (dvbpsi_decoder_present(stream->atsc.handle)) if (dvbpsi_decoder_chain_delete(stream->atsc.handle))
dvbpsi_DetachDemux(stream->atsc.handle); fprintf(stderr, "dvbinfo: failed to delete ATSC decoder chain! .. possibly leaking memory!!\n");
if (stream->pat.handle) if (stream->pat.handle)
dvbpsi_delete(stream->pat.handle); dvbpsi_delete(stream->pat.handle);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment