summaryrefslogtreecommitdiff
path: root/recipes-multimedia
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-multimedia')
-rw-r--r--recipes-multimedia/alsa-utils/alsa-utils_%.bbappend1
-rw-r--r--recipes-multimedia/bluealsa/bluealsa_git.bb66
-rw-r--r--recipes-multimedia/codecgraph/codecgraph_20120114.bb4
-rw-r--r--recipes-multimedia/hda-verb/hda-verb_git.bb14
-rw-r--r--recipes-multimedia/media-files/media-files_1.0.bb13
-rw-r--r--recipes-multimedia/media-files/media-files_1.3.bb28
-rw-r--r--recipes-multimedia/mediainfo/mediainfo_0.7.62.bb52
-rw-r--r--recipes-multimedia/mediainfo/mediainfo_22.06.bb5
-rw-r--r--recipes-multimedia/mediainfo/mediainfo_22.06.inc11
-rw-r--r--recipes-multimedia/mediainfo/mediainfolib_22.06.bb5
-rw-r--r--recipes-multimedia/mediainfo/zenlib_22.06.bb3
-rwxr-xr-xrecipes-multimedia/tinycompress/tinycompress/0001-tinycompress-Add-id3-decoding.patch1001
-rw-r--r--recipes-multimedia/tinycompress/tinycompress_1.1.6.bb13
13 files changed, 121 insertions, 1095 deletions
diff --git a/recipes-multimedia/alsa-utils/alsa-utils_%.bbappend b/recipes-multimedia/alsa-utils/alsa-utils_%.bbappend
new file mode 100644
index 0000000..e980807
--- /dev/null
+++ b/recipes-multimedia/alsa-utils/alsa-utils_%.bbappend
@@ -0,0 +1 @@
+PACKAGECONFIG:append = " bat"
diff --git a/recipes-multimedia/bluealsa/bluealsa_git.bb b/recipes-multimedia/bluealsa/bluealsa_git.bb
new file mode 100644
index 0000000..ab0d8bc
--- /dev/null
+++ b/recipes-multimedia/bluealsa/bluealsa_git.bb
@@ -0,0 +1,66 @@
+SUMMARY = "Bluetooth Audio ALSA Backend"
+HOMEPAGE = "https://github.com/Arkq/bluez-alsa"
+SECTION = "libs"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8449a4f133a93f6254b496d4fb476e83"
+
+SRC_URI = "git://github.com/Arkq/bluez-alsa.git;protocol=https;branch=master"
+
+SRCREV = "dd05a1baa261b94da9ba977b5e3392c8b4dc7a5e"
+PV = "4.0.0+git${SRCPV}"
+
+S = "${WORKDIR}/git"
+
+DEPENDS += "alsa-lib bluez5 dbus glib-2.0 sbc"
+
+PACKAGECONFIG ??= "aplay cli hcitop ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+PACKAGECONFIG[a2dpconf] = "--enable-a2dpconf,--disable-a2dpconf"
+PACKAGECONFIG[aac] = "--enable-aac,--disable-aac,fdk-aac"
+PACKAGECONFIG[aplay] = "--enable-aplay,--disable-aplay"
+PACKAGECONFIG[cli] = "--enable-cli,--disable-cli"
+PACKAGECONFIG[coverage] = "--with-coverage,--without-coverage,lcov-native"
+PACKAGECONFIG[debug] = "--enable-debug,--disable-debug"
+PACKAGECONFIG[debug-time] = "--enable-debug-time,--disable-debug-time"
+PACKAGECONFIG[faststream] = "--enable-faststream,--disable-faststream"
+PACKAGECONFIG[hcitop] = "--enable-hcitop,--disable-hcitop,libbsd ncurses"
+PACKAGECONFIG[libunwind] = "--with-libunwind,--without-libunwind,libunwind"
+PACKAGECONFIG[mp3lame] = "--enable-mp3lame,--disable-mp3lame,lame"
+PACKAGECONFIG[mpg123] = "--enable-mpg123,--disable-mpg123,mpg123,mpg123"
+PACKAGECONFIG[ofono] = "--enable-ofono,--disable-ofono,ofono"
+PACKAGECONFIG[payloadcheck] = "--enable-payloadcheck,--disable-payloadcheck"
+PACKAGECONFIG[rfcomm] = "--enable-rfcomm,--disable-rfcomm"
+PACKAGECONFIG[systemd] = "--enable-systemd --with-systemdsystemunitdir=${systemd_system_unitdir} \
+ --with-systemdbluealsaargs='${SYSTEMD_BLUEALSA_ARGS}' --with-systemdbluealsaaplayargs='${SYSTEMD_BLUEALSA_APLAY_ARGS}',--disable-systemd,systemd"
+PACKAGECONFIG[test] = "--enable-test,--disable-test,libcheck libsndfile1"
+PACKAGECONFIG[upower] = "--enable-upower,--disable-upower,,upower"
+
+inherit autotools pkgconfig systemd
+
+EXTRA_OECONF = " \
+ --disable-aptx \
+ --disable-lc3plus \
+ --disable-ldac \
+ --disable-manpages \
+"
+
+PACKAGE_BEFORE_PN = "${PN}-aplay"
+RRECOMMENDS:${PN} = "${PN}-aplay"
+
+FILES:${PN}-aplay = "${bindir}/bluealsa-aplay"
+FILES:${PN} += "${libdir}/alsa-lib/*"
+
+SYSTEMD_PACKAGES += "${PN}-aplay"
+SYSTEMD_SERVICE:${PN} = "bluealsa.service"
+SYSTEMD_SERVICE:${PN}-aplay = "bluealsa-aplay.service"
+
+SYSTEMD_AUTO_ENABLE:${PN}-aplay = "disable"
+
+# Choose bluez-alsa arguments to be used in bluealsa systemd service
+# Usually could choose profiles with it: a2dp-source a2dp-sink hfp-hf hfp-ag hsp-hs hsp-ag hfp-ofono
+# Enable bluez-alsa arguments by default:
+SYSTEMD_BLUEALSA_ARGS ?= "-p a2dp-source -p a2dp-sink"
+
+# Choose bluealsa-aplay arguments to be used in bluealsa-aplay systemd service
+# Defaults to be empty:
+SYSTEMD_BLUEALSA_APLAY_ARGS ?= ""
diff --git a/recipes-multimedia/codecgraph/codecgraph_20120114.bb b/recipes-multimedia/codecgraph/codecgraph_20120114.bb
index 54d596a..8602506 100644
--- a/recipes-multimedia/codecgraph/codecgraph_20120114.bb
+++ b/recipes-multimedia/codecgraph/codecgraph_20120114.bb
@@ -2,8 +2,8 @@ SECTION = "multimedia"
SUMMARY = "Tool to generate a graph of HDA codec config"
DESCRIPTION = "Codecgraph is a tool to generate a graph based on the ALSA description of a High Definition Audio codec."
HOMEPAGE = "http://helllabs.org/codecgraph/"
-LICENSE = "GPLv2+"
-RDEPENDS_${PN} = "python graphviz"
+LICENSE = "GPL-2.0-or-later"
+RDEPENDS:${PN} = "python graphviz"
SRC_URI = "http://helllabs.org/codecgraph/codecgraph-${PV}.tar.gz"
LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b"
diff --git a/recipes-multimedia/hda-verb/hda-verb_git.bb b/recipes-multimedia/hda-verb/hda-verb_git.bb
deleted file mode 100644
index 0d2f85d..0000000
--- a/recipes-multimedia/hda-verb/hda-verb_git.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-SECTION = "multimedia"
-SUMMARY = "hda-verb sendS HD-audio commands to ALSA HDA devices"
-HOMEPAGE = ""
-LICENSE = "GPLv2+"
-
-SRCREV = "4bf54c5003af304e9da8ef40475a481086d80d85"
-SRC_URI = "git://git.alsa-project.org/alsa-tools.git;protocol=git"
-LIC_FILES_CHKSUM = "file://hda-verb.c;beginline=7;endline=7;md5=8ede3f4055a5dda3b35bdb0d454bc4cc"
-
-S = "${WORKDIR}/git/hda-verb"
-
-PR = "r1"
-
-inherit autotools
diff --git a/recipes-multimedia/media-files/media-files_1.0.bb b/recipes-multimedia/media-files/media-files_1.0.bb
deleted file mode 100644
index 7ecae30..0000000
--- a/recipes-multimedia/media-files/media-files_1.0.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-SUMMARY = "Media Files for tests"
-LICENSE = "CC0-1.0"
-LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/CC0-1.0;md5=0ceb3372c9595f0a8067e55da801e4a1"
-
-inherit allarch bin_package
-
-SRC_URI = " \
- https://developer1.toradex.com/files/toradex-dev/uploads/media/Colibri/AddSW/Linux/ReleaseTest/media-files-${PV}.tar.xz \
-"
-SRC_URI[md5sum] = "76482bd08f67435f34e93d44738008de"
-SRC_URI[sha256sum] = "021d8261e69433221be4a3996c447411b6002c1e9b34a71c65a3bfe48b54e27d"
-
-S = "${WORKDIR}/media-files"
diff --git a/recipes-multimedia/media-files/media-files_1.3.bb b/recipes-multimedia/media-files/media-files_1.3.bb
new file mode 100644
index 0000000..c51497f
--- /dev/null
+++ b/recipes-multimedia/media-files/media-files_1.3.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Media Files for tests"
+LICENSE = "CC0-1.0"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/CC0-1.0;md5=0ceb3372c9595f0a8067e55da801e4a1"
+
+inherit allarch bin_package
+
+SRC_URI = "https://docs1.toradex.com/114780-media-files-${PV}.tar.xz"
+
+SRC_URI[sha256sum] = "d6a3cd2003798fec80fb8008d2e48a5fa2c581f4ae66c03cd573d33b18341e67"
+
+S = "${WORKDIR}/media-files"
+
+# Install the files to ${D}${ROOT_HOME}
+# Source code of original poky function:
+# https://git.yoctoproject.org/poky/plain/meta/classes-recipe/bin_package.bbclass
+# The function is being modified to install it inside ROOT_HOME, since we want
+# these files inside the root directory and ROOT_HOME can change.
+do_install () {
+ # Do it carefully
+ [ -d "${S}" ] || exit 1
+ if [ -z "$(ls -A ${S})" ]; then
+ bbfatal bin_package has nothing to install. Be sure the SRC_URI unpacks into S.
+ fi
+ cd ${S}
+ install -d ${D}${base_prefix}${ROOT_HOME}
+ tar --no-same-owner --exclude='./patches' --exclude='./.pc' -cpf - . \
+ | tar --no-same-owner -xpf - -C ${D}${base_prefix}${ROOT_HOME}
+}
diff --git a/recipes-multimedia/mediainfo/mediainfo_0.7.62.bb b/recipes-multimedia/mediainfo/mediainfo_0.7.62.bb
deleted file mode 100644
index 51fc4df..0000000
--- a/recipes-multimedia/mediainfo/mediainfo_0.7.62.bb
+++ /dev/null
@@ -1,52 +0,0 @@
-HOMEPAGE = "mediainfo.sourceforge.net"
-SUMMARY = "Mediainfo is a tool to analyze multimedia files"
-LICENSE = "GPLv2_modified"
-
-inherit autotools
-
-SRC_URI = "http://mediaarea.net/download/binary/mediainfo/0.7.62/MediaInfo_CLI_${PV}_GNU_FromSource.tar.bz2"
-LIC_FILES_CHKSUM = "file://${WORKDIR}/MediaInfo_CLI_GNU_FromSource/MediaInfo/License.html;md5=7f3735d23c6ef724bbd1475e4f82edcf"
-
-SRC_URI[md5sum] = "ba10422974111fdff5cf1bb38410c9a1"
-SRC_URI[sha256sum] = "ecdde190c9f02ab26769e590314c4841a1c182e8488f1ad8584bdfb374562564"
-
-S = "${WORKDIR}/MediaInfo_CLI_GNU_FromSource/MediaInfo/Project/GNU/CLI"
-
-do_configure () {
- #build zenlib
- cd ${WORKDIR}/MediaInfo_CLI_GNU_FromSource/ZenLib/Project/GNU/Library/
- my_runconf
- oe_runmake
-
- #build media info lib
- cd ${WORKDIR}/MediaInfo_CLI_GNU_FromSource/MediaInfoLib/Project/GNU/Library/
- my_runconf
- oe_runmake
-
- #build media info
- cd ${S}
- oe_runconf
-}
-
-do_install_prepend () {
- #install media info
- cd ${S}
-}
-
-my_runconf() {
- cfgscript="./configure"
- if [ -x "$cfgscript" ] ; then
- bbnote "Running $cfgscript --build=${BUILD_SYS} --host=${HOST_SYS} --target=${TARGET_SYS} --prefix=${prefix} --exec_prefix=${exec_prefix} --bindir=${bindir} --sbindir=${sbindir} --libexecdir=${libexecdir} --datadir={datadir} --sysconfdir=${sysconfdir} --sharedstatedir=${sharedstatedir} --localstatedir=${localstatedir} --libdir=${libdir} --includedir=${includedir} --oldincludedir=${oldincludedir} --infodir=${infodir} --mandir=${mandir} --disable-silent-rules --disable-dependency-tracking --with-libtool-sysroot=/home/tegradev/oe-core/build/out-eglibc/sysroots/colibri-t20 $@"
- set +e
- ${CACHED_CONFIGUREVARS} $cfgscript --build=${BUILD_SYS} --host=${HOST_SYS} --target=${TARGET_SYS} --prefix=${prefix} --exec_prefix=${exec_prefix} --bindir=${bindir} --sbindir=${sbindir} --libexecdir=${libexecdir} --datadir=${datadir} --sysconfdir=${sysconfdir} --sharedstatedir=${sharedstatedir} --localstatedir=${localstatedir} --libdir=${libdir} --includedir=${includedir} --oldincludedir=${oldincludedir} --infodir=${infodir} --mandir=${mandir} --disable-silent-rules --disable-dependency-tracking ${@append_libtool_sysroot(d)} $@
- if [ "$?" != "0" ]; then
- echo "Configure failed. The contents of all config.log files follows to aid debugging"
- find /home/tegradev/oe-core/build/out-eglibc/work/armv7ahf-vfp-angstrom-linux-gnueabi/mediainfo-0.7.62-r0/mediainfo-0.7.62 -name config.log -print -exec cat {} \;
- bbfatal "oe_runconf failed"
- fi
- set -e
- else
- bbfatal "no configure script found at $cfgscript"
- fi
-}
-
diff --git a/recipes-multimedia/mediainfo/mediainfo_22.06.bb b/recipes-multimedia/mediainfo/mediainfo_22.06.bb
new file mode 100644
index 0000000..e9bbf83
--- /dev/null
+++ b/recipes-multimedia/mediainfo/mediainfo_22.06.bb
@@ -0,0 +1,5 @@
+require mediainfo_22.06.inc
+
+DEPENDS:append = " mediainfolib"
+
+S = "${WORKDIR}/MediaInfo_CLI_GNU_FromSource/MediaInfo/Project/GNU/CLI"
diff --git a/recipes-multimedia/mediainfo/mediainfo_22.06.inc b/recipes-multimedia/mediainfo/mediainfo_22.06.inc
new file mode 100644
index 0000000..3d5fcba
--- /dev/null
+++ b/recipes-multimedia/mediainfo/mediainfo_22.06.inc
@@ -0,0 +1,11 @@
+HOMEPAGE = "mediainfo.sourceforge.net"
+SUMMARY = "Mediainfo is a tool to analyze multimedia files"
+LICENSE = "Apache-2.0|LGPL-2.1-or-later|GPL-2.0-or-later|MPL-2.0"
+
+inherit autotools-brokensep pkgconfig
+
+DEPENDS = "zlib"
+SRC_URI = "https://mediaarea.net/download/binary/mediainfo/${PV}/MediaInfo_CLI_${PV}_GNU_FromSource.tar.bz2"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/MediaInfo_CLI_GNU_FromSource/MediaInfo/License.html;md5=d9af910c0a24603839b95a00d63c1ecc"
+
+SRC_URI[sha256sum] = "e96633cfced36e7810fc5cd0f15a83362be1f4670e0b38971d8172003dd068d3"
diff --git a/recipes-multimedia/mediainfo/mediainfolib_22.06.bb b/recipes-multimedia/mediainfo/mediainfolib_22.06.bb
new file mode 100644
index 0000000..b84eeda
--- /dev/null
+++ b/recipes-multimedia/mediainfo/mediainfolib_22.06.bb
@@ -0,0 +1,5 @@
+require mediainfo_22.06.inc
+
+DEPENDS:append = " zenlib"
+
+S = "${WORKDIR}/MediaInfo_CLI_GNU_FromSource/MediaInfoLib/Project/GNU/Library"
diff --git a/recipes-multimedia/mediainfo/zenlib_22.06.bb b/recipes-multimedia/mediainfo/zenlib_22.06.bb
new file mode 100644
index 0000000..966fb18
--- /dev/null
+++ b/recipes-multimedia/mediainfo/zenlib_22.06.bb
@@ -0,0 +1,3 @@
+require mediainfo_22.06.inc
+
+S = "${WORKDIR}/MediaInfo_CLI_GNU_FromSource/ZenLib/Project/GNU/Library"
diff --git a/recipes-multimedia/tinycompress/tinycompress/0001-tinycompress-Add-id3-decoding.patch b/recipes-multimedia/tinycompress/tinycompress/0001-tinycompress-Add-id3-decoding.patch
deleted file mode 100755
index f578148..0000000
--- a/recipes-multimedia/tinycompress/tinycompress/0001-tinycompress-Add-id3-decoding.patch
+++ /dev/null
@@ -1,1001 +0,0 @@
-From 16f6b7a5baec41f18fde75fd311fb988e3c31810 Mon Sep 17 00:00:00 2001
-From: Shengjiu Wang <shengjiu.wang@nxp.com>
-Date: Fri, 13 Jul 2018 18:13:24 +0800
-Subject: [PATCH] tinycompress: Add id3 decoding
-
-Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
----
- include/tinycompress/id3_tag_decode.h | 198 +++++++++++
- src/utils/Makefile.am | 2 +-
- src/utils/cplay.c | 88 +++++
- src/utils/id3_tag_decode.c | 642 ++++++++++++++++++++++++++++++++++
- 4 files changed, 929 insertions(+), 1 deletion(-)
- create mode 100644 include/tinycompress/id3_tag_decode.h
- create mode 100644 src/utils/id3_tag_decode.c
-
-diff --git a/include/tinycompress/id3_tag_decode.h b/include/tinycompress/id3_tag_decode.h
-new file mode 100644
-index 0000000..1a911d7
---- /dev/null
-+++ b/include/tinycompress/id3_tag_decode.h
-@@ -0,0 +1,198 @@
-+/*
-+ * Copyright (c) 2006-2017 Cadence Design Systems, Inc.
-+ * Copyright 2018 NXP
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining
-+ * a copy of this software and associated documentation files (the
-+ * "Software"), to deal in the Software without restriction, including
-+ * without limitation the rights to use, copy, modify, merge, publish,
-+ * distribute, sublicense, and/or sell copies of the Software, and to
-+ * permit persons to whom the Software is furnished to do so, subject to
-+ * the following conditions:
-+ *
-+ * The above copyright notice and this permission notice shall be included
-+ * in all copies or substantial portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-+ */
-+
-+/******************************************************************
-+ * file name : id3_tag_decode.h
-+ *
-+ * description : stores typedefs of structures specific to MP3 tag
-+ *
-+ * revision history:
-+ * 29 04 2004 DK creation
-+ *****************************************************************/
-+
-+#ifndef ID3_TAG_DECODE_H
-+#define ID3_TAG_DECODE_H
-+
-+typedef signed char WORD8;
-+typedef signed char * pWORD8;
-+typedef unsigned char UWORD8;
-+typedef unsigned char * pUWORD8;
-+
-+typedef signed short WORD16;
-+typedef signed short * pWORD16;
-+typedef unsigned short UWORD16;
-+typedef unsigned short * pUWORD16;
-+
-+typedef signed int WORD24;
-+typedef signed int * pWORD24;
-+typedef unsigned int UWORD24;
-+typedef unsigned int * pUWORD24;
-+
-+typedef signed int WORD32;
-+typedef signed int * pWORD32;
-+typedef unsigned int UWORD32;
-+typedef unsigned int * pUWORD32;
-+
-+typedef void VOID;
-+typedef void * pVOID;
-+
-+typedef signed int BOOL;
-+typedef unsigned int UBOOL;
-+typedef signed int FLAG;
-+typedef unsigned int UFLAG;
-+typedef signed int LOOPIDX;
-+typedef unsigned int ULOOPIDX;
-+typedef signed int WORD;
-+typedef unsigned int UWORD;
-+
-+#define MAX_TAG_FRAME_SIZE 100
-+
-+#define ID3V1 (0x544147) /* 0x544147 is TAG in WORD8 */
-+
-+#define ID3V2 (0x494433) /* 0x494433 is ID3 in WORD8 */
-+
-+/*
-+ * structure corresponding to ID3 tag v1 header.
-+ * this structure has all the field corresponding to ID3 tag v1 header.
-+ */
-+
-+typedef struct {
-+ WORD32 tag; // 3 bytes
-+
-+ WORD16 version; // 2 bytes
-+
-+ WORD8 flag; //1 byte
-+
-+ WORD32 size; //4 bytes
-+
-+} id3_v2_header_struct;
-+
-+/* structure which will store the frame data and
-+ * also put a limit max data to be stored
-+ */
-+typedef struct {
-+ WORD8 frame_data[MAX_TAG_FRAME_SIZE];
-+
-+ WORD32 max_size; //4 bytes
-+
-+ WORD16 tag_present;
-+
-+ WORD16 exceeds_buffer_size;
-+
-+} id3_v2_frame_struct;
-+
-+/*
-+ * structure corresponding to ID3 tag v2.
-+ * this structure has some of the field corresponding to ID3 tag v2.
-+ * if user wants to read some more tag information from
-+ * the MP3 file, he can add that field in this structure and pass address
-+ * of that element to get_inf function in id3_tag_decode.c under the
-+ * corresponding field frame header. few fields which are needed are already
-+ * populated by reading from the TAG header.
-+ */
-+typedef struct {
-+ id3_v2_frame_struct album_movie_show_title;
-+
-+ id3_v2_frame_struct composer_name;
-+
-+ id3_v2_frame_struct content_type;
-+
-+ id3_v2_frame_struct encoded_by;
-+
-+ id3_v2_frame_struct lyricist_text_writer;
-+
-+ id3_v2_frame_struct content_group_description;
-+
-+ id3_v2_frame_struct title_songname_content_description;
-+
-+ id3_v2_frame_struct medxa_type;
-+
-+ id3_v2_frame_struct original_album_movie_show_title;
-+
-+ id3_v2_frame_struct original_filename;
-+
-+ id3_v2_frame_struct original_lyricist_text_writer;
-+
-+ id3_v2_frame_struct original_artist_performer;
-+
-+ id3_v2_frame_struct file_owner_licensee;
-+
-+ id3_v2_frame_struct lead_performer_soloist;
-+
-+ id3_v2_frame_struct publisher;
-+
-+ id3_v2_frame_struct private_frame;
-+
-+ id3_v2_frame_struct other_info;
-+
-+ id3_v2_header_struct id3_v2_header;
-+
-+ WORD32 header_end;
-+
-+ WORD32 bytes_consumed;
-+
-+} id3v2_struct;
-+
-+/*
-+ * structure corresponding to ID3 tag v1.
-+ * this structure has all the field corresponding to ID3 tag v1.
-+ */
-+typedef struct {
-+ WORD8 song_title[30]; //30 word8acters
-+
-+ WORD8 artist[30]; //30 word8acters
-+
-+ WORD8 album[30]; //30 word8acters
-+
-+ WORD8 year[4]; //4 word8acters
-+
-+ WORD8 comment[30]; //30 word8acters
-+
-+ WORD8 genre[1]; //1 byte
-+
-+} id3v1_struct;
-+
-+WORD32 get_info(const char *inp_buffer,
-+ unsigned int avail_inp,
-+ WORD32 tag_size,
-+ id3_v2_frame_struct *dest);
-+
-+WORD32 search_id3_v2(UWORD8 *buffer);
-+
-+WORD32 decode_id3_v2(const char *const buffer,
-+ id3v2_struct *id3v2,
-+ WORD32 continue_flag,
-+ WORD32 insize);
-+
-+WORD32 get_id3_v2_bytes(UWORD8 *buffer);
-+
-+WORD32 get_v1_info(UWORD8 *buffer, id3v1_struct *id3v1);
-+
-+WORD32 search_id3_v1(UWORD8 *buffer);
-+
-+WORD32 decode_id3_v1(UWORD8 *buffer, id3v1_struct *id3v1);
-+
-+void init_id3v2_field(id3v2_struct *id3v2);
-+
-+#endif
-diff --git a/src/utils/Makefile.am b/src/utils/Makefile.am
-index 1b996d4..e813689 100644
---- a/src/utils/Makefile.am
-+++ b/src/utils/Makefile.am
-@@ -1,6 +1,6 @@
- bin_PROGRAMS = cplay crecord
-
--cplay_SOURCES = cplay.c
-+cplay_SOURCES = cplay.c id3_tag_decode.c
- crecord_SOURCES = crecord.c
-
- cplay_CFLAGS = -I$(top_srcdir)/include
-diff --git a/src/utils/cplay.c b/src/utils/cplay.c
-index 87863a3..2a52b52 100644
---- a/src/utils/cplay.c
-+++ b/src/utils/cplay.c
-@@ -72,6 +72,7 @@
- #include "sound/compress_params.h"
- #include "tinycompress/tinycompress.h"
- #include "tinycompress/tinymp3.h"
-+#include "tinycompress/id3_tag_decode.h"
-
- static int verbose;
- static const unsigned int DEFAULT_CODEC_ID = SND_AUDIOCODEC_PCM;
-@@ -245,12 +246,97 @@ int main(int argc, char **argv)
- exit(EXIT_SUCCESS);
- }
-
-+void shift_buffer(char *buf, int buf_size, int bytes_consumed)
-+{
-+ int i;
-+
-+ if (bytes_consumed <= 0)
-+ return;
-+
-+ for (i = 0; i < buf_size - bytes_consumed; i++)
-+ buf[i] = buf[i + bytes_consumed];
-+}
-+
-+void parse_id3(FILE *file, int *offset) {
-+ /* ID3 tag specific declarations */
-+ unsigned char id3_buf[128];
-+ unsigned char id3v2_buf[4096];
-+ signed int id3_v1_found = 0, id3_v1_decoded = 0;
-+ signed int id3_v2_found = 0, id3_v2_complete = 0;
-+ signed int i_bytes_consumed = 0;
-+ signed int i_fread_bytes;
-+ id3v1_struct id3v1;
-+ id3v2_struct id3v2;
-+
-+ {
-+ fseek(file, -128, SEEK_END);
-+ fread(id3_buf, 1, 128, file);
-+
-+ /* search for ID3V1 */
-+ id3_v1_found = search_id3_v1(id3_buf + 0);
-+ if (id3_v1_found) {
-+ /* if ID3V1 is found, decode ID3V1 */
-+ decode_id3_v1(id3_buf + 3, &id3v1);
-+ id3_v1_decoded = 1;
-+ }
-+ fseek(file, 0, SEEK_SET);
-+ }
-+
-+ {
-+ signed int flag = 0;
-+ signed int continue_flag = 0;
-+
-+ i_fread_bytes = fread(id3v2_buf,
-+ sizeof(char), 0x1000, file);
-+
-+ /* search for ID3V2 */
-+ id3_v2_found =
-+ search_id3_v2(id3v2_buf);
-+
-+ if (id3_v2_found) {
-+ /* initialise the max fields */
-+ init_id3v2_field(&id3v2);
-+
-+ while (!id3_v2_complete && id3_v2_found) {
-+ /* if ID3V2 is found, decode ID3V2 */
-+ id3_v2_complete = decode_id3_v2((const char *const)id3v2_buf,
-+ &id3v2, continue_flag, i_fread_bytes);
-+
-+ if (!id3_v2_complete) {
-+ continue_flag = 1;
-+ i_bytes_consumed = id3v2.bytes_consumed;
-+
-+ fseek(file, i_bytes_consumed, SEEK_SET);
-+
-+ i_fread_bytes = fread(id3v2_buf,
-+ sizeof(unsigned char), 0x1000, file);
-+ if (i_fread_bytes <= 0) {
-+ return;
-+ }
-+ }
-+ }
-+
-+ if (id3_v2_complete) {
-+ i_bytes_consumed = id3v2.bytes_consumed;
-+ fseek(file, i_bytes_consumed, SEEK_SET);
-+ }
-+ }
-+ }
-+
-+ *offset = i_bytes_consumed;
-+}
-+
- void get_codec_mp3(FILE *file, struct compr_config *config,
- struct snd_codec *codec)
- {
- size_t read;
- struct mp3_header header;
- unsigned int channels, rate, bits;
-+ int offset = 0;
-+
-+ parse_id3(file, &offset);
-+
-+ fseek(file, offset, SEEK_SET);
-
- read = fread(&header, 1, sizeof(header), file);
- if (read != sizeof(header)) {
-@@ -279,6 +365,8 @@ void get_codec_mp3(FILE *file, struct compr_config *config,
- codec->level = 0;
- codec->ch_mode = 0;
- codec->format = 0;
-+
-+ fseek(file, offset, SEEK_SET);
- }
-
- void get_codec_iec(FILE *file, struct compr_config *config,
-diff --git a/src/utils/id3_tag_decode.c b/src/utils/id3_tag_decode.c
-new file mode 100644
-index 0000000..393967a
---- /dev/null
-+++ b/src/utils/id3_tag_decode.c
-@@ -0,0 +1,642 @@
-+/*
-+ * Copyright (c) 2006-2017 Cadence Design Systems, Inc.
-+ * Copyright 2018 NXP
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining
-+ * a copy of this software and associated documentation files (the
-+ * "Software"), to deal in the Software without restriction, including
-+ * without limitation the rights to use, copy, modify, merge, publish,
-+ * distribute, sublicense, and/or sell copies of the Software, and to
-+ * permit persons to whom the Software is furnished to do so, subject to
-+ * the following conditions:
-+ *
-+ * The above copyright notice and this permission notice shall be included
-+ * in all copies or substantial portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-+ */
-+#include <ctype.h>
-+#include "tinycompress/id3_tag_decode.h"
-+
-+#define CHAR4(c1, c2, c3, c4) \
-+ (int)(((unsigned char)(c1) << 24) | \
-+ ((unsigned char)(c2) << 16) | \
-+ ((unsigned char)(c3) << 8) | \
-+ ((unsigned char)c4))
-+
-+#ifndef MSVC_BUILD
-+unsigned int umin(unsigned int a, unsigned int b)
-+{
-+ return (a < b ? a : b);
-+}
-+
-+#else
-+unsigned int umin(unsigned int a, unsigned int b)
-+{
-+ return (a < b ? a : b);
-+}
-+#endif
-+
-+/***********************************************************
-+ * function name : display
-+ *
-+ * description : display ID3 tag contents.
-+ *
-+ * arguments : input parameters
-+ *
-+ * values returned : 0
-+ ***********************************************************/
-+
-+static void display2(const id3_v2_frame_struct * const src,
-+ int size,
-+ const char * const disp)
-+{
-+ int j;
-+
-+
-+ for (j = 0; j < size; j++) {
-+ int c = src->frame_data[j];
-+
-+ if (c) {
-+ if (!isprint(c))
-+ break;
-+ }
-+ }
-+}
-+
-+static VOID display1(WORD8 src[], WORD32 size, WORD8 disp[])
-+{
-+ WORD32 j;
-+
-+ for (j = 0; j < size ; j++) {
-+ int c = src[j];
-+
-+ if (c) {
-+ if (!isprint(c))
-+ break;
-+ }
-+ }
-+}
-+
-+/*****************************************************************
-+ * function name : init_id3_header
-+ *
-+ * description : initialise the max filed size of teh farem.
-+ *
-+ * arguments : input parameters
-+ *
-+ * values returned : 0
-+ ****************************************************************/
-+
-+VOID init_id3v2_field(id3v2_struct *id3v2)
-+{
-+ id3v2->album_movie_show_title.max_size = MAX_TAG_FRAME_SIZE;
-+ id3v2->composer_name.max_size = MAX_TAG_FRAME_SIZE;
-+ id3v2->content_type.max_size = MAX_TAG_FRAME_SIZE;
-+ id3v2->encoded_by.max_size = MAX_TAG_FRAME_SIZE;
-+ id3v2->lyricist_text_writer.max_size = MAX_TAG_FRAME_SIZE;
-+ id3v2->content_group_description.max_size = MAX_TAG_FRAME_SIZE;
-+ id3v2->title_songname_content_description.max_size = MAX_TAG_FRAME_SIZE;
-+ id3v2->medxa_type.max_size = MAX_TAG_FRAME_SIZE;
-+ id3v2->original_album_movie_show_title.max_size = MAX_TAG_FRAME_SIZE;
-+ id3v2->original_filename.max_size = MAX_TAG_FRAME_SIZE;
-+ id3v2->original_lyricist_text_writer.max_size = MAX_TAG_FRAME_SIZE;
-+ id3v2->original_artist_performer.max_size = MAX_TAG_FRAME_SIZE;
-+ id3v2->file_owner_licensee.max_size = MAX_TAG_FRAME_SIZE;
-+ id3v2->lead_performer_soloist.max_size = MAX_TAG_FRAME_SIZE;
-+ id3v2->publisher.max_size = MAX_TAG_FRAME_SIZE;
-+ id3v2->private_frame.max_size = MAX_TAG_FRAME_SIZE;
-+ id3v2->other_info.max_size = MAX_TAG_FRAME_SIZE;
-+
-+ /* resetting the flag to indicate presese of frame */
-+ id3v2->album_movie_show_title.tag_present = 0;
-+ id3v2->composer_name.tag_present = 0;
-+ id3v2->content_type.tag_present = 0;
-+ id3v2->encoded_by.tag_present = 0;
-+ id3v2->lyricist_text_writer.tag_present = 0;
-+ id3v2->content_group_description.tag_present = 0;
-+ id3v2->title_songname_content_description.tag_present = 0;
-+ id3v2->medxa_type.tag_present = 0;
-+ id3v2->original_album_movie_show_title.tag_present = 0;
-+ id3v2->original_filename.tag_present = 0;
-+ id3v2->original_lyricist_text_writer.tag_present = 0;
-+ id3v2->original_artist_performer.tag_present = 0;
-+ id3v2->file_owner_licensee.tag_present = 0;
-+ id3v2->lead_performer_soloist.tag_present = 0;
-+ id3v2->publisher.tag_present = 0;
-+ id3v2->private_frame.tag_present = 0;
-+ id3v2->other_info.tag_present = 0;
-+
-+ /* resetting the flag which indicates that size of the frame has
-+ * exceeded the max buffer size
-+ */
-+ id3v2->album_movie_show_title.exceeds_buffer_size = 0;
-+ id3v2->composer_name.exceeds_buffer_size = 0;
-+ id3v2->content_type.exceeds_buffer_size = 0;
-+ id3v2->encoded_by.exceeds_buffer_size = 0;
-+ id3v2->lyricist_text_writer.exceeds_buffer_size = 0;
-+ id3v2->content_group_description.exceeds_buffer_size = 0;
-+ id3v2->title_songname_content_description.exceeds_buffer_size = 0;
-+ id3v2->medxa_type.exceeds_buffer_size = 0;
-+ id3v2->original_album_movie_show_title.exceeds_buffer_size = 0;
-+ id3v2->original_filename.exceeds_buffer_size = 0;
-+ id3v2->original_lyricist_text_writer.exceeds_buffer_size = 0;
-+ id3v2->original_artist_performer.exceeds_buffer_size = 0;
-+ id3v2->file_owner_licensee.exceeds_buffer_size = 0;
-+ id3v2->lead_performer_soloist.exceeds_buffer_size = 0;
-+ id3v2->publisher.exceeds_buffer_size = 0;
-+ id3v2->private_frame.exceeds_buffer_size = 0;
-+ id3v2->other_info.exceeds_buffer_size = 0;
-+
-+ id3v2->bytes_consumed = 0;
-+ id3v2->header_end = 0;
-+}
-+
-+/***************************************************************
-+ * function name : search_id3_v2
-+ *
-+ * description : finds if ID3V2 starts at the start of given buffer.
-+ *
-+ * arguments : input parameters
-+ * buffer input buffer
-+ *
-+ * values returned : FLAG 1: ID3 found 0: ID3 not found
-+ ***************************************************************/
-+WORD32 search_id3_v2(UWORD8 *buffer)
-+{
-+ UWORD32 temp;
-+
-+ temp = buffer[0] << 16;
-+ temp |= buffer[1] << 8;
-+ temp |= buffer[2];
-+
-+ if (temp == ID3V2)
-+ return 1; /* ID3 found */
-+
-+ return 0; /* ID3 not found */
-+}
-+
-+/**************************************************************
-+ * function name : search_id3_v1
-+ *
-+ * description : finds if ID3V1 starts at the start of given buffer.
-+ *
-+ * arguments : input parameters
-+ * buffer input buffer
-+ *
-+ * values returned : FLAG 1: ID3 found 0: ID3 not found
-+ **************************************************************/
-+WORD32 search_id3_v1(UWORD8 *buffer)
-+{
-+ UWORD32 temp;
-+
-+ temp = buffer[0] << 16;
-+ temp |= buffer[1] << 8;
-+ temp |= buffer[2];
-+
-+ if (temp == ID3V1)
-+ return 1; /* ID3 found */
-+
-+ return 0; /* ID3 not found */
-+}
-+
-+/***************************************************************
-+ * function name : decode_id3_v1
-+ *
-+ * description : decodes ID3V1 tag.
-+ *
-+ * arguments : input parameters
-+ * buffer input buffer
-+ * id3v1 structure
-+ *
-+ * values returned : bytes consumed
-+ **************************************************************/
-+WORD32 decode_id3_v1(UWORD8 *buffer, id3v1_struct *id3v1)
-+{
-+ WORD32 bytes_consumed = 0;
-+ short tag_type;
-+
-+ /* setting the tag type */
-+ tag_type = 1;
-+
-+ bytes_consumed = get_v1_info(buffer, id3v1);
-+
-+ return bytes_consumed;
-+}
-+
-+/***********************************************************
-+ * function name : get_v1_info
-+ *
-+ * description : gets ID3V1 information fields.
-+ *
-+ * arguments : input parameters
-+ * buffer input buffer
-+ * id3v1 structure
-+ *
-+ * values returned : bytes consumed
-+ ***********************************************************/
-+WORD32 get_v1_info(UWORD8 *buffer, id3v1_struct *id3v1)
-+{
-+ WORD32 i;
-+ WORD32 bytes_consumed = 0;
-+
-+ /* get song_title */
-+ for (i = 0; i < 30; i++)
-+ id3v1->song_title[i] = buffer[i];
-+
-+ buffer += 30;
-+ bytes_consumed += 30;
-+ display1(id3v1->song_title, 30, (WORD8 *)"song_title : ");
-+
-+ /* get artist */
-+ for (i = 0; i < 30; i++)
-+ id3v1->artist[i] = buffer[i];
-+
-+ buffer += 30;
-+ bytes_consumed += 30;
-+ display1(id3v1->artist, 30, (WORD8 *)"artist : ");
-+
-+ /* get album */
-+ for (i = 0; i < 30; i++)
-+ id3v1->album[i] = buffer[i];
-+
-+ buffer += 30;
-+ bytes_consumed += 30;
-+ display1(id3v1->album, 30, (WORD8 *)"album : ");
-+
-+ /* get year */
-+ for (i = 0; i < 4; i++)
-+ id3v1->year[i] = buffer[i];
-+
-+ buffer += 4;
-+ bytes_consumed += 4;
-+ display1(id3v1->year, 4, (WORD8 *)"year : ");
-+
-+ /* get comment */
-+ for (i = 0; i < 30; i++)
-+ id3v1->comment[i] = buffer[i];
-+
-+ buffer += 30;
-+ bytes_consumed += 30;
-+ display1(id3v1->comment, 30, (WORD8 *)"comment : ");
-+
-+ /* get genre */
-+ for (i = 0; i < 1; i++)
-+ id3v1->genre[i] = buffer[i];
-+
-+ buffer += 1;
-+ bytes_consumed += 1;
-+
-+ return bytes_consumed;
-+}
-+
-+/*****************************************************
-+ * function name : decode_id3_v2
-+ *
-+ * description : decodes ID3V2 tag.
-+ *
-+ * arguments : input parameters
-+ * buffer input buffer
-+ * id3v2 structure
-+ * continue_flag FLAG to indicate whether
-+ * it is first call or not
-+ * insize input buffer size
-+ *
-+ * values returned : bytes consumed
-+ ******************************************************/
-+WORD32 decode_id3_v2(const char *const buffer,
-+ id3v2_struct *const id3v2,
-+ WORD32 continue_flag,
-+ WORD32 insize)
-+{
-+ UWORD32 size = 0, flag;
-+ WORD32 i, buf_update_val;
-+ UWORD8 buf[4], frame_header[10], id3_buffer[10];
-+ WORD8 *bitstream_ptr;
-+ short tag_type;
-+
-+ WORD32 bytes_consumed = 0;
-+
-+ if (id3v2->header_end == 1) {
-+ id3v2->bytes_consumed += insize;
-+ if (id3v2->bytes_consumed < id3v2->id3_v2_header.size)
-+ return 0;
-+
-+ id3v2->bytes_consumed = (id3v2->id3_v2_header.size + 10);
-+ return 1;
-+ }
-+
-+ bitstream_ptr = (WORD8 *)id3_buffer;
-+
-+ if (!continue_flag) {
-+ bytes_consumed += 3;
-+ /* setting the tag type */
-+ tag_type = 2;
-+ id3v2->id3_v2_header.version = buffer[bytes_consumed + 0] << 8;
-+ id3v2->id3_v2_header.version |= buffer[bytes_consumed + 1];
-+ id3v2->id3_v2_header.flag = buffer[bytes_consumed + 2];
-+
-+ /* making the msb of each byte zero */
-+ buf[0] = buffer[bytes_consumed + 6] & 0x7f;
-+ buf[1] = buffer[bytes_consumed + 5] & 0x7f;
-+ buf[2] = buffer[bytes_consumed + 4] & 0x7f;
-+ buf[3] = buffer[bytes_consumed + 3] & 0x7f;
-+
-+ bytes_consumed += 7;
-+
-+ /* concatenation the bytes after making
-+ * 7th bit zero to get 28 bits size
-+ */
-+ size = buf[0];
-+ size |= (buf[1] << 7);
-+ size |= (buf[2] << 14);
-+ size |= (buf[3] << 21);
-+ /* storing the size */
-+ id3v2->id3_v2_header.size = size;
-+
-+ /* check for extended header */
-+ if (id3v2->id3_v2_header.flag & 0x20) {
-+ for (i = 0; i < 10; i++)
-+ bitstream_ptr[i] = buffer[bytes_consumed + i];
-+
-+ i = 0;
-+ bytes_consumed += 10;
-+
-+ size = bitstream_ptr[i++] << 24;
-+ size |= bitstream_ptr[i++] << 16;
-+ size |= bitstream_ptr[i++] << 8;
-+ size |= bitstream_ptr[i++];
-+
-+ /* two bytes for flag */
-+ i += 2;
-+ {
-+ UWORD32 padding_size;
-+
-+ padding_size = bitstream_ptr[i++] << 24;
-+ padding_size |= bitstream_ptr[i++] << 16;
-+ padding_size |= bitstream_ptr[i++] << 8;
-+ padding_size |= bitstream_ptr[i++];
-+
-+ /* skipping the padding and frame size
-+ * number of bytes
-+ */
-+ bytes_consumed += (padding_size + size);
-+ }
-+ }
-+ }
-+
-+ while (id3v2->header_end != 1) {
-+ char *key;
-+ id3_v2_frame_struct *value;
-+ unsigned int avail_inp;
-+
-+ /* reading the 10 bytes to get the frame header */
-+
-+ for (i = 0; i < 10; i++)
-+ frame_header[i] = buffer[bytes_consumed + i];
-+ bytes_consumed += 10;
-+
-+ /* getting the size from the header */
-+ size = frame_header[4] << 24;
-+ size |= frame_header[5] << 16;
-+ size |= frame_header[6] << 8;
-+ size |= frame_header[7];
-+
-+ /* decoding the flag, currently not used */
-+ flag = frame_header[8] << 8;
-+ flag |= frame_header[9];
-+
-+ avail_inp = insize - bytes_consumed;
-+
-+ /* switching to the frame type */
-+ switch (CHAR4(frame_header[0],
-+ frame_header[1],
-+ frame_header[2],
-+ frame_header[3])) {
-+ case CHAR4('A', 'E', 'N', 'C'):
-+ case CHAR4('A', 'P', 'I', 'C'):
-+ case CHAR4('C', 'O', 'M', 'M'):
-+ case CHAR4('C', 'O', 'M', 'R'):
-+ case CHAR4('E', 'N', 'C', 'R'):
-+ case CHAR4('E', 'Q', 'U', 'A'):
-+ case CHAR4('E', 'T', 'C', 'O'):
-+ case CHAR4('G', 'E', 'O', 'B'):
-+ case CHAR4('G', 'R', 'I', 'D'):
-+ case CHAR4('I', 'P', 'L', 'S'):
-+ case CHAR4('L', 'I', 'N', 'K'):
-+ case CHAR4('M', 'C', 'D', 'I'):
-+ case CHAR4('M', 'L', 'L', 'T'):
-+ case CHAR4('O', 'W', 'N', 'E'):
-+ case CHAR4('P', 'C', 'N', 'T'):
-+ case CHAR4('P', 'O', 'P', 'M'):
-+ case CHAR4('P', 'O', 'S', 'S'):
-+ case CHAR4('R', 'B', 'U', 'F'):
-+ case CHAR4('R', 'V', 'A', 'D'):
-+ case CHAR4('R', 'V', 'R', 'B'):
-+ case CHAR4('S', 'Y', 'L', 'T'):
-+ case CHAR4('S', 'Y', 'T', 'C'):
-+ case CHAR4('T', 'B', 'P', 'M'):
-+ case CHAR4('T', 'C', 'O', 'P'):
-+ case CHAR4('T', 'D', 'A', 'T'):
-+ case CHAR4('T', 'D', 'L', 'Y'):
-+ case CHAR4('T', 'F', 'L', 'T'):
-+ case CHAR4('T', 'I', 'M', 'E'):
-+ case CHAR4('T', 'K', 'E', 'Y'):
-+ case CHAR4('T', 'L', 'A', 'N'):
-+ case CHAR4('T', 'L', 'E', 'N'):
-+ case CHAR4('T', 'M', 'E', 'D'):
-+ case CHAR4('T', 'O', 'F', 'N'):
-+ case CHAR4('T', 'O', 'L', 'Y'):
-+ case CHAR4('T', 'O', 'R', 'Y'):
-+ case CHAR4('T', 'P', 'E', '2'):
-+ case CHAR4('T', 'P', 'E', '3'):
-+ case CHAR4('T', 'P', 'E', '4'):
-+ case CHAR4('T', 'P', 'O', 'S'):
-+ case CHAR4('T', 'R', 'C', 'K'):
-+ case CHAR4('T', 'R', 'D', 'A'):
-+ case CHAR4('T', 'R', 'S', 'N'):
-+ case CHAR4('T', 'R', 'S', 'O'):
-+ case CHAR4('T', 'S', 'I', 'Z'):
-+ case CHAR4('T', 'S', 'R', 'C'):
-+ case CHAR4('T', 'S', 'S', 'E'):
-+ case CHAR4('T', 'Y', 'E', 'R'):
-+ case CHAR4('T', 'X', 'X', 'X'):
-+ case CHAR4('U', 'F', 'I', 'D'):
-+ case CHAR4('U', 'S', 'E', 'R'):
-+ case CHAR4('U', 'S', 'L', 'T'):
-+ case CHAR4('W', 'C', 'O', 'M'):
-+ case CHAR4('W', 'C', 'O', 'P'):
-+ case CHAR4('W', 'O', 'A', 'F'):
-+ case CHAR4('W', 'O', 'A', 'R'):
-+ case CHAR4('W', 'O', 'A', 'S'):
-+ case CHAR4('W', 'O', 'R', 'S'):
-+ case CHAR4('W', 'P', 'A', 'Y'):
-+ case CHAR4('W', 'P', 'U', 'B'):
-+ case CHAR4('W', 'X', 'X', 'X'):
-+ case CHAR4('T', 'I', 'T', '3'):
-+ key = "other_info : ";
-+ value = &id3v2->other_info;
-+ break;
-+ case CHAR4('P', 'R', 'I', 'V'):
-+ key = "private_frame : ";
-+ value = &id3v2->private_frame;
-+ break;
-+ case CHAR4('T', 'A', 'L', 'B'):
-+ key = "album_movie_show_title : ";
-+ value = &id3v2->album_movie_show_title;
-+ break;
-+ case CHAR4('T', 'C', 'O', 'M'):
-+ key = "composer_name : ";
-+ value = &id3v2->composer_name;
-+ break;
-+ case CHAR4('T', 'C', 'O', 'N'):
-+ key = "content_type : ";
-+ value = &id3v2->content_type;
-+ break;
-+ case CHAR4('T', 'E', 'N', 'C'):
-+ key = "encoded_by : ";
-+ value = &id3v2->encoded_by;
-+ break;
-+ case CHAR4('T', 'E', 'X', 'T'):
-+ key = "lyricist_text_writer : ";
-+ value = &id3v2->lyricist_text_writer;
-+ break;
-+ case CHAR4('T', 'I', 'T', '1'):
-+ key = "content_group_description : ";
-+ value = &id3v2->content_group_description;
-+ break;
-+ case CHAR4('T', 'I', 'T', '2'):
-+ key = "title_songname_content_description : ";
-+ value = &id3v2->title_songname_content_description;
-+ break;
-+ case CHAR4('T', 'O', 'A', 'L'):
-+ key = "original_album_movie_show_title : ";
-+ value = &id3v2->original_album_movie_show_title;
-+ break;
-+ case CHAR4('T', 'O', 'P', 'E'):
-+ key = "original_artist_performer : ";
-+ value = &id3v2->original_artist_performer;
-+ break;
-+ case CHAR4('T', 'O', 'W', 'N'):
-+ key = "file_owner_licensee : ";
-+ value = &id3v2->file_owner_licensee;
-+ break;
-+ case CHAR4('T', 'P', 'E', '1'):
-+ key = "lead_performer_soloist : ";
-+ value = &id3v2->lead_performer_soloist;
-+ break;
-+ case CHAR4('T', 'P', 'U', 'B'):
-+ key = "publisher : ";
-+ value = &id3v2->publisher;
-+ break;
-+ default:
-+ /* skipping the read 10 bytes */
-+ buf_update_val = -10;
-+ id3v2->header_end = 1;
-+ value = 0;
-+ key = 0;
-+ break;
-+ }
-+
-+ if (value != 0)
-+ buf_update_val = get_info(&buffer[bytes_consumed],
-+ avail_inp, size, value);
-+
-+ /* Negative value for buf_update_val means one of two things:
-+ * 1. The default case happened and we're done with ID3V2 tag
-+ * frames, or
-+ * 2. get_info() returned -1 to indicate that more input is
-+ * required to decode this frame of the tag.
-+ */
-+ if (buf_update_val >= 0)
-+ display2(value,
-+ umin(value->max_size, buf_update_val), key);
-+
-+ if (buf_update_val == -1) {
-+ id3v2->bytes_consumed += bytes_consumed;
-+ return 1;
-+ }
-+
-+ bytes_consumed += buf_update_val;
-+
-+ /* Is there enough input left (10 bytes) to begin
-+ * decoding another frame? If not, bag out temporarily
-+ * now. The caller will refill our input buffer and
-+ * call us again with continue_flag == 1.
-+ */
-+ if (insize - bytes_consumed < 10) {
-+ id3v2->bytes_consumed += bytes_consumed;
-+ return 0; /* not completely decoded */
-+ }
-+ }
-+
-+ id3v2->bytes_consumed += bytes_consumed;
-+ if ((id3v2->bytes_consumed + 10) < id3v2->id3_v2_header.size)
-+ return 0; /* not completely decoded */
-+
-+ return 1; /* completely decoded */
-+}
-+
-+/*******************************************************
-+ * function name : get_id3_v2_bytes
-+ *
-+ * description : tells the size of ID3V2 tag.
-+ *
-+ * arguments : input parameters
-+ * buffer input buffer
-+ *
-+ * values returned : bytes consumed
-+ ********************************************************/
-+WORD32 get_id3_v2_bytes(UWORD8 *buffer)
-+{
-+ WORD32 size;
-+
-+ /* making the msb of each byte zero */
-+ size = (buffer[9] & 0x7f);
-+ size |= ((buffer[8] & 0x7f) << 7);
-+ size |= ((buffer[7] & 0x7f) << 14);
-+ size |= ((buffer[6] & 0x7f) << 21);
-+
-+ return (size + 10);
-+}
-+
-+/****************************************************
-+ * function name : get_info
-+ *
-+ * description : read the frame information from the input buffer.
-+ *
-+ * arguments : input parameters
-+ *
-+ * values returned : update value for buffer
-+ ****************************************************/
-+WORD32 get_info(const char *inp_buffer,
-+ unsigned int avail_inp,
-+ WORD32 tag_size,
-+ id3_v2_frame_struct *dest)
-+{
-+ WORD32 j;
-+
-+ /* setting the tag to indicate the presence of frame */
-+ dest->tag_present = 1;
-+ /* If there isn't enough input available, we punt back to the top
-+ * level and ask for more.
-+ */
-+ if (avail_inp < umin(tag_size, dest->max_size))
-+ return -1;
-+
-+ if (dest->max_size >= tag_size) {
-+ for (j = 0; j < tag_size ; j++)
-+ dest->frame_data[j] = inp_buffer[j];
-+ } else {
-+ dest->exceeds_buffer_size = 1;
-+ for (j = 0; j < dest->max_size ; j++)
-+ dest->frame_data[j] = inp_buffer[j];
-+ }
-+ return tag_size;
-+}
---
-2.7.4
-
diff --git a/recipes-multimedia/tinycompress/tinycompress_1.1.6.bb b/recipes-multimedia/tinycompress/tinycompress_1.1.6.bb
deleted file mode 100644
index 110e181..0000000
--- a/recipes-multimedia/tinycompress/tinycompress_1.1.6.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-SUMMARY = "tinycompress library for compress audio offload in alsa"
-DESCRIPTION = "A library to handle compressed formats like MP3 etc"
-LICENSE = "BSD-3-Clause | LGPLv2.1"
-
-inherit autotools pkgconfig
-LIC_FILES_CHKSUM = "file://COPYING;md5=cf9105c1a2d4405cbe04bbe3367373a0"
-
-SRC_URI = "git://git.alsa-project.org/tinycompress.git;protocol=git;branch=master \
- file://0001-tinycompress-Add-id3-decoding.patch \
-"
-SRCREV = "995f2ed91045dad8c20485ab1a64727d22cd92e5"
-
-S = "${WORKDIR}/git"