[vlc-commits] access: dtv: add en50221_capmt
Francois Cartegnie
git at videolan.org
Mon Apr 18 23:04:49 CEST 2016
vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | 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
More information about the vlc-commits
mailing list