[PATCH] Add 0x40 descriptor support

Roberto Corno <[email protected]>
Newsgroups gmane.comp.video.videolan.libdvbpsi.devel
Message-ID <[email protected]>
---
 src/descriptors/dr.h    |    1 +
 src/descriptors/dr_40.c |   90 +++++++++++++++++++++++++++++++++++++++++++++++
 src/descriptors/dr_40.h |   86 ++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 177 insertions(+), 0 deletions(-)
 create mode 100644 src/descriptors/dr_40.c
 create mode 100644 src/descriptors/dr_40.h

diff --git a/src/descriptors/dr.h b/src/descriptors/dr.h
index faf318a..93b27ee 100644
--- a/src/descriptors/dr.h
+++ b/src/descriptors/dr.h
@@ -46,6 +46,7 @@
 #include "dr_0d.h"
 #include "dr_0e.h"
 #include "dr_0f.h"
+#include "dr_40.h"
 #include "dr_42.h"
 #include "dr_43.h"
 #include "dr_44.h"
diff --git a/src/descriptors/dr_40.c b/src/descriptors/dr_40.c
new file mode 100644
index 0000000..0ae431e
--- /dev/null
+++ b/src/descriptors/dr_40.c
@@ -0,0 +1,90 @@
+
+
+
+#include "config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if defined(HAVE_INTTYPES_H)
+#include <inttypes.h>
+#elif defined(HAVE_STDINT_H)
+#include <stdint.h>
+#endif
+
+#include "../dvbpsi.h"
+#include "../dvbpsi_private.h"
+#include "../descriptor.h"
+
+#include "dr_40.h"
+
+/*****************************************************************************
+ * dvbpsi_DecodeNetworkNameDr
+ *****************************************************************************/
+dvbpsi_network_name_dr_t* dvbpsi_DecodeNetworkNameDr(
+                                        dvbpsi_descriptor_t * p_descriptor) {
+	dvbpsi_network_name_dr_t * p_decoded;
+
+  /* Check the tag */
+  if(p_descriptor->i_tag != 0x40)
+  {
+	DVBPSI_ERROR_ARG("dr_40 decoder", "bad tag (0x%x)", p_descriptor->i_tag);
+	return NULL;
+  }
+  /* Don't decode twice */
+  if(p_descriptor->p_decoded)
+	return p_descriptor->p_decoded;
+  /* Allocate memory */
+  p_decoded =
+        (dvbpsi_network_name_dr_t*)malloc(sizeof(dvbpsi_network_name_dr_t));
+  if(!p_decoded)
+  {
+    DVBPSI_ERROR("dr_40 decoder", "out of memory");
+    return NULL;
+  }
+  /* Decode data */
+  p_decoded->i_name_length = p_descriptor->i_length;
+  if(p_decoded->i_name_length)
+    memcpy(p_decoded->i_name_byte,
+           p_descriptor->p_data,
+           p_decoded->i_name_length);
+
+  p_descriptor->p_decoded = (void*)p_decoded;
+
+  return p_decoded;
+}
+
+
+/*****************************************************************************
+ * dvbpsi_GenNetworkNameDr
+ *****************************************************************************/
+dvbpsi_descriptor_t * dvbpsi_GenNetworkNameDr(
+                                        dvbpsi_network_name_dr_t * p_decoded,
+                                        int b_duplicate) {
+  /* Create the descriptor */
+  dvbpsi_descriptor_t * p_descriptor =
+		dvbpsi_NewDescriptor(0x40, p_decoded->i_name_length, NULL);
+
+  if(p_descriptor)
+  {
+    /* Encode data */
+    if(p_decoded->i_name_length)
+      memcpy(p_descriptor->p_data,
+             p_decoded->i_name_byte,
+             p_decoded->i_name_length);
+
+    if(b_duplicate)
+    {
+      /* Duplicate decoded data */
+    	dvbpsi_network_name_dr_t * p_dup_decoded =
+        (dvbpsi_network_name_dr_t*)malloc(sizeof(dvbpsi_network_name_dr_t));
+      if(p_dup_decoded)
+        memcpy(p_dup_decoded, p_decoded, sizeof(dvbpsi_network_name_dr_t));
+
+      p_descriptor->p_decoded = (void*)p_dup_decoded;
+    }
+  }
+
+  return p_descriptor;
+}
diff --git a/src/descriptors/dr_40.h b/src/descriptors/dr_40.h
new file mode 100644
index 0000000..4c9c8ee
--- /dev/null
+++ b/src/descriptors/dr_40.h
@@ -0,0 +1,86 @@
+/*
+ * dr_40.h
+ *
+ *  Created on: Nov 22, 2011
+ *      Author: rcorno
+ */
+
+/*!
+ * \file <dr_40.h>
+ * \author Corno Roberto <[email protected]>
+ * \brief Application interface for the DVB "network name"
+ * descriptor decoder and generator.
+ *
+ * Application interface for the DVB "network name" descriptor
+ * decoder and generator. This descriptor's definition can be found in
+ * ETSI EN 300 468 section 6.2.27.
+ */
+
+#ifndef DR_40_H_
+#define DR_40_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*****************************************************************************
+ * dvbpsi_network_name_dr_t
+ *****************************************************************************/
+/*!
+ * \struct dvbpsi_network_name_dr_t
+ * \brief "network name" descriptor structure.
+ *
+ * This structure is used to store a decoded "network name"
+ * descriptor. (ETSI EN 300 468 section 6.2.27).
+ */
+/*!
+ * \typedef struct dvbpsi_network_nameg_dr_s dvbpsi_network_name_dr_t
+ * \brief dvbpsi_network_name_dr_t type definition.
+ */
+typedef struct dvbpsi_network_name_dr_s
+{
+  uint8_t      i_name_length;            /*!< length of the i_name_byte
+                                                  array */
+  uint8_t      i_name_byte[255];         /*!< the name of the delivery system */
+
+} dvbpsi_network_name_dr_t;
+
+/*****************************************************************************
+ * dvbpsi_DecodeNetworkNameDr
+ *****************************************************************************/
+/*!
+ * \fn dvbpsi_network_name_dr_t * dvbpsi_DecodeNetworkNameDr(
+                                        dvbpsi_descriptor_t * p_descriptor)
+ * \brief "network name" descriptor decoder.
+ * \param p_descriptor pointer to the descriptor structure
+ * \return a pointer to a new "network name" descriptor structure
+ * which contains the decoded data.
+ */
+dvbpsi_network_name_dr_t* dvbpsi_DecodeNetworkNameDr(
+                                        dvbpsi_descriptor_t * p_descriptor);
+
+
+/*****************************************************************************
+ * dvbpsi_GenNetworkNameDr
+ *****************************************************************************/
+/*!
+ * \fn dvbpsi_descriptor_t * dvbpsi_GenNetworkNameDr(
+                        dvbpsi_network_name_dr_t * p_decoded, int b_duplicate)
+ * \brief "network name" descriptor generator.
+ * \param p_decoded pointer to a decoded "network name" descriptor
+ * structure
+ * \param b_duplicate if non zero then duplicate the p_decoded structure into
+ * the descriptor
+ * \return a pointer to a new descriptor structure which contains encoded data.
+ */
+dvbpsi_descriptor_t * dvbpsi_GenNetworkNameDr(
+                                        dvbpsi_network_name_dr_t * p_decoded,
+                                        int b_duplicate);
+
+#ifdef __cplusplus
+};
+#endif
+
+#else
+#error "Multiple inclusions of dr_40.h"
+#endif
-- 
1.7.0.4

_______________________________________________
libdvbpsi-devel mailing list
[email protected]
http://mailman.videolan.org/listinfo/libdvbpsi-devel
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.