vlc | branch: master | Francois Cartegnie <[email protected]> | Wed Mar 30 17:55:20 2016 +0200| [c836e111b80a9e5e4857bf8c636358de299157da] | committer: Francois Cartegnie
access: dtv: add en50221_capmt Hi, I have no possibility to test the current/following patch. If anyone has CAM hardware module, please do. Francois. PMT data forwarding structure. Avoids passing/using/storing dvbpsi callback structures in the DTV module. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=c836e111b80a9e5e4857bf8c636358de299157da --- modules/access/dtv/en50221_capmt.h | 112 ++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) diff --git a/modules/access/dtv/en50221_capmt.h b/modules/access/dtv/en50221_capmt.h new file mode 100644 index 0000000..9b4878d --- /dev/null +++ b/modules/access/dtv/en50221_capmt.h @@ -0,0 +1,112 @@ +/***************************************************************************** + * en50221_capmt.h: + ***************************************************************************** + * Copyright (C) 2016 VLC authors and VideoLAN + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + *****************************************************************************/ +#ifndef EN50221_CAPMT_H +#define EN50221_CAPMT_H + +typedef struct +{ + uint8_t i_stream_type; + uint16_t i_es_pid; + size_t i_descriptors; + uint8_t *p_descriptors; +} en50221_capmt_es_info_t; + +typedef struct en50221_capmt_info_s +{ + uint8_t i_version; + uint16_t i_program_number; + size_t i_program_descriptors; + uint8_t *p_program_descriptors; + size_t i_es_count; + en50221_capmt_es_info_t *p_es; +} en50221_capmt_info_t; + +static inline void en50221_capmt_CADescriptorAppend( uint8_t **p_desc, size_t *pi_desc, + const uint8_t *p_data, uint8_t i_data ) +{ + uint8_t *p_realloc = realloc( *p_desc, *pi_desc + i_data + 2 ); + if( likely(p_realloc) ) + { + *p_desc = p_realloc; + p_realloc[*pi_desc] = 0x09; + p_realloc[*pi_desc + 1] = i_data; + memcpy( &p_realloc[*pi_desc + 2], p_data, i_data ); + *pi_desc = *pi_desc + i_data + 2; + } +} + +static inline en50221_capmt_es_info_t *en50221_capmt_EsAdd( en50221_capmt_info_t *p_en, + uint8_t i_stream_type, + uint16_t i_es_pid ) +{ + en50221_capmt_es_info_t *p_realloc = realloc( p_en->p_es, p_en->i_es_count + 1 ); + if( likely(p_realloc) ) + { + p_en->p_es = p_realloc; + en50221_capmt_es_info_t *p_es = &p_en->p_es[ p_en->i_es_count ]; + p_es->i_es_pid = i_es_pid; + p_es->i_stream_type = i_stream_type; + p_es->i_descriptors = 0; + p_es->p_descriptors = NULL; + return p_es; + } + return NULL; +} + +static inline void en50221_capmt_AddESCADescriptor( en50221_capmt_es_info_t *p_es, + const uint8_t *p_data, uint8_t i_data ) +{ + en50221_capmt_CADescriptorAppend( &p_es->p_descriptors, &p_es->i_descriptors, + p_data, i_data ); +} + +static inline void en50221_capmt_AddCADescriptor( en50221_capmt_info_t *p_en, + const uint8_t *p_data, uint8_t i_data ) +{ + en50221_capmt_CADescriptorAppend( &p_en->p_program_descriptors, + &p_en->i_program_descriptors, + p_data, i_data ); +} + +static inline void en50221_capmt_Delete( en50221_capmt_info_t *p_en ) +{ + free( p_en->p_program_descriptors ); + for( size_t i=0; i<p_en->i_es_count; i++ ) + free( p_en->p_es[i].p_descriptors ); + free( p_en->p_es ); + free( p_en ); +} + +static inline en50221_capmt_info_t * en50221_capmt_New( uint8_t i_version, uint16_t i_program ) +{ + en50221_capmt_info_t *p_en = malloc( sizeof(*p_en) ); + if( likely(p_en) ) + { + p_en->i_version = i_version; + p_en->i_program_number = i_program; + p_en->i_program_descriptors = 0; + p_en->p_program_descriptors = NULL; + p_en->i_es_count = 0; + p_en->p_es = NULL; + } + return p_en; +} + +#endif _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
