bat.h | bat.h | |||
---|---|---|---|---|
/************************************************************************** *** | /************************************************************************** *** | |||
* bat.h | * bat.h | |||
* Copyright (C) 2001-2011 VideoLAN | * Copyright (C) 2001-2011 VideoLAN | |||
* $Id: bat.h $ | * $Id: bat.h $ | |||
* | * | |||
* Authors: Zhu zhenglu <zhuzlu@gmail.com> | * Authors: Zhu zhenglu <zhuzlu@gmail.com> | |||
* heavily based on nit.h which was written by | * heavily based on nit.h which was written by | |||
* Johann Hanne | * Johann Hanne | |||
* Jean-Paul Saman <jpsaman@videolan.org> | ||||
* | * | |||
* This library is free software; you can redistribute it and/or | * This library is free software; you can redistribute it and/or | |||
* modify it under the terms of the GNU Lesser General Public | * modify it under the terms of the GNU Lesser General Public | |||
* License as published by the Free Software Foundation; either | * License as published by the Free Software Foundation; either | |||
* version 2.1 of the License, or (at your option) any later version. | * version 2.1 of the License, or (at your option) any later version. | |||
* | * | |||
* This library is distributed in the hope that it will be useful, | * This library is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||
* Lesser General Public License for more details. | * Lesser General Public License for more details. | |||
skipping to change at line 34 | skipping to change at line 35 | |||
* | * | |||
************************************************************************** ***/ | ************************************************************************** ***/ | |||
/*! | /*! | |||
* \file bat.h | * \file bat.h | |||
* \author Zhu zhenglu <zhuzlu@gmail.com> | * \author Zhu zhenglu <zhuzlu@gmail.com> | |||
* \brief Application interface for the BAT decoder. | * \brief Application interface for the BAT decoder. | |||
* | * | |||
* Application interface for the BAT decoder. New | * Application interface for the BAT decoder. New | |||
* decoded BAT are sent by callback to the application. If a table | * decoded BAT are sent by callback to the application. If a table | |||
* wasn't active (b_current_next == 0) and the next is the same but active | * wasn't active (b_current_next == false) and the next is the same but act | |||
* (b_current_next == 1) then the service description list is empty and sho | ive | |||
uld | * (b_current_next == true) then the service description list is empty and | |||
should | ||||
* be caught from the previous structure. | * be caught from the previous structure. | |||
* This is a simulation to sdt.h | * This is a simulation to sdt.h | |||
*/ | */ | |||
#ifndef _DVBPSI_BAT_H_ | #ifndef _DVBPSI_BAT_H_ | |||
#define _DVBPSI_BAT_H_ | #define _DVBPSI_BAT_H_ | |||
#ifdef __cplusplus | #ifdef __cplusplus | |||
extern "C" { | extern "C" { | |||
#endif | #endif | |||
skipping to change at line 63 | skipping to change at line 64 | |||
* | * | |||
* This structure is used to store a decoded BAT service description. | * This structure is used to store a decoded BAT service description. | |||
* (ETSI EN 300 468 V1.5.1 section 5.2.2). | * (ETSI EN 300 468 V1.5.1 section 5.2.2). | |||
*/ | */ | |||
/*! | /*! | |||
* \typedef struct dvbpsi_bat_ts_s dvbpsi_bat_ts_t | * \typedef struct dvbpsi_bat_ts_s dvbpsi_bat_ts_t | |||
* \brief dvbpsi_bat_ts_t type definition. | * \brief dvbpsi_bat_ts_t type definition. | |||
*/ | */ | |||
typedef struct dvbpsi_bat_ts_s | typedef struct dvbpsi_bat_ts_s | |||
{ | { | |||
uint16_t i_ts_id; /*!< transport stre | uint16_t i_ts_id; /*!< transport stream id */ | |||
am id */ | uint16_t i_orig_network_id; /*!< original network id */ | |||
uint16_t i_orig_network_id; /*!< original netwo | ||||
rk id */ | ||||
dvbpsi_descriptor_t * p_first_descriptor; /*!< descriptor lis t */ | 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 */ | the list */ | |||
} dvbpsi_bat_ts_t; | } dvbpsi_bat_ts_t; | |||
/************************************************************************** *** | /************************************************************************** *** | |||
* dvbpsi_bat_t | * dvbpsi_bat_t | |||
************************************************************************** ***/ | ************************************************************************** ***/ | |||
/*! | /*! | |||
* \struct dvbpsi_bat_s | * \struct dvbpsi_bat_s | |||
* \brief BAT structure. | * \brief BAT structure. | |||
* | * | |||
* This structure is used to store a decoded BAT. | * This structure is used to store a decoded BAT. | |||
* (ETSI EN 300 468 V1.5.1 section 5.2.2). | * (ETSI EN 300 468 V1.5.1 section 5.2.2). | |||
*/ | */ | |||
/*! | /*! | |||
* \typedef struct dvbpsi_bat_s dvbpsi_bat_t | * \typedef struct dvbpsi_bat_s dvbpsi_bat_t | |||
* \brief dvbpsi_bat_t type definition. | * \brief dvbpsi_bat_t type definition. | |||
*/ | */ | |||
typedef struct dvbpsi_bat_s | typedef struct dvbpsi_bat_s | |||
{ | { | |||
uint16_t i_bouquet_id; /*!< bouquet_id */ | uint8_t i_table_id; /*!< table id */ | |||
uint8_t i_version; /*!< version_number */ | uint16_t i_extension; /*!< subtable id (here bouq | |||
int b_current_next; /*!< current_next_indicator | uet id) */ | |||
*/ | ||||
dvbpsi_descriptor_t * p_first_descriptor; /*!< descriptor list */ | uint8_t i_version; /*!< version_number */ | |||
bool b_current_next; /*!< current_next_indicator | ||||
*/ | ||||
dvbpsi_bat_ts_t * p_first_ts; /*!< transport stream descriptio | dvbpsi_descriptor_t * p_first_descriptor; /*!< descriptor list */ | |||
n | ||||
list */ | dvbpsi_bat_ts_t * p_first_ts; /*!< transport stream | |||
description list */ | ||||
} dvbpsi_bat_t; | } dvbpsi_bat_t; | |||
/************************************************************************** *** | /************************************************************************** *** | |||
* dvbpsi_bat_callback | * dvbpsi_bat_callback | |||
************************************************************************** ***/ | ************************************************************************** ***/ | |||
/*! | /*! | |||
* \typedef void (* dvbpsi_bat_callback)(void* p_cb_data, | * \typedef void (* dvbpsi_bat_callback)(void* p_cb_data, | |||
dvbpsi_bat_t* p_new_bat) | dvbpsi_bat_t* p_new_bat) | |||
* \brief Callback type definition. | * \brief Callback type definition. | |||
*/ | */ | |||
typedef void (* dvbpsi_bat_callback)(void* p_cb_data, dvbpsi_bat_t* p_new_b at); | typedef void (* dvbpsi_bat_callback)(void* p_cb_data, dvbpsi_bat_t* p_new_b at); | |||
/************************************************************************** *** | /************************************************************************** *** | |||
* dvbpsi_AttachBAT | * dvbpsi_bat_attach | |||
************************************************************************** ***/ | ************************************************************************** ***/ | |||
/*! | /*! | |||
* \fn void dvbpsi_AttachBAT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, | * \fn bool dvbpsi_bat_attach(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, | |||
uint16_t i_extension, dvbpsi_bat_callback pf_callback, | uint16_t i_extension, dvbpsi_bat_callback pf_callback, void* p_cb | |||
void* p_cb_data) | _data) | |||
* \brief Creation and initialization of a BAT decoder. | * \brief Creation and initialization of a BAT decoder. It will be attached | |||
* \param p_demux Subtable demultiplexor to which the decoder is attached. | to p_dvbpsi. | |||
* \param p_dvbpsi dvbpsi handle to Subtable demultiplexor to which the dec | ||||
oder is attached. | ||||
* \param i_table_id Table ID, 0x4a. | * \param i_table_id Table ID, 0x4a. | |||
* \param i_extension Table ID extension, here bouquet ID. | * \param i_extension Table ID extension, here bouquet ID. | |||
* \param pf_callback function to call back on new BAT. | * \param pf_callback function to call back on new BAT. | |||
* \param p_cb_data private data given in argument to the callback. | * \param p_cb_data private data given in argument to the callback. | |||
* \return 0 if everything went ok. | * \return true on success, false on failure | |||
*/ | */ | |||
__attribute__((deprecated)) | bool dvbpsi_bat_attach(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_e | |||
int dvbpsi_AttachBAT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id, | xtension, | |||
uint16_t i_extension, dvbpsi_bat_callback pf_callback, | dvbpsi_bat_callback pf_callback, void* p_cb_data); | |||
void* p_cb_data); | ||||
/************************************************************************** *** | /************************************************************************** *** | |||
* dvbpsi_DetachBAT | * dvbpsi_bat_detach | |||
************************************************************************** ***/ | ************************************************************************** ***/ | |||
/*! | /*! | |||
* \fn void dvbpsi_DetachBAT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, | * \fn void dvbpsi_bat_detach(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, | |||
uint16_t i_extension) | uint16_t i_extension) | |||
* \brief Destroy a BAT decoder. | * \brief Destroy a BAT decoder. | |||
* \param p_demux Subtable demultiplexor to which the decoder is attached. | * \param p_dvbpsi dvbpsi handle to Subtable demultiplexor to which the dec oder is attached. | |||
* \param i_table_id Table ID, 0x4a. | * \param i_table_id Table ID, 0x4a. | |||
* \param i_extension Table ID extension, here bouquet ID. | * \param i_extension Table ID extension, here bouquet ID. | |||
* \return nothing. | * \return nothing. | |||
*/ | */ | |||
__attribute__((deprecated)) | void dvbpsi_bat_detach(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_e | |||
void dvbpsi_DetachBAT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, | xtension); | |||
uint16_t i_extension); | ||||
/************************************************************************** *** | /************************************************************************** *** | |||
* dvbpsi_InitBAT/dvbpsi_NewBAT | * dvbpsi_bat_init/dvbpsi_bat_new | |||
************************************************************************** ***/ | ************************************************************************** ***/ | |||
/*! | /*! | |||
* \fn void dvbpsi_InitBAT(dvbpsi_bat_t *p_bat, uint16_t i_bouquet_id, uint | * \fn void dvbpsi_bat_init(dvbpsi_bat_t *p_bat, uint8_t i_table_id, uint16 | |||
8_t i_version, | _t i_extension, | |||
int b_current_next) | uint8_t i_version, bool b_current_next) | |||
* \brief Initialize a user-allocated dvbpsi_bat_t structure. | * \brief Initialize a user-allocated dvbpsi_bat_t structure. | |||
* \param p_bat pointer to the BAT 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 i_version BAT version | |||
* \param b_current_next current next indicator | * \param b_current_next current next indicator | |||
* \param i_network_id original network id | ||||
* \return nothing. | * \return nothing. | |||
*/ | */ | |||
__attribute__((deprecated)) | void dvbpsi_bat_init(dvbpsi_bat_t *p_bat, uint8_t i_table_id, uint16_t i_ex | |||
void dvbpsi_InitBAT(dvbpsi_bat_t *p_bat, uint16_t i_bouquet_id, uint8_t i_v | tension, | |||
ersion, | uint8_t i_version, bool b_current_next); | |||
int b_current_next); | ||||
/*! | /*! | |||
* \def dvbpsi_NewBAT(p_bat, i_bouquet_id, i_version, b_current_next) | * \fn dvbpsi_bat_t *dvbpsi_bat_new(uint8_t i_table_id, uint16_t i_extensio | |||
n, | ||||
* uint8_t i_version, bool b_current_next) | ||||
* \brief Allocate and initialize a new dvbpsi_bat_t structure. | * \brief Allocate and initialize a new dvbpsi_bat_t structure. | |||
* \param p_bat pointer to the BAT structure | * \param i_table_id Table ID, 0x4a. | |||
* \param i_bouquet_id bouquet ID | * \param i_extension Table ID extension, here bouquet ID. | |||
* \param i_version BAT version | * \param i_version BAT version | |||
* \param b_current_next current next indicator | * \param b_current_next current next indicator | |||
* \param i_network_id original network id | * \return p_bat pointer to the BAT structure | |||
* \return nothing. | ||||
*/ | */ | |||
#define dvbpsi_NewBAT(p_bat, i_bouquet_id, i_version, b_current_next) \ | dvbpsi_bat_t *dvbpsi_bat_new(uint8_t i_table_id, uint16_t i_extension, | |||
do { \ | uint8_t i_version, bool b_current_next); | |||
p_bat = (dvbpsi_bat_t*)malloc(sizeof(dvbpsi_bat_t)); \ | ||||
if(p_bat != NULL) \ | ||||
dvbpsi_InitBAT(p_bat, i_bouquet_id, i_version, b_current_next); \ | ||||
} while(0); | ||||
/************************************************************************** *** | /************************************************************************** *** | |||
* dvbpsi_EmptyBAT/dvbpsi_DeleteBAT | * dvbpsi_bat_empty/dvbpsi_bat_delete | |||
************************************************************************** ***/ | ************************************************************************** ***/ | |||
/*! | /*! | |||
* \fn void dvbpsi_EmptyBAT(dvbpsi_bat_t* p_bat) | * \fn void dvbpsi_bat_empty(dvbpsi_bat_t* p_bat) | |||
* \brief Clean a dvbpsi_bat_t structure. | * \brief Clean a dvbpsi_bat_t structure. | |||
* \param p_bat pointer to the BAT structure | * \param p_bat pointer to the BAT structure | |||
* \return nothing. | * \return nothing. | |||
*/ | */ | |||
__attribute__((deprecated)) | void dvbpsi_bat_empty(dvbpsi_bat_t *p_bat); | |||
void dvbpsi_EmptyBAT(dvbpsi_bat_t *p_bat); | ||||
/*! | /*! | |||
* \def dvbpsi_DeleteBAT(p_bat) | * \fn dvbpsi_bat_delete(dvbpsi_bat_t *p_bat) | |||
* \brief Clean and free a dvbpsi_bat_t structure. | * \brief Clean and free a dvbpsi_bat_t structure. | |||
* \param p_bat pointer to the BAT structure | * \param p_bat pointer to the BAT structure | |||
* \return nothing. | * \return nothing. | |||
*/ | */ | |||
#define dvbpsi_DeleteBAT(p_bat) \ | void dvbpsi_bat_delete(dvbpsi_bat_t *p_bat); | |||
do { \ | ||||
dvbpsi_EmptyBAT(p_bat); \ | /************************************************************************** | |||
free(p_bat); \ | *** | |||
} while(0); | * dvbpsi_bat_descriptor_add | |||
************************************************************************** | ||||
***/ | ||||
/*! | ||||
* \fn dvbpsi_descriptor_t* dvbpsi_bat_bouquet_descriptor_add(dvbpsi_bat_t* | ||||
p_bat, | ||||
uint8_t i_tag | ||||
, | ||||
uint8_t i_len | ||||
gth, | ||||
uint8_t* p_da | ||||
ta) | ||||
* \brief Add a descriptor in the BAT. | ||||
* \param p_bat pointer to the BAT structure | ||||
* \param i_tag descriptor's tag | ||||
* \param i_length descriptor's length | ||||
* \param p_data descriptor's data | ||||
* \return a pointer to the added descriptor. | ||||
*/ | ||||
dvbpsi_descriptor_t* dvbpsi_bat_bouquet_descriptor_add(dvbpsi_bat_t* p_bat, | ||||
uint8_t i_tag, uint8 | ||||
_t i_length, | ||||
uint8_t* p_data); | ||||
/************************************************************************** | ||||
*** | ||||
* dvbpsi_bat_ts_add | ||||
************************************************************************** | ||||
***/ | ||||
/*! | ||||
* \fn dvbpsi_descriptor_t* dvbpsi_bat_ts_add(dvbpsi_bat_t* p_bat, | ||||
uint16_t i_ts_id, | ||||
uint16_t i_orig_network_id) | ||||
* \brief Add a TS description at the end of the BAT. | ||||
* \param p_bat pointer to the BAT structure | ||||
* \param i_ts_id descriptor's transport stream id | ||||
* \param i_orig_network_id descriptor's original network id | ||||
* \return a pointer to the added descriptor. | ||||
*/ | ||||
dvbpsi_bat_ts_t *dvbpsi_bat_ts_add(dvbpsi_bat_t* p_bat, | ||||
uint16_t i_ts_id, uint16_t i_orig_network_ | ||||
id); | ||||
/************************************************************************** | ||||
*** | ||||
* dvbpsi_bat_ts_descriptor_add | ||||
************************************************************************** | ||||
***/ | ||||
/*! | ||||
* \fn dvbpsi_descriptor_t* dvbpsi_bat_ts_descriptor_add(dvbpsi_bat_ts_t *p | ||||
_bat, | ||||
uint8_t i_tag, | ||||
uint8_t i_length, | ||||
uint8_t *p_data) | ||||
* \brief Add a descriptor in the BAT TS descriptors. | ||||
* \param p_bat pointer to the BAT structure | ||||
* \param i_tag descriptor number | ||||
* \param i_length length of descriptor in bytes | ||||
* \param p_data pointer to descriptor data | ||||
* \return a pointer to the added descriptor. | ||||
*/ | ||||
dvbpsi_descriptor_t *dvbpsi_bat_ts_descriptor_add(dvbpsi_bat_ts_t *p_bat, | ||||
uint8_t i_tag, uint8_t i_len | ||||
gth, | ||||
uint8_t *p_data); | ||||
/************************************************************************** *** | /************************************************************************** *** | |||
* dvbpsi_GenBATSections | * dvbpsi_bat_sections_generate | |||
************************************************************************** | ************************************************************************** | |||
*** | ***/ | |||
/*! | /*! | |||
* \fn dvbpsi_psi_section_t* dvbpsi_GenBATSections(dvbpsi_bat_t* p_bat) | * \fn dvbpsi_psi_section_t* dvbpsi_bat_sections_generate(dvbpsi_t *p_dvbps i, dvbpsi_bat_t* p_bat) | |||
* \brief BAT generator | * \brief BAT generator | |||
* \param p_dvbpsi handle to dvbpsi with attached decoder | ||||
* \param p_bat BAT structure | * \param p_bat BAT structure | |||
* \return a pointer to the list of generated PSI sections. | * \return a pointer to the list of generated PSI sections. | |||
* | * | |||
* Generate BAT sections based on the dvbpsi_bat_t structure. | * Generate BAT sections based on the dvbpsi_bat_t structure. | |||
************************************************************************** ***/ | ************************************************************************** ***/ | |||
dvbpsi_psi_section_t *dvbpsi_bat_sections_generate(dvbpsi_t *p_dvbpsi, dvbp | ||||
si_bat_t * p_bat); | ||||
/************************************************************************** | ||||
*** | ||||
* deprecated API's | ||||
************************************************************************** | ||||
***/ | ||||
__attribute__((deprecated)) | ||||
int dvbpsi_AttachBAT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id, | ||||
uint16_t i_extension, dvbpsi_bat_callback pf_callback, | ||||
void* p_cb_data); | ||||
__attribute__((deprecated)) | ||||
void dvbpsi_DetachBAT(dvbpsi_demux_t * p_demux, uint8_t i_table_id, | ||||
uint16_t i_extension); | ||||
__attribute__((deprecated)) | ||||
void dvbpsi_InitBAT(dvbpsi_bat_t *p_bat, uint16_t i_bouquet_id, uint8_t i_v | ||||
ersion, | ||||
int b_current_next); | ||||
__attribute__((deprecated)) | ||||
void dvbpsi_EmptyBAT(dvbpsi_bat_t *p_bat); | ||||
__attribute__((deprecated)) | ||||
dvbpsi_psi_section_t *dvbpsi_GenBATSections(dvbpsi_bat_t *p_bat); | ||||
__attribute__((deprecated)) | ||||
dvbpsi_bat_ts_t *dvbpsi_BATAddTS(dvbpsi_bat_t* p_bat, | ||||
uint16_t i_ts_id, uint16_t i_orig_network_ | ||||
id); | ||||
__attribute__((deprecated)) | ||||
dvbpsi_descriptor_t *dvbpsi_BATBouquetAddDescriptor( | ||||
dvbpsi_bat_t *p_bat, | ||||
uint8_t i_tag, uint8_t i_len | ||||
gth, | ||||
uint8_t *p_data); | ||||
__attribute__((deprecated)) | __attribute__((deprecated)) | |||
dvbpsi_psi_section_t *dvbpsi_GenBATSections(dvbpsi_bat_t * p_bat); | dvbpsi_descriptor_t *dvbpsi_BATTSAddDescriptor( | |||
dvbpsi_bat_ts_t *p_ts, | ||||
uint8_t i_tag, uint8_t i_len | ||||
gth, | ||||
uint8_t *p_data); | ||||
#ifdef __cplusplus | #ifdef __cplusplus | |||
}; | }; | |||
#endif | #endif | |||
#else | #else | |||
#error "Multiple inclusions of bat.h" | #error "Multiple inclusions of bat.h" | |||
#endif | #endif | |||
End of changes. 35 change blocks. | ||||
70 lines changed or deleted | 170 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |