[libdvbpsi-devel] Introduce support for the MPEG-4 audio descriptor

Daniel Kamil Kozar git at videolan.org
Fri Mar 20 14:23:41 CET 2015


libdvbpsi | branch: master | Daniel Kamil Kozar <dkk089 at gmail.com> | Thu Mar 19 21:11:57 2015 +0100| [b56c007211539b9a5e15af9a0542c2efdc6ec60c] | committer: Jean-Paul Saman

Introduce support for the MPEG-4 audio descriptor

This patch adds support for the MPEG-4 audio descriptor. aac_profile.h is now
allowed to be included multiple times, since it is also used by dr_1c.h.

Signed-off-by: Jean-Paul Saman <jpsaman at videolan.org>

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

 src/Makefile.am                     |    2 +
 src/descriptors/dr_1c.c             |   75 ++++++++++++++++++++++++++++++++
 src/descriptors/dr_1c.h             |   80 +++++++++++++++++++++++++++++++++++
 src/descriptors/types/aac_profile.h |    2 -
 4 files changed, 157 insertions(+), 2 deletions(-)

diff --git a/src/Makefile.am b/src/Makefile.am
index 0b9a9a0..2974b3d 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -40,6 +40,7 @@ pkginclude_HEADERS = dvbpsi.h psi.h descriptor.h demux.h \
                      descriptors/dr_13.h \
                      descriptors/dr_14.h \
                      descriptors/dr_1b.h \
+                     descriptors/dr_1c.h \
 		     descriptors/dr_40.h \
 		     descriptors/dr_41.h \
                      descriptors/dr_42.h \
@@ -99,6 +100,7 @@ descriptors_src = descriptors/dr_02.c \
                   descriptors/dr_13.c \
                   descriptors/dr_14.c \
                   descriptors/dr_1b.c \
+                  descriptors/dr_1c.c \
 		  descriptors/dr_40.c \
 		  descriptors/dr_41.c \
                   descriptors/dr_42.c \
diff --git a/src/descriptors/dr_1c.c b/src/descriptors/dr_1c.c
new file mode 100644
index 0000000..a3dc351
--- /dev/null
+++ b/src/descriptors/dr_1c.c
@@ -0,0 +1,75 @@
+/*
+Copyright (C) 2015 Daniel Kamil Kozar
+
+This library 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 library 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 library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+*/
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdbool.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_1c.h"
+
+dvbpsi_mpeg4_audio_dr_t* dvbpsi_DecodeMPEG4AudioDr(
+                                      dvbpsi_descriptor_t * p_descriptor)
+{
+    dvbpsi_mpeg4_audio_dr_t * p_decoded;
+
+    /* check the tag. */
+    if (!dvbpsi_CanDecodeAsDescriptor(p_descriptor, 0x1c))
+        return NULL;
+
+    /* don't decode twice. */
+    if (dvbpsi_IsDescriptorDecoded(p_descriptor))
+        return p_descriptor->p_decoded;
+
+    /* all descriptors of this type have only one byte of payload. */
+    if (p_descriptor->i_length != 1)
+        return NULL;
+
+    p_decoded = (dvbpsi_mpeg4_audio_dr_t*)malloc(sizeof(*p_decoded));
+    if (!p_decoded)
+        return NULL;
+
+    p_decoded->i_mpeg4_audio_profile_and_level = p_descriptor->p_data[0];
+
+    p_descriptor->p_decoded = (void*)p_decoded;
+
+    return p_decoded;
+}
+
+dvbpsi_descriptor_t * dvbpsi_GenMPEG4AudioDr(
+                                      dvbpsi_mpeg4_audio_dr_t * p_decoded)
+{
+    dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x1c, 1, NULL);
+    if (!p_descriptor)
+        return NULL;
+
+    /* encode the data. */
+    p_descriptor->p_data[0] = p_decoded->i_mpeg4_audio_profile_and_level;
+
+    return p_descriptor;
+}
diff --git a/src/descriptors/dr_1c.h b/src/descriptors/dr_1c.h
new file mode 100644
index 0000000..c1d4525
--- /dev/null
+++ b/src/descriptors/dr_1c.h
@@ -0,0 +1,80 @@
+/*
+Copyright (C) 2015 Daniel Kamil Kozar
+
+This library 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 library 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 library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+*/
+
+/*!
+ * \file <dr_1c.h>
+ * \author Daniel Kamil Kozar <dkk089 at gmail.com>
+ * \brief Application interface for the MPEG-4 audio descriptor decoder and
+ * generator.
+ *
+ * Application interface for the MPEG-4 audio descriptor decoder and generator.
+ * This descriptor's definition can be found in ISO/IEC 13818-1 revision 2014/10
+ * section 2.6.38.
+ */
+
+#ifndef _DVBPSI_DR_1C_H_
+#define _DVBPSI_DR_1C_H_
+
+#include "types/aac_profile.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*!
+ * \struct dvbpsi_mpeg4_audio_dr_s
+ * \brief MPEG-4 audio descriptor structure.
+ *
+ * This structure is used to store a decoded MPEG-4 audio descriptor. (ISO/IEC
+ * 13818-1 section 2.6.38).
+ */
+
+/*!
+ * \typedef struct dvbpsi_mpeg4_audio_dr_s dvbpsi_mpeg4_audio_dr_t
+ * \brief dvbpsi_mpeg4_audio_dr_t type definition.
+ */
+typedef struct dvbpsi_mpeg4_audio_dr_s
+{
+    /*! MPEG-4_audio_profile_and_level */
+    dvbpsi_aac_profile_and_level_t    i_mpeg4_audio_profile_and_level;
+} dvbpsi_mpeg4_audio_dr_t;
+
+/*!
+ * \brief MPEG-4 audio descriptor decoder.
+ * \param p_descriptor pointer to the descriptor structure
+ * \return A pointer to a new MPEG-4 audio descriptor structure which contains
+ * the decoded data.
+ */
+dvbpsi_mpeg4_audio_dr_t* dvbpsi_DecodeMPEG4AudioDr(
+                                      dvbpsi_descriptor_t * p_descriptor);
+
+/*!
+ * \brief MPEG-4 audio descriptor generator.
+ * \param p_decoded pointer to a decoded MPEG-4 audio descriptor structure.
+ * \return a pointer to a new descriptor structure which contains encoded data.
+ */
+dvbpsi_descriptor_t * dvbpsi_GenMPEG4AudioDr(
+                                      dvbpsi_mpeg4_audio_dr_t * p_decoded);
+
+#ifdef __cplusplus
+}
+#endif
+
+#else
+#error "Multiple inclusions of dr_1c.h"
+#endif
diff --git a/src/descriptors/types/aac_profile.h b/src/descriptors/types/aac_profile.h
index 1a515f7..f16eedc 100644
--- a/src/descriptors/types/aac_profile.h
+++ b/src/descriptors/types/aac_profile.h
@@ -127,6 +127,4 @@ typedef enum dvbpsi_aac_profile_and_level_s
 };
 #endif
 
-#else
-#error "Multiple inclusions of aac_profile.h"
 #endif



More information about the libdvbpsi-devel mailing list