[vlc-devel] [PATCH 1/2] access: dtv: add en50221_capmt

Francois Cartegnie fcvlcdev at free.fr
Wed Mar 30 17:55:20 CEST 2016


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.
---
 modules/access/dtv/en50221_capmt.h | 112 +++++++++++++++++++++++++++++++++++++
 1 file changed, 112 insertions(+)
 create mode 100644 modules/access/dtv/en50221_capmt.h

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
-- 
2.5.5



More information about the vlc-devel mailing list