aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Paul Saman <jean-paul.saman@m2x.nl>2012-11-08 12:50:21 +0100
committerJean-Paul Saman <jean-paul.saman@m2x.nl>2012-11-08 12:50:21 +0100
commit95403168601dc980bd98874899adf6f76e852aeb (patch)
tree097b5e1cf124e81541a161c836c3ecb6a6283ca6
parent3dfc7ed80b93654ad0471e8ce7862f5e628d0e2d (diff)
Add a few common PSI fields to the table structs.1.0.0_pre3
Some tables like EIT and ATSC EIT need to know what the value of table_id and i_extension fields are for this PSI section. Therefor add this information to the tables decoded structs.
-rw-r--r--examples/decode_bat.c2
-rw-r--r--examples/dvbinfo/libdvbpsi.c5
-rw-r--r--src/tables/atsc_eit.c16
-rw-r--r--src/tables/atsc_eit.h33
-rw-r--r--src/tables/atsc_ett.c27
-rw-r--r--src/tables/atsc_ett.h36
-rw-r--r--src/tables/atsc_mgt.c20
-rw-r--r--src/tables/atsc_mgt.h25
-rw-r--r--src/tables/atsc_stt.c17
-rw-r--r--src/tables/atsc_stt.h21
-rw-r--r--src/tables/atsc_vct.c21
-rw-r--r--src/tables/atsc_vct.h25
-rw-r--r--src/tables/bat.c25
-rw-r--r--src/tables/bat.h55
-rw-r--r--src/tables/eit.c29
-rw-r--r--src/tables/eit.h60
-rw-r--r--src/tables/nit.c23
-rw-r--r--src/tables/nit.h43
-rw-r--r--src/tables/pmt.c2
-rw-r--r--src/tables/sdt.c17
-rw-r--r--src/tables/sdt.h32
-rw-r--r--src/tables/sis.c25
-rw-r--r--src/tables/sis.h27
-rw-r--r--src/tables/tot.c20
-rw-r--r--src/tables/tot.h29
25 files changed, 376 insertions, 259 deletions
diff --git a/examples/decode_bat.c b/examples/decode_bat.c
index 93a7193..05c9667 100644
--- a/examples/decode_bat.c
+++ b/examples/decode_bat.c
@@ -175,7 +175,7 @@ static void DumpBAT(void* p_zero, dvbpsi_bat_t* p_bat)
printf( "\n");
printf( "New active BAT(binary dumped)\n");
printf( " bouquet_id : %d\n",
- p_bat->i_bouquet_id);
+ p_bat->i_extension);
printf( " version_number : %d\n",
p_bat->i_version);
printf( " | ts_id \n");
diff --git a/examples/dvbinfo/libdvbpsi.c b/examples/dvbinfo/libdvbpsi.c
index 35a0cf1..4707282 100644
--- a/examples/dvbinfo/libdvbpsi.c
+++ b/examples/dvbinfo/libdvbpsi.c
@@ -1330,7 +1330,7 @@ static void handle_EIT(void* p_data, dvbpsi_eit_t* p_eit)
printf("\n");
printf(" EIT: Event Information Table\n");
printf("\tVersion number : %d\n", p_eit->i_version);
- printf("\tService id : %d\n", p_eit->i_service_id);
+ printf("\tService id : %d\n", p_eit->i_extension);
printf("\tCurrent next : %s\n", p_eit->b_current_next ? "yes" : "no");
printf("\tTransport stream id : %d\n", p_eit->i_ts_id);
printf("\tOriginal network id : %d\n", p_eit->i_network_id);
@@ -1355,7 +1355,6 @@ static void handle_TOT(void* p_data, dvbpsi_tot_t* p_tot)
printf("\tVersion number : %d\n", p_tot->i_version);
printf("\tCurrent next : %s\n", p_tot->b_current_next ? "yes" : "no");
- printf("\tTransport stream id : %d\n", p_tot->i_ts_id);
printf("\tUTC time : %"PRId64"\n", p_tot->i_utc_time);
if (table_id == 0x73) /* TOT */
@@ -1451,7 +1450,7 @@ static void handle_BAT(void* p_data, dvbpsi_bat_t* p_bat)
printf("\n");
printf(" BAT: Bouquet Association Table\n");
printf("\tVersion number : %d\n", p_bat->i_version);
- printf("\tBouquet id : %d\n", p_bat->i_bouquet_id);
+ printf("\tBouquet id : %d\n", p_bat->i_extension);
printf("\tCurrent next : %s\n", p_bat->b_current_next ? "yes" : "no");
DumpDescriptors("\t | ]", p_bat->p_first_descriptor);
DumpTSDescriptorsBAT(p_bat->p_first_ts);
diff --git a/src/tables/atsc_eit.c b/src/tables/atsc_eit.c
index 35141e8..ee04d8e 100644
--- a/src/tables/atsc_eit.c
+++ b/src/tables/atsc_eit.c
@@ -162,11 +162,15 @@ void dvbpsi_atsc_DetachEIT(dvbpsi_t * p_dvbpsi, uint8_t i_table_id, uint16_t i_e
*****************************************************************************
* Initialize a pre-allocated dvbpsi_atsc_eit_t structure.
*****************************************************************************/
-void dvbpsi_atsc_InitEIT(dvbpsi_atsc_eit_t* p_eit, uint8_t i_version, uint8_t i_protocol,
+void dvbpsi_atsc_InitEIT(dvbpsi_atsc_eit_t* p_eit, uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, uint8_t i_protocol,
uint16_t i_source_id, bool b_current_next)
{
assert(p_eit);
+ p_eit->i_table_id = i_table_id;
+ p_eit->i_extension = i_extension;
+
p_eit->i_version = i_version;
p_eit->b_current_next = b_current_next;
p_eit->i_protocol = i_protocol;
@@ -175,13 +179,15 @@ void dvbpsi_atsc_InitEIT(dvbpsi_atsc_eit_t* p_eit, uint8_t i_version, uint8_t i_
p_eit->p_first_descriptor = NULL;
}
-dvbpsi_atsc_eit_t *dvbpsi_atsc_NewEIT(uint8_t i_version, uint8_t i_protocol,
+dvbpsi_atsc_eit_t *dvbpsi_atsc_NewEIT(uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, uint8_t i_protocol,
uint16_t i_source_id, bool b_current_next)
{
dvbpsi_atsc_eit_t *p_eit;
p_eit = (dvbpsi_atsc_eit_t*) malloc(sizeof(dvbpsi_atsc_eit_t));
if (p_eit != NULL)
- dvbpsi_atsc_InitEIT(p_eit, i_version, b_current_next, i_protocol, i_source_id);
+ dvbpsi_atsc_InitEIT(p_eit, i_table_id, i_extension, i_version,
+ i_protocol, i_source_id, b_current_next);
return p_eit;
}
@@ -348,7 +354,9 @@ static bool dvbpsi_AddSectionEIT(dvbpsi_t *p_dvbpsi, dvbpsi_atsc_eit_decoder_t *
/* Initialize the structures if it's the first section received */
if (!p_decoder->p_building_eit)
{
- p_decoder->p_building_eit = dvbpsi_atsc_NewEIT(p_section->i_version,
+ p_decoder->p_building_eit = dvbpsi_atsc_NewEIT(p_section->i_table_id,
+ p_section->i_extension,
+ p_section->i_version,
p_section->p_payload_start[0],
p_section->i_extension,
p_section->b_current_next);
diff --git a/src/tables/atsc_eit.h b/src/tables/atsc_eit.h
index 82f72d6..1410514 100644
--- a/src/tables/atsc_eit.h
+++ b/src/tables/atsc_eit.h
@@ -75,14 +75,17 @@ typedef struct dvbpsi_atsc_eit_event_s
*/
typedef struct dvbpsi_atsc_eit_s
{
+ uint8_t i_table_id; /*!< table id */
+ uint16_t i_extension; /*!< subtable id */
+
uint8_t i_version; /*!< version_number */
bool b_current_next; /*!< current_next_indicator */
uint16_t i_source_id; /*!< Source id used to match against channels */
uint8_t i_protocol; /*!< PSIP Protocol version */
- dvbpsi_atsc_eit_event_t *p_first_event; /*!< First event information structure. */
+ dvbpsi_atsc_eit_event_t *p_first_event; /*!< First event information structure. */
- dvbpsi_descriptor_t *p_first_descriptor; /*!< First descriptor structure. */
+ dvbpsi_descriptor_t *p_first_descriptor;/*!< First descriptor structure. */
} dvbpsi_atsc_eit_t;
/*****************************************************************************
@@ -110,8 +113,8 @@ typedef void (* dvbpsi_atsc_eit_callback)(void* p_cb_data, dvbpsi_atsc_eit_t* p_
* \param p_cb_data private data given in argument to the callback.
* \return true if everything went ok, false otherwise
*/
-bool dvbpsi_atsc_AttachEIT(dvbpsi_t *p_dvbpsi, uint8_t i_table_id,
- uint16_t i_extension, dvbpsi_atsc_eit_callback pf_callback, void* p_cb_data);
+bool dvbpsi_atsc_AttachEIT(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_extension,
+ dvbpsi_atsc_eit_callback pf_callback, void* p_cb_data);
/*****************************************************************************
* dvbpsi_eit_detach
@@ -126,30 +129,35 @@ bool dvbpsi_atsc_AttachEIT(dvbpsi_t *p_dvbpsi, uint8_t i_table_id,
* \param i_extension Table ID extension, here TS ID.
* \return nothing.
*/
-void dvbpsi_atsc_DetachEIT(dvbpsi_t *p_dvbpsi, uint8_t i_table_id,
- uint16_t i_extension);
+void dvbpsi_atsc_DetachEIT(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_extension);
/*****************************************************************************
* dvbpsi_atsc_InitEIT/dvbpsi_atsc_NewEIT
*****************************************************************************/
/*!
- * \fn void dvbpsi_atsc_InitEIT(dvbpsi_atsc_eit_t* p_eit, uint8_t i_version, uint8_t i_protocol,
- uint16_t i_source_id, bool b_current_next);
+ * \fn void dvbpsi_atsc_InitEIT(dvbpsi_atsc_eit_t* p_eit, uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, uint8_t i_protocol,
+ uint16_t i_source_id, bool b_current_next);
* \brief Initialize a user-allocated dvbpsi_atsc_eit_t structure.
* \param p_eit pointer to the EIT structure
+ * \param i_table_id Table ID, 0xCB.
+ * \param i_extension Table ID extension, here TS ID.
* \param i_version EIT version
* \param i_protocol PSIP Protocol version.
* \param i_source_id Source id.
* \param b_current_next current next indicator
* \return nothing.
*/
-void dvbpsi_atsc_InitEIT(dvbpsi_atsc_eit_t* p_eit, uint8_t i_version, uint8_t i_protocol,
- uint16_t i_source_id, bool b_current_next);
+void dvbpsi_atsc_InitEIT(dvbpsi_atsc_eit_t* p_eit, uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, uint8_t i_protocol, uint16_t i_source_id, bool b_current_next);
/*!
- * \fn dvbpsi_atsc_eit_t *dvbpsi_atsc_NewEIT(uint8_t i_version, uint8_t i_protocol,
+ * \fn dvbpsi_atsc_eit_t *dvbpsi_atsc_NewEIT(uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, uint8_t i_protocol,
uint16_t i_source_id, bool b_current_next)
* \brief Allocate and initialize a new dvbpsi_eit_t structure. Use ObjectRefDec to delete it.
+ * \param i_table_id Table ID, 0xCB.
+ * \param i_extension Table ID extension, here TS ID.
* \param i_network_id network id
* \param i_version EIT version
* \param b_current_next current next indicator
@@ -157,7 +165,8 @@ void dvbpsi_atsc_InitEIT(dvbpsi_atsc_eit_t* p_eit, uint8_t i_version, uint8_t i_
* \param b_cable_eit Whether this is CEIT or a TEIT.
* \return p_eit pointer to the EIT structure or NULL on error
*/
-dvbpsi_atsc_eit_t *dvbpsi_atsc_NewEIT(uint8_t i_version, uint8_t i_protocol,
+dvbpsi_atsc_eit_t *dvbpsi_atsc_NewEIT(uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, uint8_t i_protocol,
uint16_t i_source_id, bool b_current_next);
/*****************************************************************************
diff --git a/src/tables/atsc_ett.c b/src/tables/atsc_ett.c
index 2b62e3e..f013ebf 100644
--- a/src/tables/atsc_ett.c
+++ b/src/tables/atsc_ett.c
@@ -167,33 +167,33 @@ void dvbpsi_atsc_DetachETT(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_ex
*****************************************************************************
* Initialize a pre-allocated dvbpsi_ett_t structure.
*****************************************************************************/
-void dvbpsi_atsc_InitETT(dvbpsi_atsc_ett_t *p_ett,
- uint8_t i_version,
- uint8_t i_protocol,
- uint16_t i_ett_table_id,
- uint32_t i_etm_id,
- bool b_current_next)
+void dvbpsi_atsc_InitETT(dvbpsi_atsc_ett_t *p_ett, uint8_t i_table_id,
+ uint16_t i_extension, uint8_t i_version, uint8_t i_protocol,
+ uint32_t i_etm_id, bool b_current_next)
{
assert(p_ett);
+ p_ett->i_table_id = i_table_id;
+ p_ett->i_extension = i_extension;
+
p_ett->i_version = i_version;
p_ett->b_current_next = b_current_next;
p_ett->i_protocol = i_protocol;
- p_ett->i_ett_table_id = i_ett_table_id;
p_ett->i_etm_id = i_etm_id;
p_ett->i_etm_length = 0;
p_ett->p_etm_data = NULL;
p_ett->p_first_descriptor = NULL;
}
-dvbpsi_atsc_ett_t *dvbpsi_atsc_NewETT(uint8_t i_version, uint8_t i_protocol,
- uint16_t i_ett_table_id, uint32_t i_etm_id, bool b_current_next)
+dvbpsi_atsc_ett_t *dvbpsi_atsc_NewETT(uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, uint8_t i_protocol,
+ uint32_t i_etm_id, bool b_current_next)
{
dvbpsi_atsc_ett_t *p_ett;
p_ett = (dvbpsi_atsc_ett_t*)malloc(sizeof(dvbpsi_atsc_ett_t));
if (p_ett != NULL)
- dvbpsi_atsc_InitETT(p_ett, i_version, b_current_next, i_protocol,
- i_ett_table_id, i_etm_id);
+ dvbpsi_atsc_InitETT(p_ett, i_table_id, i_extension, i_version,
+ i_protocol, i_etm_id, b_current_next);
return p_ett;
}
@@ -291,9 +291,10 @@ static bool dvbpsi_AddSectionETT(dvbpsi_t *p_dvbpsi, dvbpsi_atsc_ett_decoder_t *
((uint32_t)p_section->p_payload_start[3] << 8) |
((uint32_t)p_section->p_payload_start[4] << 0);
- p_decoder->p_building_ett = dvbpsi_atsc_NewETT(p_section->i_version,
+ p_decoder->p_building_ett = dvbpsi_atsc_NewETT(p_section->i_table_id,
+ p_section->i_extension,
+ p_section->i_version,
p_section->p_payload_start[0],
- p_section->i_table_id,
i_etm_id,
p_section->b_current_next);
if (p_decoder->p_building_ett)
diff --git a/src/tables/atsc_ett.h b/src/tables/atsc_ett.h
index 6baaf61..03eb1d4 100644
--- a/src/tables/atsc_ett.h
+++ b/src/tables/atsc_ett.h
@@ -55,13 +55,16 @@ extern "C" {
typedef struct dvbpsi_atsc_ett_s
{
/* general PSI table */
+ uint8_t i_table_id; /*!< table id */
+ uint16_t i_extension; /*!< subtable id:
+ ETT Table ID extension,
+ normally 0x0000 */
+
uint8_t i_version; /*!< version_number */
bool b_current_next; /*!< current_next_indicator */
uint8_t i_protocol; /*!< PSIP Protocol version */
/* ETT specific */
- uint16_t i_ett_table_id; /*!< ETT Table ID extension,
- normally 0x0000 */
uint32_t i_etm_id; /*!< ETM Identifier, made up of
source id and event id
(or 0 for channel ETT) */
@@ -97,8 +100,8 @@ typedef void (* dvbpsi_atsc_ett_callback)(void* p_cb_data, dvbpsi_atsc_ett_t* p_
* \param p_cb_data private data given in argument to the callback.
* \return true if everything went ok, else it returns false.
*/
-bool dvbpsi_atsc_AttachETT(dvbpsi_t *p_dvbpsi, uint8_t i_table_id,
- uint16_t i_extension, dvbpsi_atsc_ett_callback pf_callback, void* p_cb_data);
+bool dvbpsi_atsc_AttachETT(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_extension,
+ dvbpsi_atsc_ett_callback pf_callback, void* p_cb_data);
/*****************************************************************************
* dvbpsi_atsc_DetachETT
@@ -119,32 +122,37 @@ void dvbpsi_atsc_DetachETT(dvbpsi_t *p_dvbpsi, uint8_t i_table_id,
* dvbpsi_atsc_InitETT/dvbpsi_atsc_NewETT
*****************************************************************************/
/*!
- * \fn void dvbpsi_atsc_InitETT(dvbpsi_atsc_ett_t *p_ett, uint8_t i_version, uint8_t i_protocol,
- uint16_t i_ett_table_id, uint32_t i_etm_id, bool b_current_next);
+ * \fn void dvbpsi_atsc_InitETT(dvbpsi_atsc_ett_t *p_ett, uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, uint8_t i_protocol, uint32_t i_etm_id, bool b_current_next);
* \brief Initialize a user-allocated dvbpsi_atsc_ett_t structure.
* \param p_ett pointer to the ETT structure
+ * \param i_table_id Table ID, 0xCC.
+ * \param i_extension Table ID extension, normally 0x0000.
* \param i_version version
* \param i_protocol PSIP Protocol version.
- * \param i_ett_table_id Table ID (Normally 0x0000)
* \param i_etm_id ETM Identifier.
* \param b_current_next current next indicator
* \return nothing.
*/
-void dvbpsi_atsc_InitETT(dvbpsi_atsc_ett_t *p_ett, uint8_t i_version, uint8_t i_protocol,
- uint16_t i_ett_table_id, uint32_t i_etm_id, bool b_current_next);
+void dvbpsi_atsc_InitETT(dvbpsi_atsc_ett_t *p_ett, uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, uint8_t i_protocol,
+ uint32_t i_etm_id, bool b_current_next);
/*!
- * \fn dvbpsi_atsc_ett_t *dvbpsi_atsc_NewETT(uint8_t i_version, uint8_t i_protocol,
- uint16_t i_ett_table_id, uint32_t i_etm_id, bool b_current_next)
+ * \fn dvbpsi_atsc_ett_t *dvbpsi_atsc_NewETT(uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, uint8_t i_protocol,
+ uint32_t i_etm_id, bool b_current_next)
* \brief Allocate and initialize a new dvbpsi_atsc_ett_t structure. Use ObjectRefDec to delete it.
+ * \param i_table_id Table ID, 0xCC.
+ * \param i_extension Table ID extension, normally 0x0000.
* \param i_protocol PSIP Protocol version.
- * \param i_ett_table_id Table ID (Normally 0x0000)
* \param i_etm_id ETM Identifier.
* \param b_current_next current next indicator
* \returns p_ett pointer to the ETT structure, NULL otherwise
*/
-dvbpsi_atsc_ett_t *dvbpsi_atsc_NewETT(uint8_t i_version, uint8_t i_protocol,
- uint16_t i_ett_table_id, uint32_t i_etm_id, bool b_current_next);
+dvbpsi_atsc_ett_t *dvbpsi_atsc_NewETT(uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, uint8_t i_protocol,
+ uint32_t i_etm_id, bool b_current_next);
/*****************************************************************************
* dvbpsi_atsc_EmptyETT/dvbpsi_atsc_DeleteETT
diff --git a/src/tables/atsc_mgt.c b/src/tables/atsc_mgt.c
index d0ae0a5..ceda056 100644
--- a/src/tables/atsc_mgt.c
+++ b/src/tables/atsc_mgt.c
@@ -167,27 +167,28 @@ void dvbpsi_atsc_DetachMGT(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_ex
*****************************************************************************
* Initialize a pre-allocated dvbpsi_atsc_mgt_t structure.
*****************************************************************************/
-void dvbpsi_atsc_InitMGT(dvbpsi_atsc_mgt_t* p_mgt,uint8_t i_version,
- uint8_t i_protocol, uint16_t i_table_id_extension, bool b_current_next)
+void dvbpsi_atsc_InitMGT(dvbpsi_atsc_mgt_t* p_mgt, uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, uint8_t i_protocol, bool b_current_next)
{
assert(p_mgt);
+ p_mgt->i_table_id = i_table_id;
+ p_mgt->i_extension = i_extension;
+
p_mgt->i_version = i_version;
p_mgt->b_current_next = b_current_next;
p_mgt->i_protocol = i_protocol;
- p_mgt->i_table_id_ext = i_table_id_extension;
p_mgt->p_first_table = NULL;
p_mgt->p_first_descriptor = NULL;
}
-dvbpsi_atsc_mgt_t *dvbpsi_atsc_NewMGT(uint8_t i_version, uint8_t i_protocol,
- uint16_t i_table_id_extension, bool b_current_next)
+dvbpsi_atsc_mgt_t *dvbpsi_atsc_NewMGT(uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, uint8_t i_protocol, bool b_current_next)
{
dvbpsi_atsc_mgt_t* p_mgt;
p_mgt = (dvbpsi_atsc_mgt_t*)malloc(sizeof(dvbpsi_atsc_mgt_t));
if (p_mgt != NULL)
- dvbpsi_atsc_InitMGT(p_mgt, i_version, b_current_next, i_protocol,
- i_table_id_extension);
+ dvbpsi_atsc_InitMGT(p_mgt, i_table_id, i_extension, i_version, i_protocol, b_current_next);
return p_mgt;
}
@@ -378,9 +379,10 @@ static bool dvbpsi_AddSectionMGT(dvbpsi_t *p_dvbpsi, dvbpsi_atsc_mgt_decoder_t *
/* Initialize the structures if it's the first section received */
if (!p_decoder->p_building_mgt)
{
- p_decoder->p_building_mgt = dvbpsi_atsc_NewMGT(p_section->i_version,
- p_section->p_payload_start[0],
+ p_decoder->p_building_mgt = dvbpsi_atsc_NewMGT(p_section->i_table_id,
p_section->i_extension,
+ p_section->i_version,
+ p_section->p_payload_start[0],
p_section->b_current_next);
if (p_decoder->p_building_mgt)
return false;
diff --git a/src/tables/atsc_mgt.h b/src/tables/atsc_mgt.h
index d55fdad..ee2304a 100644
--- a/src/tables/atsc_mgt.h
+++ b/src/tables/atsc_mgt.h
@@ -75,6 +75,9 @@ typedef struct dvbpsi_atsc_mgt_table_s
*/
typedef struct dvbpsi_atsc_mgt_s
{
+ uint8_t i_table_id; /*!< Table id */
+ uint16_t i_extension; /*!< Subtable id */
+
uint8_t i_version; /*!< version_number */
bool b_current_next; /*!< current_next_indicator */
uint16_t i_table_id_ext; /*!< 0x0000 */
@@ -131,31 +134,33 @@ void dvbpsi_atsc_DetachMGT(dvbpsi_t * p_dvbpsi, uint8_t i_table_id, uint16_t i_e
* dvbpsi_atsc_InitMGT/dvbpsi_atsc_NewMGT
*****************************************************************************/
/*!
- * \fn void dvbpsi_atsc_InitMGT(dvbpsi_atsc_mgt_t* p_mgt, uint8_t i_version, uint8_t i_protocol,
- uint16_t i_table_id_extension, bool b_current_next);
+ * \fn void dvbpsi_atsc_InitMGT(dvbpsi_atsc_mgt_t* p_mgt, uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, uint8_t i_protocol, bool b_current_next);
* \brief Initialize a user-allocated dvbpsi_atsc_mgt_t structure.
* \param p_mgt pointer to the MGT structure
+ * \param i_table_id Table ID, 0xC7.
+ * \param i_extension Table ID extension, here 0x0000.
* \param i_version MGT version
* \param i_protocol PSIP Protocol version.
- * \param i_table_id_extension 0x0000.
* \param b_current_next current next indicator
* \return nothing.
*/
-void dvbpsi_atsc_InitMGT(dvbpsi_atsc_mgt_t* p_mgt, uint8_t i_version, uint8_t i_protocol,
- uint16_t i_table_id_extension, bool b_current_next);
+void dvbpsi_atsc_InitMGT(dvbpsi_atsc_mgt_t* p_mgt, uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, uint8_t i_protocol, bool b_current_next);
/*!
- * \fn dvbpsi_atsc_mgt_t *dvbpsi_atsc_NewMGT(uint8_t i_version, uint8_t i_protocol,
- uint16_t i_table_id_extension, bool b_current_next);
+ * \fn dvbpsi_atsc_mgt_t *dvbpsi_atsc_NewMGT(uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, uint8_t i_protocol, bool b_current_next);
* \brief Allocate and initialize a new dvbpsi_mgt_t structure.
- * \param i_network_id network id
+ * \param i_table_id Table ID, 0xC7.
+ * \param i_extension Table ID extension, here 0x0000.
* \param i_version MGT version
* \param i_protocol PSIP Protocol version.
* \param b_current_next current next indicator
* \return p_mgt pointer to the MGT structure, or NULL on failure
*/
-dvbpsi_atsc_mgt_t *dvbpsi_atsc_NewMGT(uint8_t i_version, uint8_t i_protocol,
- uint16_t i_table_id_extension, bool b_current_next);
+dvbpsi_atsc_mgt_t *dvbpsi_atsc_NewMGT(uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, uint8_t i_protocol, bool b_current_next);
/*****************************************************************************
* dvbpsi_atsc_EmptyMGT/dvbpsi_atsc_DeleteMGT
diff --git a/src/tables/atsc_stt.c b/src/tables/atsc_stt.c
index 8366d9d..ad7fa6c 100644
--- a/src/tables/atsc_stt.c
+++ b/src/tables/atsc_stt.c
@@ -154,11 +154,17 @@ void dvbpsi_atsc_DetachSTT(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_ex
*****************************************************************************
* Initialize a pre-allocated dvbpsi_atsc_stt_t structure.
*****************************************************************************/
-void dvbpsi_atsc_InitSTT(dvbpsi_atsc_stt_t *p_stt, uint8_t i_version)
+void dvbpsi_atsc_InitSTT(dvbpsi_atsc_stt_t *p_stt, uint8_t i_table_id,
+ uint16_t i_extension, uint8_t i_version, bool b_current_next)
{
assert(p_stt);
+ p_stt->i_table_id = i_table_id;
+ p_stt->i_extension = i_extension;
+
p_stt->i_version = i_version;
+ p_stt->b_current_next = b_current_next;
+
p_stt->p_first_descriptor = NULL;
}
@@ -167,12 +173,13 @@ void dvbpsi_atsc_InitSTT(dvbpsi_atsc_stt_t *p_stt, uint8_t i_version)
*****************************************************************************
* Allocate and initialize a dvbpsi_atsc_stt_t structure.
*****************************************************************************/
-dvbpsi_atsc_stt_t *dvbpsi_atsc_NewSTT(uint8_t i_version, bool b_current_next)
+dvbpsi_atsc_stt_t *dvbpsi_atsc_NewSTT(uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, bool b_current_next)
{
dvbpsi_atsc_stt_t *p_stt;
p_stt = (dvbpsi_atsc_stt_t*)malloc(sizeof(dvbpsi_atsc_stt_t));
if (p_stt != NULL)
- dvbpsi_atsc_InitSTT(p_stt, i_version);
+ dvbpsi_atsc_InitSTT(p_stt, i_table_id, i_extension, i_version, b_current_next);
return p_stt;
}
@@ -279,8 +286,8 @@ static bool dvbpsi_AddSectionSTT(dvbpsi_t *p_dvbpsi, dvbpsi_atsc_stt_decoder_t *
/* Initialize the structures if it's the first section received */
if (!p_decoder->p_building_stt)
{
- p_decoder->p_building_stt = dvbpsi_atsc_NewSTT(p_section->i_version,
- p_section->b_current_next);
+ p_decoder->p_building_stt = dvbpsi_atsc_NewSTT(p_section->i_table_id, p_section->i_extension,
+ p_section->i_version, p_section->b_current_next);
if (p_decoder->p_building_stt)
return false;
diff --git a/src/tables/atsc_stt.h b/src/tables/atsc_stt.h
index eca622c..a75459c 100644
--- a/src/tables/atsc_stt.h
+++ b/src/tables/atsc_stt.h
@@ -47,6 +47,9 @@ extern "C" {
*/
typedef struct dvbpsi_atsc_stt_s
{
+ uint8_t i_table_id; /*!< Table id */
+ uint16_t i_extension; /*!< Subtable id */
+
uint8_t i_version; /*!< PSIP Protocol version */
bool b_current_next; /*!< current_next_indicator */
@@ -103,22 +106,32 @@ void dvbpsi_atsc_DetachSTT(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_ex
* dvbpsi_atsc_InitSTT/dvbpsi_atsc_NewSTT
*****************************************************************************/
/*!
- * \fn void dvbpsi_atsc_InitSTT(dvbpsi_atsc_stt_t *p_stt, uint8_t i_protocol)
+ * \fn void dvbpsi_atsc_InitSTT(dvbpsi_atsc_stt_t *p_stt, uint8_t i_table_id,
+ uint16_t i_extension, uint8_t i_protocol,
+ bool b_current_next)
* \brief Initialize a user-allocated dvbpsi_atsc_stt_t structure.
+ * \param i_table_id Table ID, 0xCD.
+ * \param i_extension Table extension, ignored as this should always be 0.
* \param p_stt pointer to the STT structure
* \param i_version PSIP Protocol version.
+ * \param b_current_next current next indicator
* \return nothing.
*/
-void dvbpsi_atsc_InitSTT(dvbpsi_atsc_stt_t *p_stt, uint8_t i_protocol);
+void dvbpsi_atsc_InitSTT(dvbpsi_atsc_stt_t *p_stt, uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_protocol, bool b_current_next);
/*!
- * \fn dvbpsi_atsc_stt_t *dvbpsi_atsc_NewSTT(uint8_t i_version, bool b_current_next)
+ * \fn dvbpsi_atsc_stt_t *dvbpsi_atsc_NewSTT(uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, bool b_current_next)
* \brief Allocate and initialize a new dvbpsi_atsc_stt_t structure. Use ObjectRefDec to delete it.
+ * \param i_table_id Table ID, 0xCD.
+ * \param i_extension Table extension, ignored as this should always be 0.
* \param i_version PSIP Protocol version.
* \param b_current_next current next indicator
* \return p_stt pointer to the STT structure
*/
-dvbpsi_atsc_stt_t *dvbpsi_atsc_NewSTT(uint8_t i_version, bool b_current_next);
+dvbpsi_atsc_stt_t *dvbpsi_atsc_NewSTT(uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, bool b_current_next);
/*****************************************************************************
* dvbpsi_atsc_EmptySTT
diff --git a/src/tables/atsc_vct.c b/src/tables/atsc_vct.c
index 158db1d..7044fee 100644
--- a/src/tables/atsc_vct.c
+++ b/src/tables/atsc_vct.c
@@ -176,13 +176,13 @@ void dvbpsi_atsc_DetachVCT(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_ex
*****************************************************************************
* Allocate a new dvbpsi_atsc_vct_t structure and initialize it.
*****************************************************************************/
-dvbpsi_atsc_vct_t *dvbpsi_atsc_NewVCT(uint8_t i_protocol, uint16_t i_ts_id,
- bool b_cable_vct, uint8_t i_version, bool b_current_next)
+dvbpsi_atsc_vct_t *dvbpsi_atsc_NewVCT(uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_protocol, bool b_cable_vct, uint8_t i_version, bool b_current_next)
{
dvbpsi_atsc_vct_t *p_vct = (dvbpsi_atsc_vct_t*)malloc(sizeof(dvbpsi_atsc_vct_t));
if (p_vct != NULL)
- dvbpsi_atsc_InitVCT(p_vct, i_protocol, i_ts_id, b_cable_vct,
- i_version, b_current_next);
+ dvbpsi_atsc_InitVCT(p_vct, i_table_id, i_extension, i_protocol,
+ b_cable_vct, i_version, b_current_next);
return p_vct;
}
@@ -191,15 +191,17 @@ dvbpsi_atsc_vct_t *dvbpsi_atsc_NewVCT(uint8_t i_protocol, uint16_t i_ts_id,
*****************************************************************************
* Initialize a pre-allocated dvbpsi_atsc_vct_t structure.
*****************************************************************************/
-void dvbpsi_atsc_InitVCT(dvbpsi_atsc_vct_t* p_vct, uint8_t i_protocol,
- uint16_t i_ts_id, bool b_cable_vct,
+void dvbpsi_atsc_InitVCT(dvbpsi_atsc_vct_t* p_vct, uint8_t i_table_id,
+ uint16_t i_extension, uint8_t i_protocol, bool b_cable_vct,
uint8_t i_version, bool b_current_next)
{
assert(p_vct);
+ p_vct->i_table_id = i_table_id;
+ p_vct->i_extension = i_extension;
+
p_vct->i_version = i_version;
p_vct->b_current_next = b_current_next;
p_vct->i_protocol = i_protocol;
- p_vct->i_ts_id = i_ts_id;
p_vct->b_cable_vct = b_cable_vct;
p_vct->p_first_channel = NULL;
p_vct->p_first_descriptor = NULL;
@@ -379,7 +381,7 @@ static bool dvbpsi_CheckVCT(dvbpsi_t *p_dvbpsi, dvbpsi_atsc_vct_decoder_t *p_vct
assert(p_dvbpsi);
assert(p_vct_decoder);
- if (p_vct_decoder->p_building_vct->i_ts_id != p_section->i_extension)
+ if (p_vct_decoder->p_building_vct->i_extension != p_section->i_extension)
{
/* transport_stream_id */
dvbpsi_error(p_dvbpsi, "ATSC VCT decoder",
@@ -417,7 +419,8 @@ static bool dvbpsi_AddSectionVCT(dvbpsi_t *p_dvbpsi, dvbpsi_atsc_vct_decoder_t *
/* Initialize the structures if it's the first section received */
if (!p_vct_decoder->p_building_vct)
{
- p_vct_decoder->p_building_vct = dvbpsi_atsc_NewVCT(p_section->i_extension,
+ p_vct_decoder->p_building_vct = dvbpsi_atsc_NewVCT(
+ p_section->i_table_id, p_section->i_extension,
p_section->p_payload_start[0], p_section->i_table_id == 0xC9,
p_section->i_version, p_section->b_current_next);
if (p_vct_decoder->p_building_vct)
diff --git a/src/tables/atsc_vct.h b/src/tables/atsc_vct.h
index cfe7e9e..7bd15c6 100644
--- a/src/tables/atsc_vct.h
+++ b/src/tables/atsc_vct.h
@@ -88,9 +88,11 @@ typedef struct dvbpsi_atsc_vct_channel_s
*/
typedef struct dvbpsi_atsc_vct_s
{
+ uint8_t i_table_id; /*!< table id */
+ uint16_t i_extension; /*!< subtable id */
+
uint8_t i_version; /*!< version_number */
bool b_current_next; /*!< current_next_indicator */
- uint16_t i_ts_id; /*!< transport stream id */
uint8_t i_protocol; /*!< PSIP Protocol version */
bool b_cable_vct; /*!< 1 if this is a cable VCT, 0 if it is a Terrestrial VCT. */
@@ -147,30 +149,34 @@ void dvbpsi_atsc_DetachVCT(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_ex
* dvbpsi_atsc_InitVCT
*****************************************************************************/
/*!
- * \fn void dvbpsi_atsc_InitVCT(dvbpsi_atsc_vct_t* p_vct, uint8_t i_protocol,
+ * \fn void dvbpsi_atsc_InitVCT(dvbpsi_atsc_vct_t* p_vct, uint8_t i_table_id,
+ uint16_t i_extension, uint8_t i_protocol,
uint16_t i_ts_id, bool b_cable_vct,
uint8_t i_version, bool b_current_next)
* \brief Initialize a user-allocated dvbpsi_atsc_vct_t structure.
* \param p_vct pointer to the VCT structure
+ * \param i_table_id Table ID, 0xC8 or 0xC9.
+ * \param i_extension Table ID extension, here TS ID.
* \param i_protocol PSIP Protocol version.
- * \param i_ts_id Transport Stream id.
* \param b_cable_vct Whether this is CVCT or a TVCT.
* \param i_version VCT version
* \param b_current_next current next indicator
* \return nothing.
*/
-void dvbpsi_atsc_InitVCT(dvbpsi_atsc_vct_t* p_vct, uint8_t i_protocol,
- uint16_t i_ts_id, bool b_cable_vct,
+void dvbpsi_atsc_InitVCT(dvbpsi_atsc_vct_t* p_vct, uint8_t i_table_id,
+ uint16_t i_extension, uint8_t i_protocol, bool b_cable_vct,
uint8_t i_version, bool b_current_next);
/*****************************************************************************
* dvbpsi_atsc_NewVCT
*****************************************************************************/
/*!
- * \fn dvbpsi_atsc_vct_t *dvbpsi_atsc_NewVCT(uint8_t i_protocol, uint16_t i_ts_id,
- * bool b_cable_vct, uint8_t i_version, bool b_current_next);
+ * \fn dvbpsi_atsc_vct_t *dvbpsi_atsc_NewVCT(uint8_t i_table_id, uint16_t i_extension,
+ * uint8_t i_protocol, bool b_cable_vct, uint8_t i_version, bool b_current_next);
*
* \brief Allocate and initialize a new dvbpsi_vct_t structure.
+ * \param i_table_id Table ID, 0xC8 or 0xC9.
+ * \param i_extension Table ID extension, here TS ID.
* \param i_protocol PSIP Protocol version.
* \param i_network_id network id
* \param b_cable_vct Whether this is CVCT or a TVCT.
@@ -178,8 +184,9 @@ void dvbpsi_atsc_InitVCT(dvbpsi_atsc_vct_t* p_vct, uint8_t i_protocol,
* \param b_current_next current next indicator
* \return p_vct pointer to the VCT structure
*/
-dvbpsi_atsc_vct_t *dvbpsi_atsc_NewVCT(uint8_t i_protocol, uint16_t i_ts_id,
- bool b_cable_vct, uint8_t i_version, bool b_current_next);
+dvbpsi_atsc_vct_t *dvbpsi_atsc_NewVCT(uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_protocol, bool b_cable_vct, uint8_t i_version,
+ bool b_current_next);
/*****************************************************************************
* dvbpsi_atsc_EmptyVCT
diff --git a/src/tables/bat.c b/src/tables/bat.c
index 23435f2..c58aedd 100644
--- a/src/tables/bat.c
+++ b/src/tables/bat.c
@@ -136,11 +136,13 @@ void dvbpsi_bat_detach(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_extens
*****************************************************************************
* Initialize a pre-allocated dvbpsi_bat_t structure.
*****************************************************************************/
-void dvbpsi_bat_init(dvbpsi_bat_t* p_bat, uint16_t i_bouquet_id, uint8_t i_version,
- bool b_current_next)
+void dvbpsi_bat_init(dvbpsi_bat_t* p_bat, uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, bool b_current_next)
{
assert(p_bat);
- p_bat->i_bouquet_id = i_bouquet_id;
+ p_bat->i_table_id = i_table_id;
+ p_bat->i_extension = i_extension;
+
p_bat->i_version = i_version;
p_bat->b_current_next = b_current_next;
p_bat->p_first_ts = NULL;
@@ -152,12 +154,12 @@ void dvbpsi_bat_init(dvbpsi_bat_t* p_bat, uint16_t i_bouquet_id, uint8_t i_versi
*****************************************************************************
* Allocate and initialize a dvbpsi_bat_t structure.
*****************************************************************************/
-dvbpsi_bat_t *dvbpsi_bat_new(uint16_t i_bouquet_id, uint8_t i_version,
- bool b_current_next)
+dvbpsi_bat_t *dvbpsi_bat_new(uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, bool b_current_next)
{
dvbpsi_bat_t *p_bat = (dvbpsi_bat_t*)malloc(sizeof(dvbpsi_bat_t));
if(p_bat != NULL)
- dvbpsi_bat_init(p_bat, i_bouquet_id, i_version, b_current_next);
+ dvbpsi_bat_init(p_bat, i_table_id, i_extension, i_version, b_current_next);
return p_bat;
}
@@ -300,7 +302,7 @@ static bool dvbpsi_CheckBAT(dvbpsi_t *p_dvbpsi, dvbpsi_bat_decoder_t *p_bat_deco
assert(p_dvbpsi);
assert(p_bat_decoder);
- if (p_bat_decoder->p_building_bat->i_bouquet_id != p_section->i_extension)
+ if (p_bat_decoder->p_building_bat->i_extension != p_section->i_extension)
{
/* bouquet_id */
dvbpsi_error(p_dvbpsi, "BAT decoder", "'bouquet_id' differs"
@@ -337,7 +339,8 @@ static bool dvbpsi_AddSectionBAT(dvbpsi_t *p_dvbpsi, dvbpsi_bat_decoder_t *p_bat
/* Initialize the structures if it's the first section received */
if (!p_bat_decoder->p_building_bat)
{
- p_bat_decoder->p_building_bat = dvbpsi_bat_new(p_section->i_extension,
+ p_bat_decoder->p_building_bat = dvbpsi_bat_new(
+ p_section->i_table_id, p_section->i_extension,
p_section->i_version, p_section->b_current_next);
if (!p_bat_decoder->p_building_bat)
return false;
@@ -547,7 +550,7 @@ dvbpsi_psi_section_t* dvbpsi_bat_sections_generate(dvbpsi_t *p_dvbpsi, dvbpsi_ba
p_current->b_syntax_indicator = true;
p_current->b_private_indicator = true;
p_current->i_length = 13; /* including CRC_32 */
- p_current->i_extension = p_bat->i_bouquet_id;
+ p_current->i_extension = p_bat->i_extension;
p_current->i_version = p_bat->i_version;
p_current->b_current_next = p_bat->b_current_next;
p_current->i_number = 0;
@@ -585,7 +588,7 @@ dvbpsi_psi_section_t* dvbpsi_bat_sections_generate(dvbpsi_t *p_dvbpsi, dvbpsi_ba
p_current->b_syntax_indicator = true;
p_current->b_private_indicator = true;
p_current->i_length = 13; /* including CRC_32 */
- p_current->i_extension = p_bat->i_bouquet_id;
+ p_current->i_extension = p_bat->i_extension;
p_current->i_version = p_bat->i_version;
p_current->b_current_next = p_bat->b_current_next;
p_current->i_number = p_prev->i_number + 1;
@@ -656,7 +659,7 @@ dvbpsi_psi_section_t* dvbpsi_bat_sections_generate(dvbpsi_t *p_dvbpsi, dvbpsi_ba
p_current->b_syntax_indicator = true;
p_current->b_private_indicator = true;
p_current->i_length = 13; /* including CRC_32 */
- p_current->i_extension = p_bat->i_bouquet_id;
+ p_current->i_extension = p_bat->i_extension;
p_current->i_version = p_bat->i_version;
p_current->b_current_next = p_bat->b_current_next;
p_current->i_number = p_prev->i_number + 1;
diff --git a/src/tables/bat.h b/src/tables/bat.h
index 7ca7695..107fd0d 100644
--- a/src/tables/bat.h
+++ b/src/tables/bat.h
@@ -61,13 +61,12 @@ extern "C" {
*/
typedef struct dvbpsi_bat_ts_s
{
- uint16_t i_ts_id; /*!< transport stream id */
- uint16_t i_orig_network_id; /*!< original network id */
+ uint16_t i_ts_id; /*!< transport stream id */
+ uint16_t i_orig_network_id; /*!< original network id */
- dvbpsi_descriptor_t * p_first_descriptor; /*!< descriptor list */
+ dvbpsi_descriptor_t *p_first_descriptor; /*!< descriptor list */
-
- struct dvbpsi_bat_ts_s * p_next; /*!< next element of
+ struct dvbpsi_bat_ts_s *p_next; /*!< next element of
the list */
} dvbpsi_bat_ts_t;
@@ -89,18 +88,19 @@ typedef struct dvbpsi_bat_ts_s
*/
typedef struct dvbpsi_bat_s
{
- uint16_t i_bouquet_id; /*!< bouquet_id */
- uint8_t i_version; /*!< version_number */
- bool b_current_next; /*!< current_next_indicator */
+ uint8_t i_table_id; /*!< table id */
+ uint16_t i_extension; /*!< subtable id (here bouquet id) */
+
+ uint8_t i_version; /*!< version_number */
+ bool b_current_next; /*!< current_next_indicator */
- dvbpsi_descriptor_t * p_first_descriptor; /*!< descriptor list */
+ dvbpsi_descriptor_t * p_first_descriptor; /*!< descriptor list */
- dvbpsi_bat_ts_t * p_first_ts; /*!< transport stream
+ dvbpsi_bat_ts_t * p_first_ts; /*!< transport stream
description list */
} dvbpsi_bat_t;
-
/*****************************************************************************
* dvbpsi_bat_callback
*****************************************************************************/
@@ -116,8 +116,7 @@ typedef void (* dvbpsi_bat_callback)(void* p_cb_data, dvbpsi_bat_t* p_new_bat);
*****************************************************************************/
/*!
* \fn bool dvbpsi_bat_attach(dvbpsi_t *p_dvbpsi, uint8_t i_table_id,
- uint16_t i_extension, dvbpsi_bat_callback pf_callback,
- void* p_cb_data)
+ uint16_t i_extension, dvbpsi_bat_callback pf_callback, void* p_cb_data)
* \brief Creation and initialization of a BAT decoder. It will be attached to p_dvbpsi.
* \param p_dvbpsi dvbpsi handle to Subtable demultiplexor to which the decoder is attached.
* \param i_table_id Table ID, 0x4a.
@@ -126,9 +125,8 @@ typedef void (* dvbpsi_bat_callback)(void* p_cb_data, dvbpsi_bat_t* p_new_bat);
* \param p_cb_data private data given in argument to the callback.
* \return true on success, false on failure
*/
-bool dvbpsi_bat_attach(dvbpsi_t *p_dvbpsi, uint8_t i_table_id,
- uint16_t i_extension, dvbpsi_bat_callback pf_callback,
- void* p_cb_data);
+bool dvbpsi_bat_attach(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_extension,
+ dvbpsi_bat_callback pf_callback, void* p_cb_data);
/*****************************************************************************
* dvbpsi_bat_detach
@@ -142,36 +140,37 @@ bool dvbpsi_bat_attach(dvbpsi_t *p_dvbpsi, uint8_t i_table_id,
* \param i_extension Table ID extension, here bouquet ID.
* \return nothing.
*/
-void dvbpsi_bat_detach(dvbpsi_t *p_dvbpsi, uint8_t i_table_id,
- uint16_t i_extension);
+void dvbpsi_bat_detach(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_extension);
/*****************************************************************************
* dvbpsi_bat_init/dvbpsi_bat_new
*****************************************************************************/
/*!
- * \fn void dvbpsi_bat_init(dvbpsi_bat_t *p_bat, uint16_t i_bouquet_id, uint8_t i_version,
- bool b_current_next)
+ * \fn void dvbpsi_bat_init(dvbpsi_bat_t *p_bat, uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, bool b_current_next)
* \brief Initialize a user-allocated dvbpsi_bat_t structure.
* \param p_bat pointer to the BAT structure
- * \param i_bouquet_id bouquet ID
+ * \param i_table_id Table ID, 0x4a.
+ * \param i_extension Table ID extension, here bouquet ID.
* \param i_version BAT version
* \param b_current_next current next indicator
* \return nothing.
*/
-void dvbpsi_bat_init(dvbpsi_bat_t *p_bat, uint16_t i_bouquet_id, uint8_t i_version,
- bool b_current_next);
+void dvbpsi_bat_init(dvbpsi_bat_t *p_bat, uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, bool b_current_next);
/*!
- * \fn dvbpsi_bat_t *dvbpsi_bat_new(uint16_t i_bouquet_id, uint8_t i_version,
- * bool b_current_next)
+ * \fn dvbpsi_bat_t *dvbpsi_bat_new(uint8_t i_table_id, uint16_t i_extension,
+ * uint8_t i_version, bool b_current_next)
* \brief Allocate and initialize a new dvbpsi_bat_t structure.
- * \param i_bouquet_id bouquet ID
+ * \param i_table_id Table ID, 0x4a.
+ * \param i_extension Table ID extension, here bouquet ID.
* \param i_version BAT version
* \param b_current_next current next indicator
* \return p_bat pointer to the BAT structure
*/
-dvbpsi_bat_t *dvbpsi_bat_new(uint16_t i_bouquet_id, uint8_t i_version,
- bool b_current_next);
+dvbpsi_bat_t *dvbpsi_bat_new(uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, bool b_current_next);
/*****************************************************************************
* dvbpsi_bat_empty/dvbpsi_bat_delete
diff --git a/src/tables/eit.c b/src/tables/eit.c
index f63ea9f..e2205a4 100644
--- a/src/tables/eit.c
+++ b/src/tables/eit.c
@@ -137,12 +137,14 @@ void dvbpsi_eit_detach(dvbpsi_t *p_dvbpsi, uint8_t i_table_id,
*****************************************************************************
* Initialize a pre-allocated dvbpsi_eit_t structure.
*****************************************************************************/
-void dvbpsi_eit_init(dvbpsi_eit_t* p_eit, uint16_t i_service_id, uint8_t i_version,
- bool b_current_next, uint16_t i_ts_id, uint16_t i_network_id,
- uint8_t i_segment_last_section_number,
- uint8_t i_last_table_id)
+void dvbpsi_eit_init(dvbpsi_eit_t* p_eit, uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, bool b_current_next, uint16_t i_ts_id,
+ uint16_t i_network_id, uint8_t i_segment_last_section_number,
+ uint8_t i_last_table_id)
{
- p_eit->i_service_id = i_service_id;
+ p_eit->i_table_id = i_table_id;
+ p_eit->i_extension = i_extension;
+
p_eit->i_version = i_version;
p_eit->b_current_next = b_current_next;
p_eit->i_ts_id = i_ts_id;
@@ -157,15 +159,16 @@ void dvbpsi_eit_init(dvbpsi_eit_t* p_eit, uint16_t i_service_id, uint8_t i_versi
*****************************************************************************
* Allocate and Initialize a new dvbpsi_eit_t structure.
*****************************************************************************/
-dvbpsi_eit_t* dvbpsi_eit_new(uint16_t i_service_id, uint8_t i_version,
- bool b_current_next, uint16_t i_ts_id,
+dvbpsi_eit_t* dvbpsi_eit_new(uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, bool b_current_next, uint16_t i_ts_id,
uint16_t i_network_id, uint8_t i_segment_last_section_number,
uint8_t i_last_table_id)
{
dvbpsi_eit_t *p_eit = (dvbpsi_eit_t*)malloc(sizeof(dvbpsi_eit_t));
if (p_eit != NULL)
- dvbpsi_eit_init(p_eit, i_service_id, i_version, b_current_next, i_ts_id,
- i_network_id, i_segment_last_section_number, i_last_table_id);
+ dvbpsi_eit_init(p_eit, i_table_id, i_extension, i_version,
+ b_current_next, i_ts_id, i_network_id, i_segment_last_section_number,
+ i_last_table_id);
return p_eit;
}
@@ -280,7 +283,7 @@ static bool dvbpsi_CheckEIT(dvbpsi_t *p_dvbpsi, dvbpsi_eit_decoder_t *p_eit_deco
assert(p_dvbpsi);
assert(p_eit_decoder);
- if (p_eit_decoder->p_building_eit->i_service_id != p_section->i_extension)
+ if (p_eit_decoder->p_building_eit->i_extension != p_section->i_extension)
{
/* service_id */
dvbpsi_error(p_dvbpsi, "EIT decoder",
@@ -370,7 +373,9 @@ static bool dvbpsi_AddSectionEIT(dvbpsi_t *p_dvbpsi, dvbpsi_eit_decoder_t *p_eit
/* Initialize the structures if it's the first section received */
if (!p_eit_decoder->p_building_eit)
{
- p_eit_decoder->p_building_eit = dvbpsi_eit_new(p_section->i_extension,
+ p_eit_decoder->p_building_eit = dvbpsi_eit_new(
+ p_section->i_table_id,
+ p_section->i_extension,
p_section->i_version,
p_section->b_current_next,
((uint16_t)(p_section->p_payload_start[0]) << 8)
@@ -561,7 +566,7 @@ static dvbpsi_psi_section_t* NewEITSection(dvbpsi_eit_t* p_eit, int i_table_id,
p_result->b_private_indicator = 1;
p_result->i_length = 15; /* header: 11B + CRC32 */
- p_result->i_extension = p_eit->i_service_id;
+ p_result->i_extension = p_eit->i_extension;
p_result->i_version = p_eit->i_version;
p_result->b_current_next = p_eit->b_current_next;
p_result->i_number = i_section_number;
diff --git a/src/tables/eit.h b/src/tables/eit.h
index 5127bcd..23a33ba 100644
--- a/src/tables/eit.h
+++ b/src/tables/eit.h
@@ -85,15 +85,17 @@ typedef struct dvbpsi_eit_event_s
*/
typedef struct dvbpsi_eit_s
{
- uint16_t i_service_id; /*!< service_id */
- uint8_t i_version; /*!< version_number */
- bool b_current_next; /*!< current_next_indicator */
- uint16_t i_ts_id; /*!< transport stream id */
- uint16_t i_network_id; /*!< original network id */
- uint8_t i_segment_last_section_number; /*!< segment last section number */
- uint8_t i_last_table_id; /*!< last table id */
+ uint8_t i_table_id; /*!< table id */
+ uint16_t i_extension; /*!< subtable id */
- dvbpsi_eit_event_t * p_first_event; /*!< event information list */
+ uint8_t i_version; /*!< version_number */
+ bool b_current_next; /*!< current_next_indicator */
+ uint16_t i_ts_id; /*!< transport stream id */
+ uint16_t i_network_id; /*!< original network id */
+ uint8_t i_segment_last_section_number; /*!< segment last section number */
+ uint8_t i_last_table_id; /*!< last table id */
+
+ dvbpsi_eit_event_t *p_first_event; /*!< event information list */
} dvbpsi_eit_t;
@@ -101,8 +103,7 @@ typedef struct dvbpsi_eit_s
* dvbpsi_eit_callback
*****************************************************************************/
/*!
- * \typedef void (* dvbpsi_eit_callback)(void* p_cb_data,
- dvbpsi_eit_t* p_new_eit)
+ * \typedef void (* dvbpsi_eit_callback)(void* p_cb_data, dvbpsi_eit_t* p_new_eit)
* \brief Callback type definition.
*/
typedef void (* dvbpsi_eit_callback)(void* p_cb_data, dvbpsi_eit_t* p_new_eit);
@@ -122,8 +123,8 @@ typedef void (* dvbpsi_eit_callback)(void* p_cb_data, dvbpsi_eit_t* p_new_eit);
* \param p_cb_data private data given in argument to the callback.
* \return true on success, false on failure
*/
-bool dvbpsi_eit_attach(dvbpsi_t *p_dvbpsi, uint8_t i_table_id,
- uint16_t i_extension, dvbpsi_eit_callback pf_callback, void* p_cb_data);
+bool dvbpsi_eit_attach(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_extension,
+ dvbpsi_eit_callback pf_callback, void* p_cb_data);
/*****************************************************************************
* dvbpsi_eit_detach
@@ -144,13 +145,15 @@ void dvbpsi_eit_detach(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_extens
* dvbpsi_eit_init/dvbpsi_eit_new
*****************************************************************************/
/*!
- * \fn void dvbpsi_eit_init(dvbpsi_eit_t* p_eit, uint16_t i_service_id,
+ * \fn void dvbpsi_eit_init(dvbpsi_eit_t* p_eit, uint8_t i_table_id,
+ uint16_t i_extension, uint16_t i_service_id,
uint8_t i_version, bool b_current_next, uint16_t i_ts_id,
uint16_t i_network_id, uint8_t i_segment_last_section_number,
uint8_t i_last_table_id)
* \brief Initialize a user-allocated dvbpsi_eit_t structure.
* \param p_eit pointer to the EIT structure
- * \param i_service_id service ID
+ * \param i_table_id Table ID, 0x4E, 0x4F, or 0x50-0x6F.
+ * \param i_extension Table ID extension, here service ID.
* \param i_version EIT version
* \param b_current_next current next indicator
* \param i_ts_id transport stream ID
@@ -159,18 +162,20 @@ void dvbpsi_eit_detach(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_extens
* \param i_last_table_id i_last_table_id
* \return nothing.
*/
-void dvbpsi_eit_init(dvbpsi_eit_t* p_eit, uint16_t i_service_id, uint8_t i_version,
- bool b_current_next, uint16_t i_ts_id, uint16_t i_network_id,
- uint8_t i_segment_last_section_number,
- uint8_t i_last_table_id);
+void dvbpsi_eit_init(dvbpsi_eit_t* p_eit, uint8_t i_table_id,
+ uint16_t i_extension, uint8_t i_version,
+ bool b_current_next, uint16_t i_ts_id, uint16_t i_network_id,
+ uint8_t i_segment_last_section_number,
+ uint8_t i_last_table_id);
/*!
- * \fn dvbpsi_eit_t* dvbpsi_eit_new(uint16_t i_service_id,
- uint8_t i_version, bool b_current_next, uint16_t i_ts_id,
- uint16_t i_network_id, uint8_t i_segment_last_section_number,
- uint8_t i_last_table_id)
+ * \fn dvbpsi_eit_t* dvbpsi_eit_new(uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, bool b_current_next,
+ uint16_t i_ts_id, uint16_t i_network_id, uint8_t i_segment_last_section_number,
+ uint8_t i_last_table_id)
* \brief Allocate and initialize a new dvbpsi_eit_t structure.
- * \param i_service_id service ID
+ * \param i_table_id Table ID, 0x4E, 0x4F, or 0x50-0x6F.
+ * \param i_extension Table ID extension, here service ID.
* \param i_version EIT version
* \param b_current_next current next indicator
* \param i_ts_id transport stream ID
@@ -179,10 +184,11 @@ void dvbpsi_eit_init(dvbpsi_eit_t* p_eit, uint16_t i_service_id, uint8_t i_versi
* \param i_last_table_id i_last_table_id
* \return p_eit pointer to the EIT structure
*/
-dvbpsi_eit_t* dvbpsi_eit_new(uint16_t i_service_id,
- uint8_t i_version, bool b_current_next, uint16_t i_ts_id,
- uint16_t i_network_id, uint8_t i_segment_last_section_number,
- uint8_t i_last_table_id);
+dvbpsi_eit_t* dvbpsi_eit_new(uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, bool b_current_next,
+ uint16_t i_ts_id, uint16_t i_network_id,
+ uint8_t i_segment_last_section_number,
+ uint8_t i_last_table_id);
/*****************************************************************************
* dvbpsi_eit_empty/dvbpsi_eit_delete
diff --git a/src/tables/nit.c b/src/tables/nit.c
index 15bc0b6..c3d042f 100644
--- a/src/tables/nit.c
+++ b/src/tables/nit.c
@@ -106,8 +106,7 @@ bool dvbpsi_nit_attach(dvbpsi_t* p_dvbpsi, uint8_t i_table_id,
*****************************************************************************
* Close a NIT decoder.
*****************************************************************************/
-void dvbpsi_nit_detach(dvbpsi_t * p_dvbpsi, uint8_t i_table_id,
- uint16_t i_extension)
+void dvbpsi_nit_detach(dvbpsi_t * p_dvbpsi, uint8_t i_table_id, uint16_t i_extension)
{
dvbpsi_demux_t *p_demux = (dvbpsi_demux_t *) p_dvbpsi->p_decoder;
@@ -138,9 +137,12 @@ void dvbpsi_nit_detach(dvbpsi_t * p_dvbpsi, uint8_t i_table_id,
*****************************************************************************
* Initialize a pre-allocated dvbpsi_nit_t structure.
*****************************************************************************/
-void dvbpsi_nit_init(dvbpsi_nit_t* p_nit, uint16_t i_network_id,
- uint8_t i_version, bool b_current_next)
+void dvbpsi_nit_init(dvbpsi_nit_t* p_nit, uint8_t i_table_id, uint16_t i_extension,
+ uint16_t i_network_id, uint8_t i_version, bool b_current_next)
{
+ p_nit->i_table_id = i_table_id;
+ p_nit->i_extension = i_extension;
+
p_nit->i_network_id = i_network_id;
p_nit->i_version = i_version;
p_nit->b_current_next = b_current_next;
@@ -153,12 +155,14 @@ void dvbpsi_nit_init(dvbpsi_nit_t* p_nit, uint16_t i_network_id,
*****************************************************************************
* Allocate and initialize a dvbpsi_nit_t structure.
*****************************************************************************/
-dvbpsi_nit_t *dvbpsi_nit_new(uint16_t i_network_id, uint8_t i_version,
- bool b_current_next)
+dvbpsi_nit_t *dvbpsi_nit_new(uint8_t i_table_id, uint16_t i_extension,
+ uint16_t i_network_id, uint8_t i_version,
+ bool b_current_next)
{
dvbpsi_nit_t*p_nit = (dvbpsi_nit_t*)malloc(sizeof(dvbpsi_nit_t));
if (p_nit != NULL)
- dvbpsi_nit_init(p_nit, i_network_id, i_version, b_current_next);
+ dvbpsi_nit_init(p_nit, i_table_id, i_extension, i_network_id,
+ i_version, b_current_next);
return p_nit;
}
@@ -331,8 +335,9 @@ static bool dvbpsi_AddSectionNIT(dvbpsi_t *p_dvbpsi, dvbpsi_nit_decoder_t *p_nit
/* Initialize the structures if it's the first section received */
if (p_nit_decoder->p_building_nit == NULL)
{
- p_nit_decoder->p_building_nit = dvbpsi_nit_new(p_nit_decoder->i_network_id,
- p_section->i_version, p_section->b_current_next);
+ p_nit_decoder->p_building_nit = dvbpsi_nit_new(p_section->i_table_id,
+ p_section->i_extension, p_nit_decoder->i_network_id,
+ p_section->i_version, p_section->b_current_next);
if (p_nit_decoder->p_building_nit == NULL)
return false;
p_nit_decoder->i_last_section_number = p_section->i_last_number;
diff --git a/src/tables/nit.h b/src/tables/nit.h
index ac4963a..0958a0b 100644
--- a/src/tables/nit.h
+++ b/src/tables/nit.h
@@ -82,13 +82,16 @@ typedef struct dvbpsi_nit_ts_s
*/
typedef struct dvbpsi_nit_s
{
- uint16_t i_network_id; /*!< network_id */
- uint8_t i_version; /*!< version_number */
- bool b_current_next; /*!< current_next_indicator */
+ uint8_t i_table_id; /*!< table id */
+ uint16_t i_extension; /*!< subtable id */
- dvbpsi_descriptor_t * p_first_descriptor; /*!< descriptor list */
+ uint16_t i_network_id; /*!< network_id */
+ uint8_t i_version; /*!< version_number */
+ bool b_current_next; /*!< current_next_indicator */
- dvbpsi_nit_ts_t * p_first_ts; /*!< TS list */
+ dvbpsi_descriptor_t *p_first_descriptor; /*!< descriptor list */
+
+ dvbpsi_nit_ts_t * p_first_ts; /*!< TS list */
} dvbpsi_nit_t;
@@ -106,9 +109,8 @@ typedef void (* dvbpsi_nit_callback)(void* p_cb_data, dvbpsi_nit_t* p_new_nit);
* dvbpsi_nit_attach
*****************************************************************************/
/*!
- * \fn bool dvbpsi_nit_attach(dvbpsi_t* p_dvbpsi, uint8_t i_table_id,
- uint16_t i_extension, dvbpsi_nit_callback pf_callback,
- void* p_cb_data)
+ * \fn bool dvbpsi_nit_attach(dvbpsi_t* p_dvbpsi, uint8_t i_table_id, uint16_t i_extension,
+ dvbpsi_nit_callback pf_callback, void* p_cb_data)
* \brief Creation and initialization of a NIT decoder. It is attached to p_dvbpsi.
* \param p_dvbpsi dvbpsi handle to Subtable demultiplexor to which the decoder is attached.
* \param i_table_id Table ID, 0x4E, 0x4F, or 0x50-0x6F.
@@ -117,9 +119,8 @@ typedef void (* dvbpsi_nit_callback)(void* p_cb_data, dvbpsi_nit_t* p_new_nit);
* \param p_cb_data private data given in argument to the callback.
* \return true on success, false on failure
*/
-bool dvbpsi_nit_attach(dvbpsi_t* p_dvbpsi, uint8_t i_table_id,
- uint16_t i_extension, dvbpsi_nit_callback pf_callback,
- void* p_cb_data);
+bool dvbpsi_nit_attach(dvbpsi_t* p_dvbpsi, uint8_t i_table_id, uint16_t i_extension,
+ dvbpsi_nit_callback pf_callback, void* p_cb_data);
/*****************************************************************************
* dvbpsi_nit_detach
@@ -140,28 +141,34 @@ void dvbpsi_nit_detach(dvbpsi_t* p_dvbpsi, uint8_t i_table_id,
* dvbpsi_nit_init/dvbpsi_nit_new
*****************************************************************************/
/*!
- * \fn void dvbpsi_nit_init(dvbpsi_nit_t* p_nit, uint16_t i_network_id,
- uint8_t i_version, bool b_current_next)
+ * \fn void dvbpsi_nit_init(dvbpsi_nit_t* p_nit, uint8_t i_table_id, uint16_t i_extension,
+ uint16_t i_network_id, uint8_t i_version, bool b_current_next)
* \brief Initialize a user-allocated dvbpsi_nit_t structure.
+ * \param i_table_id Table ID, 0x4E, 0x4F, or 0x50-0x6F.
+ * \param i_extension Table ID extension, here service ID.
* \param p_nit pointer to the NIT structure
* \param i_network_id network id
* \param i_version NIT version
* \param b_current_next current next indicator
* \return nothing.
*/
-void dvbpsi_nit_init(dvbpsi_nit_t* p_nit, uint16_t i_network_id,
- uint8_t i_version, bool b_current_next);
+void dvbpsi_nit_init(dvbpsi_nit_t* p_nit, uint8_t i_table_id, uint16_t i_extension,
+ uint16_t i_network_id, uint8_t i_version, bool b_current_next);
/*!
- * \fn dvbpsi_nit_t *dvbpsi_nit_new(uint16_t i_network_id, uint8_t i_version,
- * bool b_current_next);
+ * \fn dvbpsi_nit_t *dvbpsi_nit_new(uint8_t i_table_id, uint16_t i_extension,
+ * uint16_t i_network_id, uint8_t i_version,
+ * bool b_current_next);
* \brief Allocate and initialize a new dvbpsi_nit_t structure.
+ * \param i_table_id Table ID, 0x4E, 0x4F, or 0x50-0x6F.
+ * \param i_extension Table ID extension, here service ID.
* \param i_network_id network id
* \param i_version NIT version
* \param b_current_next current next indicator
* \return p_nit pointer to the NIT structure
*/
-dvbpsi_nit_t *dvbpsi_nit_new(uint16_t i_network_id, uint8_t i_version,
+dvbpsi_nit_t *dvbpsi_nit_new(uint8_t i_table_id, uint16_t i_extension,
+ uint16_t i_network_id, uint8_t i_version,
bool b_current_next);
/*****************************************************************************
diff --git a/src/tables/pmt.c b/src/tables/pmt.c
index df073f7..35836b8 100644
--- a/src/tables/pmt.c
+++ b/src/tables/pmt.c
@@ -124,7 +124,7 @@ dvbpsi_pmt_t* dvbpsi_pmt_new(uint16_t i_program_number, uint8_t i_version,
dvbpsi_pmt_t *p_pmt = (dvbpsi_pmt_t*)malloc(sizeof(dvbpsi_pmt_t));
if(p_pmt != NULL)
dvbpsi_pmt_init(p_pmt, i_program_number, i_version,
- b_current_next, i_pcr_pid);
+ b_current_next, i_pcr_pid);
return p_pmt;
}
diff --git a/src/tables/sdt.c b/src/tables/sdt.c
index 4ef88da..c599ec3 100644
--- a/src/tables/sdt.c
+++ b/src/tables/sdt.c
@@ -138,12 +138,14 @@ void dvbpsi_sdt_detach(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_extens
*****************************************************************************
* Initialize a pre-allocated dvbpsi_sdt_t structure.
*****************************************************************************/
-void dvbpsi_sdt_init(dvbpsi_sdt_t* p_sdt, uint16_t i_ts_id, uint8_t i_version,
- bool b_current_next, uint16_t i_network_id)
+void dvbpsi_sdt_init(dvbpsi_sdt_t* p_sdt, uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, bool b_current_next, uint16_t i_network_id)
{
assert(p_sdt);
- p_sdt->i_ts_id = i_ts_id;
+ p_sdt->i_table_id = i_table_id;
+ p_sdt->i_extension = i_extension;
+
p_sdt->i_version = i_version;
p_sdt->b_current_next = b_current_next;
p_sdt->i_network_id = i_network_id;
@@ -155,12 +157,13 @@ void dvbpsi_sdt_init(dvbpsi_sdt_t* p_sdt, uint16_t i_ts_id, uint8_t i_version,
*****************************************************************************
* Allocate and Initialize a new dvbpsi_sdt_t structure.
*****************************************************************************/
-dvbpsi_sdt_t *dvbpsi_sdt_new(uint16_t i_ts_id, uint8_t i_version,
+dvbpsi_sdt_t *dvbpsi_sdt_new(uint8_t i_table_id, uint16_t i_extension, uint8_t i_version,
bool b_current_next, uint16_t i_network_id)
{
dvbpsi_sdt_t *p_sdt = (dvbpsi_sdt_t*)malloc(sizeof(dvbpsi_sdt_t));
if (p_sdt != NULL)
- dvbpsi_sdt_init(p_sdt, i_ts_id, i_version, b_current_next, i_network_id);
+ dvbpsi_sdt_init(p_sdt, i_table_id, i_extension, i_version,
+ b_current_next, i_network_id);
return p_sdt;
}
@@ -319,10 +322,12 @@ static bool dvbpsi_AddSectionSDT(dvbpsi_t *p_dvbpsi, dvbpsi_sdt_decoder_t *p_sdt
/* Initialize the structures if it's the first section received */
if (!p_sdt_decoder->p_building_sdt)
{
- p_sdt_decoder->p_building_sdt = dvbpsi_sdt_new(p_section->i_extension,
+ p_sdt_decoder->p_building_sdt =
+ dvbpsi_sdt_new(p_section->i_table_id, p_section->i_extension,
p_section->i_version, p_section->b_current_next,
((uint16_t)(p_section->p_payload_start[0]) << 8)
| p_section->p_payload_start[1]);
+
if (p_sdt_decoder->p_building_sdt == NULL)
return false;
p_sdt_decoder->i_last_section_number = p_section->i_last_number;
diff --git a/src/tables/sdt.h b/src/tables/sdt.h
index 9bac4dc..39b19d5 100644
--- a/src/tables/sdt.h
+++ b/src/tables/sdt.h
@@ -86,12 +86,17 @@ typedef struct dvbpsi_sdt_service_s
*/
typedef struct dvbpsi_sdt_s
{
- uint16_t i_ts_id; /*!< transport_stream_id */
- uint8_t i_version; /*!< version_number */
- bool b_current_next; /*!< current_next_indicator */
- uint16_t i_network_id; /*!< original network id */
+ /* PSI table members */
+ uint8_t i_table_id; /*!< table id */
+ uint16_t i_extension; /*!< subtable id */
- dvbpsi_sdt_service_t * p_first_service; /*!< service description
+ /* Table specific */
+ uint16_t i_ts_id; /*!< transport_stream_id */
+ uint8_t i_version; /*!< version_number */
+ bool b_current_next; /*!< current_next_indicator */
+ uint16_t i_network_id; /*!< original network id */
+
+ dvbpsi_sdt_service_t * p_first_service; /*!< service description
list */
} dvbpsi_sdt_t;
@@ -142,30 +147,33 @@ void dvbpsi_sdt_detach(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_extens
* dvbpsi_sdt_init/dvbpsi_NewSDT
*****************************************************************************/
/*!
- * \fn void dvbpsi_sdt_init(dvbpsi_sdt_t* p_sdt, uint16_t i_ts_id,
- uint8_t i_version, bool b_current_next, uint16_t i_network_id)
+ * \fn void dvbpsi_sdt_init(dvbpsi_sdt_t* p_sdt, uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, bool b_current_next, uint16_t i_network_id)
* \brief Initialize a user-allocated dvbpsi_sdt_t structure.
* \param p_sdt pointer to the SDT structure
- * \param i_ts_id transport stream ID
+ * \param i_table_id Table ID, 0x42 or 0x46.
+ * \param i_extension Table ID extension, here TS ID.
* \param i_version SDT version
* \param b_current_next current next indicator
* \param i_network_id original network id
* \return nothing.
*/
-void dvbpsi_sdt_init(dvbpsi_sdt_t *p_sdt, uint16_t i_ts_id, uint8_t i_version,
- bool b_current_next, uint16_t i_network_id);
+void dvbpsi_sdt_init(dvbpsi_sdt_t *p_sdt, uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, bool b_current_next, uint16_t i_network_id);
/*!
- * \fn dvbpsi_sdt_t *dvbpsi_sdt_new(uint16_t i_ts_id, uint8_t i_version,
+ * \fn dvbpsi_sdt_t *dvbpsi_sdt_new(uint8_t i_table_id, uint16_t i_extension, uint8_t i_version,
bool b_current_next, uint16_t i_network_id)
* \brief Allocate and initialize a new dvbpsi_sdt_t structure.
+ * \param i_table_id Table ID, 0x42 or 0x46.
+ * \param i_extension Table ID extension, here TS ID.
* \param i_ts_id transport stream ID
* \param i_version SDT version
* \param b_current_next current next indicator
* \param i_network_id original network id
* \return p_sdt pointer to the SDT structure
*/
-dvbpsi_sdt_t *dvbpsi_sdt_new(uint16_t i_ts_id, uint8_t i_version,
+dvbpsi_sdt_t *dvbpsi_sdt_new(uint8_t i_table_id, uint16_t i_extension, uint8_t i_version,
bool b_current_next, uint16_t i_network_id);
/*****************************************************************************
diff --git a/src/tables/sis.c b/src/tables/sis.c
index 9712c90..c5d375b 100644
--- a/src/tables/sis.c
+++ b/src/tables/sis.c
@@ -104,8 +104,7 @@ bool dvbpsi_sis_attach(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_extens
*****************************************************************************
* Close a SIS decoder.
*****************************************************************************/
-void dvbpsi_sis_detach(dvbpsi_t *p_dvbpsi, uint8_t i_table_id,
- uint16_t i_extension)
+void dvbpsi_sis_detach(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_extension)
{
assert(p_dvbpsi);
assert(p_dvbpsi->p_decoder);
@@ -141,10 +140,12 @@ void dvbpsi_sis_detach(dvbpsi_t *p_dvbpsi, uint8_t i_table_id,
*****************************************************************************
* Initialize a pre-allocated dvbpsi_sis_t structure.
*****************************************************************************/
-void dvbpsi_sis_init(dvbpsi_sis_t *p_sis, uint16_t i_ts_id, uint8_t i_version,
- bool b_current_next, uint8_t i_protocol_version)
+void dvbpsi_sis_init(dvbpsi_sis_t *p_sis, uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, bool b_current_next, uint8_t i_protocol_version)
{
- p_sis->i_ts_id = i_ts_id;
+ p_sis->i_table_id = i_table_id;
+ p_sis->i_extension = i_extension;
+
p_sis->i_version = i_version;
p_sis->b_current_next = b_current_next;
@@ -178,12 +179,13 @@ void dvbpsi_sis_init(dvbpsi_sis_t *p_sis, uint16_t i_ts_id, uint8_t i_version,
*****************************************************************************
* Allocate and Initialize a new dvbpsi_sis_t structure.
*****************************************************************************/
-dvbpsi_sis_t* dvbpsi_sis_new(uint16_t i_ts_id, uint8_t i_version,
- bool b_current_next, uint8_t i_protocol_version)
+dvbpsi_sis_t* dvbpsi_sis_new(uint8_t i_table_id, uint16_t i_extension, uint8_t i_version,
+ bool b_current_next, uint8_t i_protocol_version)
{
dvbpsi_sis_t* p_sis = (dvbpsi_sis_t*)malloc(sizeof(dvbpsi_sis_t));
if (p_sis != NULL)
- dvbpsi_sis_init(p_sis, i_ts_id, i_version, b_current_next, i_protocol_version);
+ dvbpsi_sis_init(p_sis, i_table_id, i_extension, i_version,
+ b_current_next, i_protocol_version);
return p_sis;
}
@@ -268,7 +270,7 @@ static bool dvbpsi_CheckSIS(dvbpsi_t *p_dvbpsi, dvbpsi_sis_decoder_t* p_sis_deco
" while no discontinuity has occured");
b_reinit = true;
}
- else if (p_sis_decoder->p_building_sis->i_ts_id != p_section->i_extension)
+ else if (p_sis_decoder->p_building_sis->i_extension != p_section->i_extension)
{
dvbpsi_error(p_dvbpsi, "SIS decoder",
"'transport_stream_id' differs"
@@ -305,8 +307,9 @@ static bool dvbpsi_AddSectionSIS(dvbpsi_t *p_dvbpsi, dvbpsi_sis_decoder_t *p_sis
/* Initialize the structures if it's the first section received */
if (!p_sis_decoder->p_building_sis)
{
- p_sis_decoder->p_building_sis = dvbpsi_sis_new(p_section->i_extension,
- p_section->i_version, p_section->b_current_next, 0);
+ p_sis_decoder->p_building_sis = dvbpsi_sis_new(
+ p_section->i_table_id, p_section->i_extension,
+ p_section->i_version, p_section->b_current_next, 0);
if (p_sis_decoder->p_building_sis == NULL)
return false;
p_sis_decoder->i_last_section_number = p_section->i_last_number;
diff --git a/src/tables/sis.h b/src/tables/sis.h
index a339a6c..339d148 100644
--- a/src/tables/sis.h
+++ b/src/tables/sis.h
@@ -54,6 +54,9 @@ extern "C" {
typedef struct dvbpsi_sis_s
{
/* section */
+ uint8_t i_table_id; /*!< table id */
+ uint16_t i_extension; /*!< subtable id */
+
uint16_t i_ts_id; /*!< transport_stream_id */
uint8_t i_version; /*!< version_number */
uint8_t i_protocol_version; /*!< Protocol version
@@ -353,7 +356,7 @@ typedef void (* dvbpsi_sis_callback)(void* p_cb_data, dvbpsi_sis_t* p_new_sis);
* \brief Creation and initialization of a SIS decoder. It is attached to p_dvbpsi.
* \param p_dvbpsi pointer to dvbpsi to hold decoder/demuxer structure
* \param i_table_id Table ID, 0xFC.
- * \param i_extension Table ID extension, here TS ID.
+ * \param i_extension Table ID extension.
* \param pf_callback function to call back on new SIS.
* \param p_cb_data private data given in argument to the callback.
* \return true on success, false on failure
@@ -379,31 +382,33 @@ void dvbpsi_sis_detach(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_extens
* dvbpsi_sis_init/dvbpsi_sis_new
*****************************************************************************/
/*!
- * \fn void dvbpsi_sis_init(dvbpsi_sis_t *p_sis, uint16_t i_ts_id, uint8_t i_version,
- bool b_current_next, uint8_t i_protocol_version);
+ * \fn void dvbpsi_sis_init(dvbpsi_sis_t *p_sis, uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, bool b_current_next, uint8_t i_protocol_version);
* \brief Initialize a user-allocated dvbpsi_sis_t structure.
* \param p_sis pointer to the SIS structure
- * \param i_ts_id transport stream ID
+ * \param i_table_id Table ID, 0xFC.
+ * \param i_extension Table ID extension.
* \param i_version SIS version
* \param b_current_next current next indicator
* \param i_protocol_version SIS protocol version (currently 0)
* \return nothing.
*/
-void dvbpsi_sis_init(dvbpsi_sis_t *p_sis, uint16_t i_ts_id, uint8_t i_version,
- bool b_current_next, uint8_t i_protocol_version);
+void dvbpsi_sis_init(dvbpsi_sis_t *p_sis, uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, bool b_current_next, uint8_t i_protocol_version);
/*!
- * \fn dvbpsi_sis_t* dvbpsi_sis_new(uint16_t i_ts_id, uint8_t i_version,
- bool b_current_next, uint8_t i_protocol_version);
+ * \fn dvbpsi_sis_t* dvbpsi_sis_new(uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, bool b_current_next, uint8_t i_protocol_version);
* \brief Allocate and initialize a new dvbpsi_sis_t structure.
- * \param i_ts_id transport stream ID
+ * \param i_table_id Table ID, 0xFC.
+ * \param i_extension Table ID extension.
* \param i_version SIS version
* \param b_current_next current next indicator
* \param i_protocol_version SIS protocol version (currently 0)
* \return p_sis pointer to the SIS structure
*/
-dvbpsi_sis_t* dvbpsi_sis_new(uint16_t i_ts_id, uint8_t i_version,
- bool b_current_next, uint8_t i_protocol_version);
+dvbpsi_sis_t* dvbpsi_sis_new(uint8_t i_table_id, uint16_t i_extension, uint8_t i_version,
+ bool b_current_next, uint8_t i_protocol_version);
/*****************************************************************************
* dvbpsi_sis_empty/dvbpsi_sis_delete
diff --git a/src/tables/tot.c b/src/tables/tot.c
index 48a6fd0..0236ee4 100644
--- a/src/tables/tot.c
+++ b/src/tables/tot.c
@@ -142,12 +142,14 @@ void dvbpsi_tot_detach(dvbpsi_t* p_dvbpsi, uint8_t i_table_id,
*****************************************************************************
* Initialize a pre-allocated dvbpsi_tot_t structure.
*****************************************************************************/
-void dvbpsi_tot_init(dvbpsi_tot_t* p_tot, uint16_t i_ts_id, uint8_t i_version,
- bool b_current_next, uint64_t i_utc_time)
+void dvbpsi_tot_init(dvbpsi_tot_t* p_tot, uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, bool b_current_next, uint64_t i_utc_time)
{
assert(p_tot);
- p_tot->i_ts_id = i_ts_id;
+ p_tot->i_table_id = i_table_id;
+ p_tot->i_extension = i_extension;
+
p_tot->i_version = i_version;
p_tot->b_current_next = b_current_next;
@@ -161,12 +163,13 @@ void dvbpsi_tot_init(dvbpsi_tot_t* p_tot, uint16_t i_ts_id, uint8_t i_version,
*****************************************************************************
* Allocate and Initialize a new dvbpsi_tot_t structure.
*****************************************************************************/
-dvbpsi_tot_t *dvbpsi_tot_new(uint16_t i_ts_id, uint8_t i_version,
- bool b_current_next, uint64_t i_utc_time)
+dvbpsi_tot_t *dvbpsi_tot_new(uint8_t i_table_id, uint16_t i_extension, uint8_t i_version,
+ bool b_current_next, uint64_t i_utc_time)
{
dvbpsi_tot_t *p_tot = (dvbpsi_tot_t*)malloc(sizeof(dvbpsi_tot_t));
if (p_tot != NULL)
- dvbpsi_tot_init(p_tot, i_ts_id, i_version, b_current_next, i_utc_time);
+ dvbpsi_tot_init(p_tot, i_table_id, i_extension, i_version,
+ b_current_next, i_utc_time);
return p_tot;
}
@@ -240,7 +243,7 @@ static bool dvbpsi_CheckTOT(dvbpsi_t *p_dvbpsi, dvbpsi_tot_decoder_t *p_tot_deco
assert(p_dvbpsi);
assert(p_tot_decoder);
- if (p_tot_decoder->p_building_tot->i_ts_id != p_section->i_extension)
+ if (p_tot_decoder->p_building_tot->i_extension != p_section->i_extension)
{
/* transport_stream_id */
dvbpsi_error(p_dvbpsi, "TDT/TOT decoder",
@@ -278,7 +281,8 @@ static bool dvbpsi_AddSectionTOT(dvbpsi_t *p_dvbpsi, dvbpsi_tot_decoder_t *p_tot
/* Initialize the structures if it's the first section received */
if (!p_tot_decoder->p_building_tot)
{
- p_tot_decoder->p_building_tot = dvbpsi_tot_new(p_section->i_extension,
+ p_tot_decoder->p_building_tot = dvbpsi_tot_new(
+ p_section->i_table_id, p_section->i_extension,
p_section->i_version, p_section->b_current_next,
((uint64_t)p_section->p_payload_start[0] << 32)
| ((uint64_t)p_section->p_payload_start[1] << 24)
diff --git a/src/tables/tot.h b/src/tables/tot.h
index 6ccf009..0df566b 100644
--- a/src/tables/tot.h
+++ b/src/tables/tot.h
@@ -57,7 +57,10 @@ extern "C" {
*/
typedef struct dvbpsi_tot_s
{
- uint16_t i_ts_id; /*!< transport_stream_id */
+ uint8_t i_table_id; /*!< table id */
+ uint16_t i_extension; /*!< subtable id */
+
+ /* Subtable specific */
uint8_t i_version; /*!< version_number */
bool b_current_next; /*!< current_next_indicator */
@@ -94,7 +97,7 @@ typedef void (* dvbpsi_tot_callback)(void* p_cb_data, dvbpsi_tot_t* p_new_tot);
* \return true on success, false on failure
*/
bool dvbpsi_tot_attach(dvbpsi_t* p_dvbpsi, uint8_t i_table_id, uint16_t i_extension,
- dvbpsi_tot_callback pf_callback, void* p_cb_data);
+ dvbpsi_tot_callback pf_callback, void* p_cb_data);
/*****************************************************************************
* dvbpsi_tot_detach
@@ -114,31 +117,33 @@ void dvbpsi_tot_detach(dvbpsi_t* p_dvbpsi, uint8_t i_table_id,
* dvbpsi_tot_init/dvbpsi_tot_new
*****************************************************************************/
/*!
- * \fn void dvbpsi_tot_init(dvbpsi_tot_t* p_tot, uint16_t i_ts_id, uint8_t i_version,
- bool b_current_next, uint64_t i_utc_time);
+ * \fn void dvbpsi_tot_init(dvbpsi_tot_t* p_tot, uint8_t i_table_id, uint16_t i_extension,
+ uint16_t i_ts_id, uint8_t i_version, bool b_current_next, uint64_t i_utc_time);
* \brief Initialize a user-allocated dvbpsi_tot_t structure.
* \param p_tot pointer to the TDT/TOT structure
- * \param i_ts_id transport stream ID
+ * \param i_table_id Table ID, usually 0x70
+ * \param i_extension Table ID extension, unused in the TDT/TOT
* \param i_version SDT version
* \param b_current_next current next indicator
* \param i_utc_time the time in UTC
* \return nothing.
*/
-void dvbpsi_tot_init(dvbpsi_tot_t* p_tot, uint16_t i_ts_id, uint8_t i_version,
- bool b_current_next, uint64_t i_utc_time);
+void dvbpsi_tot_init(dvbpsi_tot_t* p_tot, uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, bool b_current_next, uint64_t i_utc_time);
/*!
- * \fn dvbpsi_tot_t *dvbpsi_tot_new(uint16_t i_ts_id, uint8_t i_version,
- bool b_current_next, uint64_t i_utc_time);
+ * \fn dvbpsi_tot_t *dvbpsi_tot_new(uint8_t i_table_id, uint16_t i_extension,
+ uint8_t i_version, bool b_current_next, uint64_t i_utc_time);
* \brief Allocate and initialize a new dvbpsi_tot_t structure.
- * \param i_ts_id transport stream ID
+ * \param i_table_id Table ID, usually 0x70
+ * \param i_extension Table ID extension, unused in the TDT/TOT
* \param i_version SDT version
* \param b_current_next current next indicator
* \param i_utc_time the time in UTC
* \return p_tot pointer to the TDT/TOT structure
*/
-dvbpsi_tot_t *dvbpsi_tot_new(uint16_t i_ts_id, uint8_t i_version,
- bool b_current_next, uint64_t i_utc_time);
+dvbpsi_tot_t *dvbpsi_tot_new(uint8_t i_table_id, uint16_t i_extension, uint8_t i_version,
+ bool b_current_next, uint64_t i_utc_time);
/*****************************************************************************
* dvbpsi_tot_empty/dvbpsi_tot_delete

Privacy Policy