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/