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

ATSC tables fix bugs

- check for subdec instead of demux when calling dvbpsi_demuxGetSubDec() function
- check if subtable decoder pointer actually exist
parent 1e596176
...@@ -88,7 +88,6 @@ int dvbpsi_atsc_AttachEIT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id, ...@@ -88,7 +88,6 @@ int dvbpsi_atsc_AttachEIT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id,
DVBPSI_ERROR_ARG("EIT decoder", DVBPSI_ERROR_ARG("EIT decoder",
"Already a decoder for (table_id == 0x%02x extension == 0x%04x)", "Already a decoder for (table_id == 0x%02x extension == 0x%04x)",
i_table_id, i_extension); i_table_id, i_extension);
return 1; return 1;
} }
...@@ -99,7 +98,6 @@ int dvbpsi_atsc_AttachEIT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id, ...@@ -99,7 +98,6 @@ int dvbpsi_atsc_AttachEIT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id,
} }
p_eit_decoder = (dvbpsi_atsc_eit_decoder_t*)malloc(sizeof(dvbpsi_atsc_eit_decoder_t)); p_eit_decoder = (dvbpsi_atsc_eit_decoder_t*)malloc(sizeof(dvbpsi_atsc_eit_decoder_t));
if(p_eit_decoder == NULL) if(p_eit_decoder == NULL)
{ {
free(p_subdec); free(p_subdec);
...@@ -128,7 +126,6 @@ int dvbpsi_atsc_AttachEIT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id, ...@@ -128,7 +126,6 @@ int dvbpsi_atsc_AttachEIT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id,
return 0; return 0;
} }
/***************************************************************************** /*****************************************************************************
* dvbpsi_atsc_DetachEIT * dvbpsi_atsc_DetachEIT
***************************************************************************** *****************************************************************************
...@@ -140,11 +137,8 @@ void dvbpsi_atsc_DetachEIT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_ ...@@ -140,11 +137,8 @@ void dvbpsi_atsc_DetachEIT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_
dvbpsi_demux_subdec_t** pp_prev_subdec; dvbpsi_demux_subdec_t** pp_prev_subdec;
dvbpsi_atsc_eit_decoder_t* p_eit_decoder; dvbpsi_atsc_eit_decoder_t* p_eit_decoder;
unsigned int i;
p_subdec = dvbpsi_demuxGetSubDec(p_demux, i_table_id, i_extension); p_subdec = dvbpsi_demuxGetSubDec(p_demux, i_table_id, i_extension);
if(p_subdec == NULL)
if(p_demux == NULL)
{ {
DVBPSI_ERROR_ARG("EIT Decoder", DVBPSI_ERROR_ARG("EIT Decoder",
"No such EIT decoder (table_id == 0x%02x," "No such EIT decoder (table_id == 0x%02x,"
...@@ -154,12 +148,13 @@ void dvbpsi_atsc_DetachEIT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_ ...@@ -154,12 +148,13 @@ void dvbpsi_atsc_DetachEIT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_
} }
p_eit_decoder = (dvbpsi_atsc_eit_decoder_t*)p_subdec->p_cb_data; p_eit_decoder = (dvbpsi_atsc_eit_decoder_t*)p_subdec->p_cb_data;
if (!p_eit_decoder)
return;
if (p_eit_decoder->p_building_eit) if (p_eit_decoder->p_building_eit)
{ free(p_eit_decoder->p_building_eit);
free(p_eit_decoder->p_building_eit);
}
for(i = 0; i <= 255; i++) for(unsigned int i = 0; i <= 255; i++)
{ {
if(p_eit_decoder->ap_sections[i]) if(p_eit_decoder->ap_sections[i])
dvbpsi_DeletePSISections(p_eit_decoder->ap_sections[i]); dvbpsi_DeletePSISections(p_eit_decoder->ap_sections[i]);
...@@ -175,14 +170,13 @@ void dvbpsi_atsc_DetachEIT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_ ...@@ -175,14 +170,13 @@ void dvbpsi_atsc_DetachEIT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_
free(p_subdec); free(p_subdec);
} }
/***************************************************************************** /*****************************************************************************
* dvbpsi_atsc_InitEIT * dvbpsi_atsc_InitEIT
***************************************************************************** *****************************************************************************
* Initialize a pre-allocated dvbpsi_atsc_eit_t structure. * Initialize a pre-allocated dvbpsi_atsc_eit_t structure.
*****************************************************************************/ *****************************************************************************/
void dvbpsi_atsc_InitEIT(dvbpsi_atsc_eit_t* p_eit,uint8_t i_version, int b_current_next, void dvbpsi_atsc_InitEIT(dvbpsi_atsc_eit_t* p_eit,uint8_t i_version, int b_current_next,
uint8_t i_protocol, uint16_t i_source_id) uint8_t i_protocol, uint16_t i_source_id)
{ {
p_eit->i_version = i_version; p_eit->i_version = i_version;
p_eit->b_current_next = b_current_next; p_eit->b_current_next = b_current_next;
...@@ -191,7 +185,6 @@ void dvbpsi_atsc_InitEIT(dvbpsi_atsc_eit_t* p_eit,uint8_t i_version, int b_curre ...@@ -191,7 +185,6 @@ void dvbpsi_atsc_InitEIT(dvbpsi_atsc_eit_t* p_eit,uint8_t i_version, int b_curre
p_eit->p_first_event = NULL; p_eit->p_first_event = NULL;
} }
/***************************************************************************** /*****************************************************************************
* dvbpsi_atsc_EmptyEIT * dvbpsi_atsc_EmptyEIT
***************************************************************************** *****************************************************************************
...@@ -226,7 +219,6 @@ dvbpsi_atsc_eit_event_t *dvbpsi_atsc_EITAddEvent(dvbpsi_atsc_eit_t* p_eit, ...@@ -226,7 +219,6 @@ dvbpsi_atsc_eit_event_t *dvbpsi_atsc_EITAddEvent(dvbpsi_atsc_eit_t* p_eit,
{ {
dvbpsi_atsc_eit_event_t * p_event dvbpsi_atsc_eit_event_t * p_event
= (dvbpsi_atsc_eit_event_t*)malloc(sizeof(dvbpsi_atsc_eit_event_t)); = (dvbpsi_atsc_eit_event_t*)malloc(sizeof(dvbpsi_atsc_eit_event_t));
if(p_event) if(p_event)
{ {
p_event->i_event_id = i_event_id; p_event->i_event_id = i_event_id;
...@@ -256,7 +248,6 @@ dvbpsi_atsc_eit_event_t *dvbpsi_atsc_EITAddEvent(dvbpsi_atsc_eit_t* p_eit, ...@@ -256,7 +248,6 @@ dvbpsi_atsc_eit_event_t *dvbpsi_atsc_EITAddEvent(dvbpsi_atsc_eit_t* p_eit,
return p_event; return p_event;
} }
/***************************************************************************** /*****************************************************************************
* dvbpsi_EITTableAddDescriptor * dvbpsi_EITTableAddDescriptor
***************************************************************************** *****************************************************************************
...@@ -288,7 +279,6 @@ dvbpsi_descriptor_t *dvbpsi_atsc_EITChannelAddDescriptor( ...@@ -288,7 +279,6 @@ dvbpsi_descriptor_t *dvbpsi_atsc_EITChannelAddDescriptor(
return p_descriptor; return p_descriptor;
} }
/***************************************************************************** /*****************************************************************************
* dvbpsi_atsc_GatherEITSections * dvbpsi_atsc_GatherEITSections
***************************************************************************** *****************************************************************************
...@@ -531,5 +521,3 @@ void dvbpsi_atsc_DecodeEITSections(dvbpsi_atsc_eit_t* p_eit, ...@@ -531,5 +521,3 @@ void dvbpsi_atsc_DecodeEITSections(dvbpsi_atsc_eit_t* p_eit,
p_section = p_section->p_next; p_section = p_section->p_next;
} }
} }
...@@ -37,7 +37,6 @@ Decode PSIP Extended Text Table. ...@@ -37,7 +37,6 @@ Decode PSIP Extended Text Table.
***************************************************************************** *****************************************************************************
* ETM Version information. * ETM Version information.
*****************************************************************************/ *****************************************************************************/
typedef struct dvbpsi_atsc_ett_etm_version_s typedef struct dvbpsi_atsc_ett_etm_version_s
{ {
uint32_t i_etm_id; uint32_t i_etm_id;
...@@ -90,7 +89,6 @@ int dvbpsi_atsc_AttachETT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id, ...@@ -90,7 +89,6 @@ int dvbpsi_atsc_AttachETT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id,
DVBPSI_ERROR_ARG("ETT decoder", DVBPSI_ERROR_ARG("ETT decoder",
"Already a decoder for (table_id == 0x%02x extension == 0x%04x)", "Already a decoder for (table_id == 0x%02x extension == 0x%04x)",
i_table_id, i_extension); i_table_id, i_extension);
return 1; return 1;
} }
...@@ -101,7 +99,6 @@ int dvbpsi_atsc_AttachETT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id, ...@@ -101,7 +99,6 @@ int dvbpsi_atsc_AttachETT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id,
} }
p_ett_decoder = (dvbpsi_atsc_ett_decoder_t*)malloc(sizeof(dvbpsi_atsc_ett_decoder_t)); p_ett_decoder = (dvbpsi_atsc_ett_decoder_t*)malloc(sizeof(dvbpsi_atsc_ett_decoder_t));
if(p_ett_decoder == NULL) if(p_ett_decoder == NULL)
{ {
free(p_subdec); free(p_subdec);
...@@ -126,7 +123,6 @@ int dvbpsi_atsc_AttachETT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id, ...@@ -126,7 +123,6 @@ int dvbpsi_atsc_AttachETT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id,
return 0; return 0;
} }
/***************************************************************************** /*****************************************************************************
* dvbpsi_atsc_DetachETT * dvbpsi_atsc_DetachETT
***************************************************************************** *****************************************************************************
...@@ -137,9 +133,9 @@ void dvbpsi_atsc_DetachETT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_ ...@@ -137,9 +133,9 @@ void dvbpsi_atsc_DetachETT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_
dvbpsi_demux_subdec_t* p_subdec; dvbpsi_demux_subdec_t* p_subdec;
dvbpsi_demux_subdec_t** pp_prev_subdec; dvbpsi_demux_subdec_t** pp_prev_subdec;
dvbpsi_atsc_ett_decoder_t* p_ett_decoder; dvbpsi_atsc_ett_decoder_t* p_ett_decoder;
p_subdec = dvbpsi_demuxGetSubDec(p_demux, i_table_id, i_extension);
if(p_demux == NULL) p_subdec = dvbpsi_demuxGetSubDec(p_demux, i_table_id, i_extension);
if(p_subdec == NULL)
{ {
DVBPSI_ERROR_ARG("ETT Decoder", DVBPSI_ERROR_ARG("ETT Decoder",
"No such ETT decoder (table_id == 0x%02x," "No such ETT decoder (table_id == 0x%02x,"
...@@ -149,6 +145,9 @@ void dvbpsi_atsc_DetachETT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_ ...@@ -149,6 +145,9 @@ void dvbpsi_atsc_DetachETT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_
} }
p_ett_decoder = (dvbpsi_atsc_ett_decoder_t*)p_subdec->p_cb_data; p_ett_decoder = (dvbpsi_atsc_ett_decoder_t*)p_subdec->p_cb_data;
if(!p_ett_decoder)
return;
dvbpsi_atsc_ett_etm_version_t *p_etm_version, *p_next; dvbpsi_atsc_ett_etm_version_t *p_etm_version, *p_next;
for (p_etm_version = p_ett_decoder->p_etm_versions; p_etm_version; p_etm_version = p_next) for (p_etm_version = p_ett_decoder->p_etm_versions; p_etm_version; p_etm_version = p_next)
{ {
...@@ -166,7 +165,6 @@ void dvbpsi_atsc_DetachETT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_ ...@@ -166,7 +165,6 @@ void dvbpsi_atsc_DetachETT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_
free(p_subdec); free(p_subdec);
} }
/***************************************************************************** /*****************************************************************************
* dvbpsi_atsc_InitETT * dvbpsi_atsc_InitETT
***************************************************************************** *****************************************************************************
...@@ -219,6 +217,8 @@ void dvbpsi_atsc_GatherETTSections(dvbpsi_decoder_t* p_psi_decoder, ...@@ -219,6 +217,8 @@ void dvbpsi_atsc_GatherETTSections(dvbpsi_decoder_t* p_psi_decoder,
{ {
dvbpsi_atsc_ett_decoder_t* p_ett_decoder dvbpsi_atsc_ett_decoder_t* p_ett_decoder
= (dvbpsi_atsc_ett_decoder_t*)p_private_decoder; = (dvbpsi_atsc_ett_decoder_t*)p_private_decoder;
if(!p_ett_decoder)
return;
if(p_section->i_table_id == 0xCC) if(p_section->i_table_id == 0xCC)
{ {
...@@ -262,7 +262,6 @@ void dvbpsi_atsc_GatherETTSections(dvbpsi_decoder_t* p_psi_decoder, ...@@ -262,7 +262,6 @@ void dvbpsi_atsc_GatherETTSections(dvbpsi_decoder_t* p_psi_decoder,
dvbpsi_DeletePSISections(p_section); dvbpsi_DeletePSISections(p_section);
} }
/***************************************************************************** /*****************************************************************************
* dvbpsi_atsc_DecodeETTSection * dvbpsi_atsc_DecodeETTSection
***************************************************************************** *****************************************************************************
......
...@@ -102,7 +102,6 @@ int dvbpsi_atsc_AttachMGT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id, ...@@ -102,7 +102,6 @@ int dvbpsi_atsc_AttachMGT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id,
} }
p_mgt_decoder = (dvbpsi_atsc_mgt_decoder_t*)malloc(sizeof(dvbpsi_atsc_mgt_decoder_t)); p_mgt_decoder = (dvbpsi_atsc_mgt_decoder_t*)malloc(sizeof(dvbpsi_atsc_mgt_decoder_t));
if(p_mgt_decoder == NULL) if(p_mgt_decoder == NULL)
{ {
free(p_subdec); free(p_subdec);
...@@ -131,7 +130,6 @@ int dvbpsi_atsc_AttachMGT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id, ...@@ -131,7 +130,6 @@ int dvbpsi_atsc_AttachMGT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id,
return 0; return 0;
} }
/***************************************************************************** /*****************************************************************************
* dvbpsi_atsc_DetachMGT * dvbpsi_atsc_DetachMGT
***************************************************************************** *****************************************************************************
...@@ -146,8 +144,7 @@ void dvbpsi_atsc_DetachMGT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_ ...@@ -146,8 +144,7 @@ void dvbpsi_atsc_DetachMGT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_
unsigned int i; unsigned int i;
p_subdec = dvbpsi_demuxGetSubDec(p_demux, i_table_id, i_extension); p_subdec = dvbpsi_demuxGetSubDec(p_demux, i_table_id, i_extension);
if(p_subdec == NULL)
if(p_demux == NULL)
{ {
DVBPSI_ERROR_ARG("MGT Decoder", DVBPSI_ERROR_ARG("MGT Decoder",
"No such MGT decoder (table_id == 0x%02x," "No such MGT decoder (table_id == 0x%02x,"
...@@ -157,6 +154,9 @@ void dvbpsi_atsc_DetachMGT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_ ...@@ -157,6 +154,9 @@ void dvbpsi_atsc_DetachMGT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_
} }
p_mgt_decoder = (dvbpsi_atsc_mgt_decoder_t*)p_subdec->p_cb_data; p_mgt_decoder = (dvbpsi_atsc_mgt_decoder_t*)p_subdec->p_cb_data;
if(!p_mgt_decoder)
return;
if (p_mgt_decoder->p_building_mgt) if (p_mgt_decoder->p_building_mgt)
{ {
free(p_mgt_decoder->p_building_mgt); free(p_mgt_decoder->p_building_mgt);
...@@ -178,7 +178,6 @@ void dvbpsi_atsc_DetachMGT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_ ...@@ -178,7 +178,6 @@ void dvbpsi_atsc_DetachMGT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_
free(p_subdec); free(p_subdec);
} }
/***************************************************************************** /*****************************************************************************
* dvbpsi_atsc_InitMGT * dvbpsi_atsc_InitMGT
***************************************************************************** *****************************************************************************
...@@ -195,7 +194,6 @@ void dvbpsi_atsc_InitMGT(dvbpsi_atsc_mgt_t* p_mgt,uint8_t i_version, int b_curre ...@@ -195,7 +194,6 @@ void dvbpsi_atsc_InitMGT(dvbpsi_atsc_mgt_t* p_mgt,uint8_t i_version, int b_curre
p_mgt->p_first_descriptor = NULL; p_mgt->p_first_descriptor = NULL;
} }
/***************************************************************************** /*****************************************************************************
* dvbpsi_atsc_EmptyMGT * dvbpsi_atsc_EmptyMGT
***************************************************************************** *****************************************************************************
...@@ -229,7 +227,6 @@ dvbpsi_descriptor_t *dvbpsi_atsc_MGTAddDescriptor( ...@@ -229,7 +227,6 @@ dvbpsi_descriptor_t *dvbpsi_atsc_MGTAddDescriptor(
{ {
dvbpsi_descriptor_t * p_descriptor dvbpsi_descriptor_t * p_descriptor
= dvbpsi_NewDescriptor(i_tag, i_length, p_data); = dvbpsi_NewDescriptor(i_tag, i_length, p_data);
if(p_descriptor) if(p_descriptor)
{ {
if(p_mgt->p_first_descriptor == NULL) if(p_mgt->p_first_descriptor == NULL)
...@@ -260,7 +257,6 @@ dvbpsi_atsc_mgt_table_t *dvbpsi_atsc_MGTAddTable(dvbpsi_atsc_mgt_t* p_mgt, ...@@ -260,7 +257,6 @@ dvbpsi_atsc_mgt_table_t *dvbpsi_atsc_MGTAddTable(dvbpsi_atsc_mgt_t* p_mgt,
{ {
dvbpsi_atsc_mgt_table_t * p_table dvbpsi_atsc_mgt_table_t * p_table
= (dvbpsi_atsc_mgt_table_t*)malloc(sizeof(dvbpsi_atsc_mgt_table_t)); = (dvbpsi_atsc_mgt_table_t*)malloc(sizeof(dvbpsi_atsc_mgt_table_t));
if(p_table) if(p_table)
{ {
p_table->i_table_type = i_table_type; p_table->i_table_type = i_table_type;
...@@ -287,7 +283,6 @@ dvbpsi_atsc_mgt_table_t *dvbpsi_atsc_MGTAddTable(dvbpsi_atsc_mgt_t* p_mgt, ...@@ -287,7 +283,6 @@ dvbpsi_atsc_mgt_table_t *dvbpsi_atsc_MGTAddTable(dvbpsi_atsc_mgt_t* p_mgt,
return p_table; return p_table;
} }
/***************************************************************************** /*****************************************************************************
* dvbpsi_MGTTableAddDescriptor * dvbpsi_MGTTableAddDescriptor
***************************************************************************** *****************************************************************************
...@@ -300,7 +295,6 @@ dvbpsi_descriptor_t *dvbpsi_atsc_MGTTableAddDescriptor( ...@@ -300,7 +295,6 @@ dvbpsi_descriptor_t *dvbpsi_atsc_MGTTableAddDescriptor(
{ {
dvbpsi_descriptor_t * p_descriptor dvbpsi_descriptor_t * p_descriptor
= dvbpsi_NewDescriptor(i_tag, i_length, p_data); = dvbpsi_NewDescriptor(i_tag, i_length, p_data);
if(p_descriptor) if(p_descriptor)
{ {
if(p_table->p_first_descriptor == NULL) if(p_table->p_first_descriptor == NULL)
...@@ -319,7 +313,6 @@ dvbpsi_descriptor_t *dvbpsi_atsc_MGTTableAddDescriptor( ...@@ -319,7 +313,6 @@ dvbpsi_descriptor_t *dvbpsi_atsc_MGTTableAddDescriptor(
return p_descriptor; return p_descriptor;
} }
/***************************************************************************** /*****************************************************************************
* dvbpsi_atsc_GatherMGTSections * dvbpsi_atsc_GatherMGTSections
***************************************************************************** *****************************************************************************
...@@ -507,7 +500,6 @@ void dvbpsi_atsc_GatherMGTSections(dvbpsi_decoder_t * p_psi_decoder, ...@@ -507,7 +500,6 @@ void dvbpsi_atsc_GatherMGTSections(dvbpsi_decoder_t * p_psi_decoder,
} }
} }
/***************************************************************************** /*****************************************************************************
* dvbpsi_DecodeMGTSection * dvbpsi_DecodeMGTSection
***************************************************************************** *****************************************************************************
......
...@@ -81,7 +81,6 @@ int dvbpsi_atsc_AttachSTT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id, ...@@ -81,7 +81,6 @@ int dvbpsi_atsc_AttachSTT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id,
} }
p_stt_decoder = (dvbpsi_atsc_stt_decoder_t*)malloc(sizeof(dvbpsi_atsc_stt_decoder_t)); p_stt_decoder = (dvbpsi_atsc_stt_decoder_t*)malloc(sizeof(dvbpsi_atsc_stt_decoder_t));
if(p_stt_decoder == NULL) if(p_stt_decoder == NULL)
{ {
free(p_subdec); free(p_subdec);
...@@ -105,7 +104,6 @@ int dvbpsi_atsc_AttachSTT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id, ...@@ -105,7 +104,6 @@ int dvbpsi_atsc_AttachSTT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id,
return 0; return 0;
} }
/***************************************************************************** /*****************************************************************************
* dvbpsi_atsc_DetachSTT * dvbpsi_atsc_DetachSTT
***************************************************************************** *****************************************************************************
...@@ -118,8 +116,7 @@ void dvbpsi_atsc_DetachSTT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_ ...@@ -118,8 +116,7 @@ void dvbpsi_atsc_DetachSTT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_
dvbpsi_atsc_stt_decoder_t* p_stt_decoder; dvbpsi_atsc_stt_decoder_t* p_stt_decoder;
p_subdec = dvbpsi_demuxGetSubDec(p_demux, i_table_id, 0); p_subdec = dvbpsi_demuxGetSubDec(p_demux, i_table_id, 0);
if(p_subdec == NULL)
if(p_demux == NULL)
{ {
DVBPSI_ERROR_ARG("STT Decoder", DVBPSI_ERROR_ARG("STT Decoder",
"No such STT decoder (table_id == 0x%02x," "No such STT decoder (table_id == 0x%02x,"
...@@ -129,6 +126,8 @@ void dvbpsi_atsc_DetachSTT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_ ...@@ -129,6 +126,8 @@ void dvbpsi_atsc_DetachSTT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_
} }
p_stt_decoder = (dvbpsi_atsc_stt_decoder_t*)p_subdec->p_cb_data; p_stt_decoder = (dvbpsi_atsc_stt_decoder_t*)p_subdec->p_cb_data;
if(!p_stt_decoder)
return;
free(p_subdec->p_cb_data); free(p_subdec->p_cb_data);
...@@ -140,7 +139,6 @@ void dvbpsi_atsc_DetachSTT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_ ...@@ -140,7 +139,6 @@ void dvbpsi_atsc_DetachSTT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_
free(p_subdec); free(p_subdec);
} }
/***************************************************************************** /*****************************************************************************
* dvbpsi_atsc_InitSTT * dvbpsi_atsc_InitSTT
***************************************************************************** *****************************************************************************
...@@ -152,7 +150,6 @@ void dvbpsi_atsc_InitSTT(dvbpsi_atsc_stt_t *p_stt, uint8_t i_protocol) ...@@ -152,7 +150,6 @@ void dvbpsi_atsc_InitSTT(dvbpsi_atsc_stt_t *p_stt, uint8_t i_protocol)
p_stt->p_first_descriptor = NULL; p_stt->p_first_descriptor = NULL;
} }
/***************************************************************************** /*****************************************************************************
* dvbpsi_atsc_EmptySTT * dvbpsi_atsc_EmptySTT
***************************************************************************** *****************************************************************************
...@@ -176,7 +173,6 @@ dvbpsi_descriptor_t *dvbpsi_atsc_STTAddDescriptor( ...@@ -176,7 +173,6 @@ dvbpsi_descriptor_t *dvbpsi_atsc_STTAddDescriptor(
{ {
dvbpsi_descriptor_t * p_descriptor dvbpsi_descriptor_t * p_descriptor
= dvbpsi_NewDescriptor(i_tag, i_length, p_data); = dvbpsi_NewDescriptor(i_tag, i_length, p_data);
if(p_descriptor) if(p_descriptor)
{ {
if(p_stt->p_first_descriptor == NULL) if(p_stt->p_first_descriptor == NULL)
...@@ -207,6 +203,9 @@ void dvbpsi_atsc_GatherSTTSections(dvbpsi_decoder_t * p_psi_decoder, ...@@ -207,6 +203,9 @@ void dvbpsi_atsc_GatherSTTSections(dvbpsi_decoder_t * p_psi_decoder,
dvbpsi_atsc_stt_decoder_t * p_stt_decoder dvbpsi_atsc_stt_decoder_t * p_stt_decoder
= (dvbpsi_atsc_stt_decoder_t*)p_private_decoder; = (dvbpsi_atsc_stt_decoder_t*)p_private_decoder;
if(!p_stt_decoder)
return;
dvbpsi_atsc_stt_t *p_stt; dvbpsi_atsc_stt_t *p_stt;
if(!p_section->b_syntax_indicator) if(!p_section->b_syntax_indicator)
...@@ -214,7 +213,6 @@ void dvbpsi_atsc_GatherSTTSections(dvbpsi_decoder_t * p_psi_decoder, ...@@ -214,7 +213,6 @@ void dvbpsi_atsc_GatherSTTSections(dvbpsi_decoder_t * p_psi_decoder,
/* Invalid section_syntax_indicator */ /* Invalid section_syntax_indicator */
DVBPSI_ERROR("STT decoder", DVBPSI_ERROR("STT decoder",
"invalid section (section_syntax_indicator == 0)"); "invalid section (section_syntax_indicator == 0)");
} }
else else
{ {
...@@ -222,20 +220,16 @@ void dvbpsi_atsc_GatherSTTSections(dvbpsi_decoder_t * p_psi_decoder, ...@@ -222,20 +220,16 @@ void dvbpsi_atsc_GatherSTTSections(dvbpsi_decoder_t * p_psi_decoder,
if (p_stt) if (p_stt)
{ {
/* Decode the sections */ /* Decode the sections */
dvbpsi_atsc_DecodeSTTSections(p_stt, dvbpsi_atsc_DecodeSTTSections(p_stt, p_section);
p_section);
/* Delete the sections */ /* Delete the sections */
dvbpsi_DeletePSISections(p_section); dvbpsi_DeletePSISections(p_section);
/* signal the new STT */ /* signal the new STT */
p_stt_decoder->pf_callback(p_stt_decoder->p_cb_data, p_stt_decoder->pf_callback(p_stt_decoder->p_cb_data,
p_stt); p_stt);
} }
} }
} }
/***************************************************************************** /*****************************************************************************
* dvbpsi_DecodeSTTSection * dvbpsi_DecodeSTTSection
***************************************************************************** *****************************************************************************
...@@ -268,6 +262,4 @@ void dvbpsi_atsc_DecodeSTTSections(dvbpsi_atsc_stt_t* p_stt, ...@@ -268,6 +262,4 @@ void dvbpsi_atsc_DecodeSTTSections(dvbpsi_atsc_stt_t* p_stt,
dvbpsi_atsc_STTAddDescriptor(p_stt, i_tag, i_length, p_byte + 2); dvbpsi_atsc_STTAddDescriptor(p_stt, i_tag, i_length, p_byte + 2);
p_byte += 2 + i_length; p_byte += 2 + i_length;
} }
} }
...@@ -112,7 +112,6 @@ int dvbpsi_atsc_AttachVCT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id, ...@@ -112,7 +112,6 @@ int dvbpsi_atsc_AttachVCT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id,
} }
p_vct_decoder = (dvbpsi_atsc_vct_decoder_t*)malloc(sizeof(dvbpsi_atsc_vct_decoder_t)); p_vct_decoder = (dvbpsi_atsc_vct_decoder_t*)malloc(sizeof(dvbpsi_atsc_vct_decoder_t));
if(p_vct_decoder == NULL) if(p_vct_decoder == NULL)
{ {
free(p_subdec); free(p_subdec);
...@@ -156,8 +155,7 @@ void dvbpsi_atsc_DetachVCT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_ ...@@ -156,8 +155,7 @@ void dvbpsi_atsc_DetachVCT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_
unsigned int i; unsigned int i;
p_subdec = dvbpsi_demuxGetSubDec(p_demux, i_table_id, i_extension); p_subdec = dvbpsi_demuxGetSubDec(p_demux, i_table_id, i_extension);
if(p_subdec == NULL)
if(p_demux == NULL)
{ {
DVBPSI_ERROR_ARG("VCT Decoder", DVBPSI_ERROR_ARG("VCT Decoder",
"No such VCT decoder (table_id == 0x%02x," "No such VCT decoder (table_id == 0x%02x,"
...@@ -167,6 +165,9 @@ void dvbpsi_atsc_DetachVCT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_ ...@@ -167,6 +165,9 @@ void dvbpsi_atsc_DetachVCT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_
} }
p_vct_decoder = (dvbpsi_atsc_vct_decoder_t*)p_subdec->p_cb_data; p_vct_decoder = (dvbpsi_atsc_vct_decoder_t*)p_subdec->p_cb_data;
if(!p_vct_decoder)
return;
if (p_vct_decoder->p_building_vct) if (p_vct_decoder->p_building_vct)
{ {
free(p_vct_decoder->p_building_vct); free(p_vct_decoder->p_building_vct);
...@@ -188,7 +189,6 @@ void dvbpsi_atsc_DetachVCT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_ ...@@ -188,7 +189,6 @@ void dvbpsi_atsc_DetachVCT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_
free(p_subdec); free(p_subdec);
} }
/***************************************************************************** /*****************************************************************************
* dvbpsi_atsc_InitVCT * dvbpsi_atsc_InitVCT
***************************************************************************** *****************************************************************************
...@@ -240,7 +240,6 @@ dvbpsi_descriptor_t *dvbpsi_atsc_VCTAddDescriptor( ...@@ -240,7 +240,6 @@ dvbpsi_descriptor_t *dvbpsi_atsc_VCTAddDescriptor(
{ {
dvbpsi_descriptor_t * p_descriptor dvbpsi_descriptor_t * p_descriptor
= dvbpsi_NewDescriptor(i_tag, i_length, p_data); = dvbpsi_NewDescriptor(i_tag, i_length, p_data);
if(p_descriptor) if(p_descriptor)
{ {
if(p_vct->p_first_descriptor == NULL) if(p_vct->p_first_descriptor == NULL)
...@@ -282,7 +281,6 @@ dvbpsi_atsc_vct_channel_t *dvbpsi_atsc_VCTAddChannel(dvbpsi_atsc_vct_t* p_vct, ...@@ -282,7 +281,6 @@ dvbpsi_atsc_vct_channel_t *dvbpsi_atsc_VCTAddChannel(dvbpsi_atsc_vct_t* p_vct,
{ {
dvbpsi_atsc_vct_channel_t * p_channel dvbpsi_atsc_vct_channel_t * p_channel
= (dvbpsi_atsc_vct_channel_t*)malloc(sizeof(dvbpsi_atsc_vct_channel_t)); = (dvbpsi_atsc_vct_channel_t*)malloc(sizeof(dvbpsi_atsc_vct_channel_t));
if(p_channel) if(p_channel)
{ {
memcpy(p_channel->i_short_name, p_short_name, sizeof(uint16_t) * 7); memcpy(p_channel->i_short_name, p_short_name, sizeof(uint16_t) * 7);
...@@ -320,7 +318,6 @@ dvbpsi_atsc_vct_channel_t *dvbpsi_atsc_VCTAddChannel(dvbpsi_atsc_vct_t* p_vct, ...@@ -320,7 +318,6 @@ dvbpsi_atsc_vct_channel_t *dvbpsi_atsc_VCTAddChannel(dvbpsi_atsc_vct_t* p_vct,
return p_channel; return p_channel;
} }
/***************************************************************************** /*****************************************************************************
* dvbpsi_VCTTableAddDescriptor * dvbpsi_VCTTableAddDescriptor
***************************************************************************** *****************************************************************************
...@@ -333,7 +330,6 @@ dvbpsi_descriptor_t *dvbpsi_atsc_VCTChannelAddDescriptor( ...@@ -333,7 +330,6 @@ dvbpsi_descriptor_t *dvbpsi_atsc_VCTChannelAddDescriptor(
{ {
dvbpsi_descriptor_t * p_descriptor dvbpsi_descriptor_t * p_descriptor
= dvbpsi_NewDescriptor(i_tag, i_length, p_data); = dvbpsi_NewDescriptor(i_tag, i_length, p_data);
if(p_descriptor) if(p_descriptor)
{ {
if(p_channel->p_first_descriptor == NULL) if(p_channel->p_first_descriptor == NULL)
...@@ -352,7 +348,6 @@ dvbpsi_descriptor_t *dvbpsi_atsc_VCTChannelAddDescriptor( ...@@ -352,7 +348,6 @@ dvbpsi_descriptor_t *dvbpsi_atsc_VCTChannelAddDescriptor(
return p_descriptor; return p_descriptor;
} }
/***************************************************************************** /*****************************************************************************
* dvbpsi_atsc_GatherVCTSections * dvbpsi_atsc_GatherVCTSections
***************************************************************************** *****************************************************************************
...@@ -541,7 +536,6 @@ void dvbpsi_atsc_GatherVCTSections(dvbpsi_decoder_t * p_psi_decoder, ...@@ -541,7 +536,6 @@ void dvbpsi_atsc_GatherVCTSections(dvbpsi_decoder_t * p_psi_decoder,
} }
} }
/***************************************************************************** /*****************************************************************************
* dvbpsi_DecodeVCTSection * dvbpsi_DecodeVCTSection
***************************************************************************** *****************************************************************************
...@@ -621,4 +615,3 @@ void dvbpsi_atsc_DecodeVCTSections(dvbpsi_atsc_vct_t* p_vct, ...@@ -621,4 +615,3 @@ void dvbpsi_atsc_DecodeVCTSections(dvbpsi_atsc_vct_t* p_vct,
p_section = p_section->p_next; p_section = p_section->p_next;
} }
} }
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