[libdvbpsi-devel] dr_a1: convert from linked list to array

Michael Krufky git at videolan.org
Tue Feb 4 11:21:59 CET 2014


libdvbpsi | branch: master | Michael Krufky <mkrufky at linuxtv.org> | Mon May 20 21:03:52 2013 -0400| [70b55cdd0819dcc143f7dbd5ede6e4db8557524a] | committer: Jean-Paul Saman

dr_a1: convert from linked list to array

Signed-off-by: Michael Krufky <mkrufky at linuxtv.org>

> http://git.videolan.org/gitweb.cgi/libdvbpsi.git/?a=commit;h=70b55cdd0819dcc143f7dbd5ede6e4db8557524a
---

 src/descriptors/dr_a1.c |   44 ++------------------------------------------
 src/descriptors/dr_a1.h |   17 +----------------
 2 files changed, 3 insertions(+), 58 deletions(-)

diff --git a/src/descriptors/dr_a1.c b/src/descriptors/dr_a1.c
index e855c19..d4ac666 100644
--- a/src/descriptors/dr_a1.c
+++ b/src/descriptors/dr_a1.c
@@ -80,31 +80,12 @@ dvbpsi_DecodeServiceLocationDr (dvbpsi_descriptor_t * p_descriptor)
 
   for (int i = 0; i < p_decoded->i_number_elements; i++)
     {
-      dvbpsi_service_location_element_t *p_element =
-	(dvbpsi_service_location_element_t *)
-	malloc (sizeof (dvbpsi_service_location_element_t));
-
-      if (!p_element)
-	return NULL;
-
-      memset (p_element, 0, sizeof (dvbpsi_service_location_element_t));
+      dvbpsi_service_location_element_t *p_element = &p_decoded->elements[i];
 
       p_element->i_stream_type = buf[0];
-      p_element->i_elementary_pid =
-	((uint16_t) (buf[1] & 0x1f) << 8) | buf[2];
+      p_element->i_elementary_pid = ((uint16_t) (buf[1] & 0x1f) << 8) | buf[2];
       memcpy (p_element->i_iso_639_code, &buf[3], 3);
 
-      if (p_decoded->p_first_element == NULL)
-	p_decoded->p_first_element = p_element;
-      else
-	{
-	  dvbpsi_service_location_element_t *p_last_element =
-	    p_decoded->p_first_element;
-	  while (p_last_element->p_next != NULL)
-	    p_last_element = p_last_element->p_next;
-	  p_last_element->p_next = p_element;
-	}
-
       buf += 6;
     }
 
@@ -112,27 +93,6 @@ dvbpsi_DecodeServiceLocationDr (dvbpsi_descriptor_t * p_descriptor)
   return p_decoded;
 }
 
-/*****************************************************************************
- * dvbpsi_FreeServiceLocationDr
- *****************************************************************************/
-void
-dvbpsi_FreeServiceLocationDr (dvbpsi_service_location_dr_t * descriptor)
-{
-  dvbpsi_service_location_element_t *p_element = NULL;
-
-  if (descriptor == NULL)
-    return;
-
-  p_element = descriptor->p_first_element;
-
-  while (p_element)
-    {
-      dvbpsi_service_location_element_t *p_next = p_element->p_next;
-      free (p_element);
-      p_element = p_next;
-    }
-}
-
 #if 0
 /*****************************************************************************
  * dvbpsi_GenServiceDr
diff --git a/src/descriptors/dr_a1.h b/src/descriptors/dr_a1.h
index 867f9ca..09fa5d2 100644
--- a/src/descriptors/dr_a1.h
+++ b/src/descriptors/dr_a1.h
@@ -41,9 +41,6 @@ extern "C"
     uint8_t i_stream_type;
     uint16_t i_elementary_pid;
     char i_iso_639_code[3];
-
-    struct dvbpsi_service_location_element_s *p_next;
-
   } dvbpsi_service_location_element_t;
 
 /*****************************************************************************
@@ -65,7 +62,7 @@ extern "C"
     uint16_t i_pcr_pid;		/*!< PCR_PID */
     uint8_t i_number_elements;	/*!< number of elements used for this service */
 
-    dvbpsi_service_location_element_t *p_first_element;
+    dvbpsi_service_location_element_t elements[0xff];
 
   } dvbpsi_service_location_dr_t;
 
@@ -84,18 +81,6 @@ extern "C"
   dvbpsi_service_location_dr_t
     *dvbpsi_DecodeServiceLocationDr (dvbpsi_descriptor_t * p_descriptor);
 
-
-/*****************************************************************************
- * dvbpsi_FreeServiceLocationDr
- *****************************************************************************/
-/*!
- * \fn void  dvbpsi_FreeServiceLocationDr(
-                                        dvbpsi_service_location_dr_t * p_descriptor)
- * \brief frees service location descriptor
- * \param p_descriptor pointer to the descriptor structure
- */
-  void dvbpsi_FreeServiceLocationDr (dvbpsi_service_location_dr_t *
-				     p_descriptor);
 #if 0
 /*****************************************************************************
  * dvbpsi_GenServiceDataDr



More information about the libdvbpsi-devel mailing list