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,
DVBPSI_ERROR_ARG("EIT decoder",
"Already a decoder for (table_id == 0x%02x extension == 0x%04x)",
i_table_id, i_extension);
return 1;
}
......@@ -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));
if(p_eit_decoder == NULL)
{
free(p_subdec);
......@@ -128,7 +126,6 @@ int dvbpsi_atsc_AttachEIT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id,
return 0;
}
/*****************************************************************************
* dvbpsi_atsc_DetachEIT
*****************************************************************************
......@@ -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_atsc_eit_decoder_t* p_eit_decoder;
unsigned int i;
p_subdec = dvbpsi_demuxGetSubDec(p_demux, i_table_id, i_extension);
if(p_demux == NULL)
if(p_subdec == NULL)
{
DVBPSI_ERROR_ARG("EIT Decoder",
"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_
}
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)
{
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])
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_
free(p_subdec);
}
/*****************************************************************************
* dvbpsi_atsc_InitEIT
*****************************************************************************
* 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,
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->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
p_eit->p_first_event = NULL;
}
/*****************************************************************************
* dvbpsi_atsc_EmptyEIT
*****************************************************************************
......@@ -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*)malloc(sizeof(dvbpsi_atsc_eit_event_t));
if(p_event)
{
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,
return p_event;
}
/*****************************************************************************
* dvbpsi_EITTableAddDescriptor
*****************************************************************************
......@@ -288,7 +279,6 @@ dvbpsi_descriptor_t *dvbpsi_atsc_EITChannelAddDescriptor(
return p_descriptor;
}
/*****************************************************************************
* dvbpsi_atsc_GatherEITSections
*****************************************************************************
......@@ -531,5 +521,3 @@ void dvbpsi_atsc_DecodeEITSections(dvbpsi_atsc_eit_t* p_eit,
p_section = p_section->p_next;
}
}
......@@ -37,7 +37,6 @@ Decode PSIP Extended Text Table.
*****************************************************************************
* ETM Version information.
*****************************************************************************/
typedef struct dvbpsi_atsc_ett_etm_version_s
{
uint32_t i_etm_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",
"Already a decoder for (table_id == 0x%02x extension == 0x%04x)",
i_table_id, i_extension);
return 1;
}
......@@ -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));
if(p_ett_decoder == NULL)
{
free(p_subdec);
......@@ -126,7 +123,6 @@ int dvbpsi_atsc_AttachETT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id,
return 0;
}
/*****************************************************************************
* dvbpsi_atsc_DetachETT
*****************************************************************************
......@@ -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** pp_prev_subdec;
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",
"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_
}
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;
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_
free(p_subdec);
}
/*****************************************************************************
* dvbpsi_atsc_InitETT
*****************************************************************************
......@@ -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_private_decoder;
if(!p_ett_decoder)
return;
if(p_section->i_table_id == 0xCC)
{
......@@ -262,7 +262,6 @@ void dvbpsi_atsc_GatherETTSections(dvbpsi_decoder_t* p_psi_decoder,
dvbpsi_DeletePSISections(p_section);
}
/*****************************************************************************
* dvbpsi_atsc_DecodeETTSection
*****************************************************************************
......
......@@ -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));
if(p_mgt_decoder == NULL)
{
free(p_subdec);
......@@ -131,7 +130,6 @@ int dvbpsi_atsc_AttachMGT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id,
return 0;
}
/*****************************************************************************
* dvbpsi_atsc_DetachMGT
*****************************************************************************
......@@ -146,8 +144,7 @@ void dvbpsi_atsc_DetachMGT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_
unsigned int i;
p_subdec = dvbpsi_demuxGetSubDec(p_demux, i_table_id, i_extension);
if(p_demux == NULL)
if(p_subdec == NULL)
{
DVBPSI_ERROR_ARG("MGT Decoder",
"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_
}
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)
{
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_
free(p_subdec);
}
/*****************************************************************************
* dvbpsi_atsc_InitMGT
*****************************************************************************
......@@ -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;
}
/*****************************************************************************
* dvbpsi_atsc_EmptyMGT
*****************************************************************************
......@@ -229,7 +227,6 @@ dvbpsi_descriptor_t *dvbpsi_atsc_MGTAddDescriptor(
{
dvbpsi_descriptor_t * p_descriptor
= dvbpsi_NewDescriptor(i_tag, i_length, p_data);
if(p_descriptor)
{
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,
{
dvbpsi_atsc_mgt_table_t * p_table
= (dvbpsi_atsc_mgt_table_t*)malloc(sizeof(dvbpsi_atsc_mgt_table_t));
if(p_table)
{
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,
return p_table;
}
/*****************************************************************************
* dvbpsi_MGTTableAddDescriptor
*****************************************************************************
......@@ -300,7 +295,6 @@ dvbpsi_descriptor_t *dvbpsi_atsc_MGTTableAddDescriptor(
{
dvbpsi_descriptor_t * p_descriptor
= dvbpsi_NewDescriptor(i_tag, i_length, p_data);
if(p_descriptor)
{
if(p_table->p_first_descriptor == NULL)
......@@ -319,7 +313,6 @@ dvbpsi_descriptor_t *dvbpsi_atsc_MGTTableAddDescriptor(
return p_descriptor;
}
/*****************************************************************************
* dvbpsi_atsc_GatherMGTSections
*****************************************************************************
......@@ -507,7 +500,6 @@ void dvbpsi_atsc_GatherMGTSections(dvbpsi_decoder_t * p_psi_decoder,
}
}
/*****************************************************************************
* dvbpsi_DecodeMGTSection
*****************************************************************************
......
......@@ -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));
if(p_stt_decoder == NULL)
{
free(p_subdec);
......@@ -105,7 +104,6 @@ int dvbpsi_atsc_AttachSTT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id,
return 0;
}
/*****************************************************************************
* dvbpsi_atsc_DetachSTT
*****************************************************************************
......@@ -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;
p_subdec = dvbpsi_demuxGetSubDec(p_demux, i_table_id, 0);
if(p_demux == NULL)
if(p_subdec == NULL)
{
DVBPSI_ERROR_ARG("STT Decoder",
"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_
}
p_stt_decoder = (dvbpsi_atsc_stt_decoder_t*)p_subdec->p_cb_data;
if(!p_stt_decoder)
return;
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_
free(p_subdec);
}
/*****************************************************************************
* dvbpsi_atsc_InitSTT
*****************************************************************************
......@@ -152,7 +150,6 @@ void dvbpsi_atsc_InitSTT(dvbpsi_atsc_stt_t *p_stt, uint8_t i_protocol)
p_stt->p_first_descriptor = NULL;
}
/*****************************************************************************
* dvbpsi_atsc_EmptySTT
*****************************************************************************
......@@ -176,7 +173,6 @@ dvbpsi_descriptor_t *dvbpsi_atsc_STTAddDescriptor(
{
dvbpsi_descriptor_t * p_descriptor
= dvbpsi_NewDescriptor(i_tag, i_length, p_data);
if(p_descriptor)
{
if(p_stt->p_first_descriptor == NULL)
......@@ -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_private_decoder;
if(!p_stt_decoder)
return;
dvbpsi_atsc_stt_t *p_stt;
if(!p_section->b_syntax_indicator)
......@@ -214,7 +213,6 @@ void dvbpsi_atsc_GatherSTTSections(dvbpsi_decoder_t * p_psi_decoder,
/* Invalid section_syntax_indicator */
DVBPSI_ERROR("STT decoder",
"invalid section (section_syntax_indicator == 0)");
}
else
{
......@@ -222,20 +220,16 @@ void dvbpsi_atsc_GatherSTTSections(dvbpsi_decoder_t * p_psi_decoder,
if (p_stt)
{
/* Decode the sections */
dvbpsi_atsc_DecodeSTTSections(p_stt,
p_section);
dvbpsi_atsc_DecodeSTTSections(p_stt, p_section);
/* Delete the sections */
dvbpsi_DeletePSISections(p_section);
/* signal the new STT */
p_stt_decoder->pf_callback(p_stt_decoder->p_cb_data,
p_stt);
}
}
}
/*****************************************************************************
* dvbpsi_DecodeSTTSection
*****************************************************************************
......@@ -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);
p_byte += 2 + i_length;
}
}
......@@ -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));
if(p_vct_decoder == NULL)
{
free(p_subdec);
......@@ -156,8 +155,7 @@ void dvbpsi_atsc_DetachVCT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, uint16_
unsigned int i;
p_subdec = dvbpsi_demuxGetSubDec(p_demux, i_table_id, i_extension);
if(p_demux == NULL)
if(p_subdec == NULL)
{
DVBPSI_ERROR_ARG("VCT Decoder",
"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_
}
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)
{
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_
free(p_subdec);
}
/*****************************************************************************
* dvbpsi_atsc_InitVCT
*****************************************************************************
......@@ -240,7 +240,6 @@ dvbpsi_descriptor_t *dvbpsi_atsc_VCTAddDescriptor(
{
dvbpsi_descriptor_t * p_descriptor
= dvbpsi_NewDescriptor(i_tag, i_length, p_data);
if(p_descriptor)
{
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,
{
dvbpsi_atsc_vct_channel_t * p_channel
= (dvbpsi_atsc_vct_channel_t*)malloc(sizeof(dvbpsi_atsc_vct_channel_t));
if(p_channel)
{
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,
return p_channel;
}
/*****************************************************************************
* dvbpsi_VCTTableAddDescriptor
*****************************************************************************
......@@ -333,7 +330,6 @@ dvbpsi_descriptor_t *dvbpsi_atsc_VCTChannelAddDescriptor(
{
dvbpsi_descriptor_t * p_descriptor
= dvbpsi_NewDescriptor(i_tag, i_length, p_data);
if(p_descriptor)
{
if(p_channel->p_first_descriptor == NULL)
......@@ -352,7 +348,6 @@ dvbpsi_descriptor_t *dvbpsi_atsc_VCTChannelAddDescriptor(
return p_descriptor;
}
/*****************************************************************************
* dvbpsi_atsc_GatherVCTSections
*****************************************************************************
......@@ -541,7 +536,6 @@ void dvbpsi_atsc_GatherVCTSections(dvbpsi_decoder_t * p_psi_decoder,
}
}
/*****************************************************************************
* dvbpsi_DecodeVCTSection
*****************************************************************************
......@@ -621,4 +615,3 @@ void dvbpsi_atsc_DecodeVCTSections(dvbpsi_atsc_vct_t* p_vct,
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