summaryrefslogtreecommitdiff
path: root/src/libmusepack
diff options
context:
space:
mode:
Diffstat (limited to 'src/libmusepack')
-rw-r--r--src/libmusepack/Makefile.am27
-rw-r--r--src/libmusepack/diff_against_svn.patch55
-rw-r--r--src/libmusepack/huffsv46.c268
-rw-r--r--src/libmusepack/huffsv7.c500
-rw-r--r--src/libmusepack/idtag.c83
-rw-r--r--src/libmusepack/mpc_decoder.c1349
-rw-r--r--src/libmusepack/mpc_reader.c96
-rw-r--r--src/libmusepack/musepack/Makefile.am5
-rw-r--r--src/libmusepack/musepack/config_types.h23
-rw-r--r--src/libmusepack/musepack/decoder.h114
-rw-r--r--src/libmusepack/musepack/huffman.h41
-rw-r--r--src/libmusepack/musepack/internal.h34
-rw-r--r--src/libmusepack/musepack/math.h110
-rw-r--r--src/libmusepack/musepack/musepack.h94
-rw-r--r--src/libmusepack/musepack/reader.h46
-rw-r--r--src/libmusepack/musepack/requant.h17
-rw-r--r--src/libmusepack/musepack/streaminfo.h52
-rw-r--r--src/libmusepack/requant.c152
-rw-r--r--src/libmusepack/streaminfo.c280
-rw-r--r--src/libmusepack/synth_filter.c440
-rw-r--r--src/libmusepack/xine_musepack_decoder.c547
21 files changed, 0 insertions, 4333 deletions
diff --git a/src/libmusepack/Makefile.am b/src/libmusepack/Makefile.am
deleted file mode 100644
index 252e3d6ad..000000000
--- a/src/libmusepack/Makefile.am
+++ /dev/null
@@ -1,27 +0,0 @@
-include $(top_builddir)/misc/Makefile.plugins
-include $(top_srcdir)/misc/Makefile.common
-
-SUBDIRS = musepack
-
-EXTRA_DIST = diff_against_svn.patch
-
-if MUSEPACK
-xineplug_LTLIBRARIES = xineplug_decode_mpc.la
-endif
-
-if EXTERNAL_MPCDEC
-internal_sources =
-else
-internal_sources = huffsv46.c huffsv7.c idtag.c mpc_decoder.c \
- mpc_reader.c requant.c streaminfo.c synth_filter.c
-endif
-
-if EXTERNAL_MPCDEC
-xineplug_decode_mpc_la_LIBADD = $(XINE_LIB) $(LTLIBINTL) -lmpcdec
-else
-xineplug_decode_mpc_la_LIBADD = $(XINE_LIB) $(LTLIBINTL)
-endif
-
-xineplug_decode_mpc_la_SOURCES = $(internal_sources) xine_musepack_decoder.c
-xineplug_decode_mpc_la_CFLAGS = $(VISIBILITY_FLAG)
-xineplug_decode_mpc_la_LDFLAGS = $(xineplug_ldflags)
diff --git a/src/libmusepack/diff_against_svn.patch b/src/libmusepack/diff_against_svn.patch
deleted file mode 100644
index 1d44efb95..000000000
--- a/src/libmusepack/diff_against_svn.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-Use xine's inttypes.
-The file config_types.h is generated from config_types.h.in in musepack SVN.
-Check for previous swap32 definition before writing a new swap32 function.
-
-Index: src/libmusepack/musepack/config_types.h
-===================================================================
-RCS file: /home/valtri/CVS/xine-lib/src/libmusepack/musepack/config_types.h,v
-retrieving revision 1.1.1.2
-diff -u -p -u -p -r1.1.1.2 config_types.h
---- src/libmusepack/musepack/config_types.h 3 Feb 2005 00:19:24 -0000 1.1.1.2
-+++ src/libmusepack/musepack/config_types.h 3 Feb 2005 00:21:06 -0000
-@@ -1,7 +1,7 @@
- #ifndef __CONFIG_TYPES_H__
- #define __CONFIG_TYPES_H__
-
--#include <stdint.h>
-+#include "os_types.h"
-
- #ifdef WORDS_BIGENDIAN
- #undef MPC_LITTLE_ENDIAN
-Index: src/libmusepack/synth_filter.c
-===================================================================
-RCS file: /cvsroot/xine/xine-lib/src/libmusepack/synth_filter.c,v
-retrieving revision 1.1
-diff -u -r1.1 synth_filter.c
---- src/libmusepack/synth_filter.c 14 Jan 2005 15:24:25 -0000 1.1
-+++ src/libmusepack/synth_filter.c 7 Jan 2006 10:54:27 -0000
-@@ -39,8 +39,6 @@
- #include "musepack/musepack.h"
- #include "musepack/internal.h"
-
--typedef mpc_int32_t ptrdiff_t;
--
- /* C O N S T A N T S */
- #undef _
-
-diff -r d25b274e6e6a src/libmusepack/musepack/internal.h
---- a/src/libmusepack/musepack/internal.h Wed Apr 04 13:41:11 2007 +0200
-+++ b/src/libmusepack/musepack/internal.h Wed Apr 04 13:42:45 2007 +0200
-@@ -8,6 +8,7 @@ enum {
- MPC_DECODER_SYNTH_DELAY = 481
- };
-
-+#ifndef swap32
- /// Big/little endian 32 bit byte swapping routine.
- static inline
- mpc_uint32_t swap32(mpc_uint32_t val) {
-@@ -16,6 +17,7 @@ mpc_uint32_t swap32(mpc_uint32_t val) {
- (mpc_uint32_t)src[0] |
- ((mpc_uint32_t)src[1] << 8) | ((mpc_uint32_t)src[2] << 16) | ((mpc_uint32_t)src[3] << 24);
- }
-+#endif
-
- /// Searches for a ID3v2-tag and reads the length (in bytes) of it.
- /// \param reader supplying raw stream data
diff --git a/src/libmusepack/huffsv46.c b/src/libmusepack/huffsv46.c
deleted file mode 100644
index 6ade01b9d..000000000
--- a/src/libmusepack/huffsv46.c
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- Copyright (c) 2004, The Musepack Development Team
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are
- met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
-
- * Neither the name of the The Musepack Development Team nor the
- names of its contributors may be used to endorse or promote
- products derived from this software without specific prior
- written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/// \file huffsv46.c
-/// Implementations of huffman decoding for streamversions < 7.
-
-#include "musepack/musepack.h"
-#include "musepack/requant.h"
-#include "musepack/huffman.h"
-
-void
-mpc_decoder_init_huffman_sv6(mpc_decoder *d)
-{
- mpc_decoder_init_huffman_sv6_tables(d);
- mpc_decoder_resort_huff_tables(16, d->Region_A , 0);
- mpc_decoder_resort_huff_tables( 8, d->Region_B , 0);
- mpc_decoder_resort_huff_tables( 4, d->Region_C , 0);
- mpc_decoder_resort_huff_tables( 8, d->SCFI_Bundle , 0);
- mpc_decoder_resort_huff_tables(13, d->DSCF_Entropie , 6);
- mpc_decoder_resort_huff_tables( 3, d->Entropie_1 , Dc[1]);
- mpc_decoder_resort_huff_tables( 5, d->Entropie_2 , Dc[2]);
- mpc_decoder_resort_huff_tables( 7, d->Entropie_3 , Dc[3]);
- mpc_decoder_resort_huff_tables( 9, d->Entropie_4 , Dc[4]);
- mpc_decoder_resort_huff_tables(15, d->Entropie_5 , Dc[5]);
- mpc_decoder_resort_huff_tables(31, d->Entropie_6 , Dc[6]);
- mpc_decoder_resort_huff_tables(63, d->Entropie_7 , Dc[7]);
-}
-
-void
-mpc_decoder_init_huffman_sv6_tables(mpc_decoder *d)
-{
- // SCFI-bundle
- d->SCFI_Bundle[7].Code= 1; d->SCFI_Bundle[7].Length= 1;
- d->SCFI_Bundle[3].Code= 1; d->SCFI_Bundle[3].Length= 2;
- d->SCFI_Bundle[5].Code= 0; d->SCFI_Bundle[5].Length= 3;
- d->SCFI_Bundle[1].Code= 7; d->SCFI_Bundle[1].Length= 5;
- d->SCFI_Bundle[2].Code= 6; d->SCFI_Bundle[2].Length= 5;
- d->SCFI_Bundle[4].Code= 4; d->SCFI_Bundle[4].Length= 5;
- d->SCFI_Bundle[0].Code= 11; d->SCFI_Bundle[0].Length= 6;
- d->SCFI_Bundle[6].Code= 10; d->SCFI_Bundle[6].Length= 6;
-
- // region A (subbands 0..10)
- d->Region_A[ 1].Code= 1; d->Region_A[ 1].Length= 1;
- d->Region_A[ 2].Code= 0; d->Region_A[ 2].Length= 2;
- d->Region_A[ 0].Code= 2; d->Region_A[ 0].Length= 3;
- d->Region_A[ 3].Code= 15; d->Region_A[ 3].Length= 5;
- d->Region_A[ 5].Code= 13; d->Region_A[ 5].Length= 5;
- d->Region_A[ 6].Code= 12; d->Region_A[ 6].Length= 5;
- d->Region_A[ 4].Code= 29; d->Region_A[ 4].Length= 6;
- d->Region_A[ 7].Code= 57; d->Region_A[ 7].Length= 7;
- d->Region_A[ 8].Code= 113; d->Region_A[ 8].Length= 8;
- d->Region_A[ 9].Code= 225; d->Region_A[ 9].Length= 9;
- d->Region_A[10].Code= 449; d->Region_A[10].Length= 10;
- d->Region_A[11].Code= 897; d->Region_A[11].Length= 11;
- d->Region_A[12].Code= 1793; d->Region_A[12].Length= 12;
- d->Region_A[13].Code= 3585; d->Region_A[13].Length= 13;
- d->Region_A[14].Code= 7169; d->Region_A[14].Length= 14;
- d->Region_A[15].Code= 7168; d->Region_A[15].Length= 14;
-
- // region B (subbands 11..22)
- d->Region_B[1].Code= 1; d->Region_B[1].Length= 1;
- d->Region_B[0].Code= 1; d->Region_B[0].Length= 2;
- d->Region_B[2].Code= 1; d->Region_B[2].Length= 3;
- d->Region_B[3].Code= 1; d->Region_B[3].Length= 4;
- d->Region_B[4].Code= 1; d->Region_B[4].Length= 5;
- d->Region_B[5].Code= 1; d->Region_B[5].Length= 6;
- d->Region_B[6].Code= 1; d->Region_B[6].Length= 7;
- d->Region_B[7].Code= 0; d->Region_B[7].Length= 7;
-
- // region C (subbands 23..31)
- d->Region_C[0].Code= 1; d->Region_C[0].Length= 1;
- d->Region_C[1].Code= 1; d->Region_C[1].Length= 2;
- d->Region_C[2].Code= 1; d->Region_C[2].Length= 3;
- d->Region_C[3].Code= 0; d->Region_C[3].Length= 3;
-
- // DSCF
- d->DSCF_Entropie[ 6].Code= 0; d->DSCF_Entropie[ 6].Length= 2;
- d->DSCF_Entropie[ 7].Code= 7; d->DSCF_Entropie[ 7].Length= 3;
- d->DSCF_Entropie[ 5].Code= 4; d->DSCF_Entropie[ 5].Length= 3;
- d->DSCF_Entropie[ 8].Code= 3; d->DSCF_Entropie[ 8].Length= 3;
- d->DSCF_Entropie[ 9].Code= 13; d->DSCF_Entropie[ 9].Length= 4;
- d->DSCF_Entropie[ 4].Code= 11; d->DSCF_Entropie[ 4].Length= 4;
- d->DSCF_Entropie[10].Code= 10; d->DSCF_Entropie[10].Length= 4;
- d->DSCF_Entropie[ 2].Code= 4; d->DSCF_Entropie[ 2].Length= 4;
- d->DSCF_Entropie[11].Code= 25; d->DSCF_Entropie[11].Length= 5;
- d->DSCF_Entropie[ 3].Code= 24; d->DSCF_Entropie[ 3].Length= 5;
- d->DSCF_Entropie[ 1].Code= 11; d->DSCF_Entropie[ 1].Length= 5;
- d->DSCF_Entropie[12].Code= 21; d->DSCF_Entropie[12].Length= 6;
- d->DSCF_Entropie[ 0].Code= 20; d->DSCF_Entropie[ 0].Length= 6;
-
- // first quantizer
- d->Entropie_1[1].Code= 1; d->Entropie_1[1].Length= 1;
- d->Entropie_1[0].Code= 1; d->Entropie_1[0].Length= 2;
- d->Entropie_1[2].Code= 0; d->Entropie_1[2].Length= 2;
-
- // second quantizer
- d->Entropie_2[2].Code= 3; d->Entropie_2[2].Length= 2;
- d->Entropie_2[3].Code= 1; d->Entropie_2[3].Length= 2;
- d->Entropie_2[1].Code= 0; d->Entropie_2[1].Length= 2;
- d->Entropie_2[4].Code= 5; d->Entropie_2[4].Length= 3;
- d->Entropie_2[0].Code= 4; d->Entropie_2[0].Length= 3;
-
- // third quantizer
- d->Entropie_3[3].Code= 3; d->Entropie_3[3].Length= 2;
- d->Entropie_3[2].Code= 1; d->Entropie_3[2].Length= 2;
- d->Entropie_3[4].Code= 0; d->Entropie_3[4].Length= 2;
- d->Entropie_3[1].Code= 5; d->Entropie_3[1].Length= 3;
- d->Entropie_3[5].Code= 9; d->Entropie_3[5].Length= 4;
- d->Entropie_3[0].Code= 17; d->Entropie_3[0].Length= 5;
- d->Entropie_3[6].Code= 16; d->Entropie_3[6].Length= 5;
-
- // forth quantizer
- d->Entropie_4[4].Code= 0; d->Entropie_4[4].Length= 2;
- d->Entropie_4[5].Code= 6; d->Entropie_4[5].Length= 3;
- d->Entropie_4[3].Code= 5; d->Entropie_4[3].Length= 3;
- d->Entropie_4[6].Code= 4; d->Entropie_4[6].Length= 3;
- d->Entropie_4[2].Code= 3; d->Entropie_4[2].Length= 3;
- d->Entropie_4[7].Code= 15; d->Entropie_4[7].Length= 4;
- d->Entropie_4[1].Code= 14; d->Entropie_4[1].Length= 4;
- d->Entropie_4[0].Code= 5; d->Entropie_4[0].Length= 4;
- d->Entropie_4[8].Code= 4; d->Entropie_4[8].Length= 4;
-
- // fifth quantizer
- d->Entropie_5[7 ].Code= 4; d->Entropie_5[7 ].Length= 3;
- d->Entropie_5[8 ].Code= 3; d->Entropie_5[8 ].Length= 3;
- d->Entropie_5[6 ].Code= 2; d->Entropie_5[6 ].Length= 3;
- d->Entropie_5[9 ].Code= 0; d->Entropie_5[9 ].Length= 3;
- d->Entropie_5[5 ].Code= 15; d->Entropie_5[5 ].Length= 4;
- d->Entropie_5[4 ].Code= 13; d->Entropie_5[4 ].Length= 4;
- d->Entropie_5[10].Code= 12; d->Entropie_5[10].Length= 4;
- d->Entropie_5[11].Code= 10; d->Entropie_5[11].Length= 4;
- d->Entropie_5[3 ].Code= 3; d->Entropie_5[3 ].Length= 4;
- d->Entropie_5[12].Code= 2; d->Entropie_5[12].Length= 4;
- d->Entropie_5[2 ].Code= 29; d->Entropie_5[2 ].Length= 5;
- d->Entropie_5[1 ].Code= 23; d->Entropie_5[1 ].Length= 5;
- d->Entropie_5[13].Code= 22; d->Entropie_5[13].Length= 5;
- d->Entropie_5[0 ].Code= 57; d->Entropie_5[0 ].Length= 6;
- d->Entropie_5[14].Code= 56; d->Entropie_5[14].Length= 6;
-
- // sixth quantizer
- d->Entropie_6[15].Code= 9; d->Entropie_6[15].Length= 4;
- d->Entropie_6[16].Code= 8; d->Entropie_6[16].Length= 4;
- d->Entropie_6[14].Code= 7; d->Entropie_6[14].Length= 4;
- d->Entropie_6[18].Code= 6; d->Entropie_6[18].Length= 4;
- d->Entropie_6[17].Code= 5; d->Entropie_6[17].Length= 4;
- d->Entropie_6[12].Code= 3; d->Entropie_6[12].Length= 4;
- d->Entropie_6[13].Code= 2; d->Entropie_6[13].Length= 4;
- d->Entropie_6[19].Code= 0; d->Entropie_6[19].Length= 4;
- d->Entropie_6[11].Code= 31; d->Entropie_6[11].Length= 5;
- d->Entropie_6[20].Code= 30; d->Entropie_6[20].Length= 5;
- d->Entropie_6[10].Code= 29; d->Entropie_6[10].Length= 5;
- d->Entropie_6[9 ].Code= 27; d->Entropie_6[9 ].Length= 5;
- d->Entropie_6[21].Code= 26; d->Entropie_6[21].Length= 5;
- d->Entropie_6[22].Code= 25; d->Entropie_6[22].Length= 5;
- d->Entropie_6[8 ].Code= 24; d->Entropie_6[8 ].Length= 5;
- d->Entropie_6[7 ].Code= 23; d->Entropie_6[7 ].Length= 5;
- d->Entropie_6[23].Code= 21; d->Entropie_6[23].Length= 5;
- d->Entropie_6[6 ].Code= 9; d->Entropie_6[6 ].Length= 5;
- d->Entropie_6[24].Code= 3; d->Entropie_6[24].Length= 5;
- d->Entropie_6[25].Code= 57; d->Entropie_6[25].Length= 6;
- d->Entropie_6[5 ].Code= 56; d->Entropie_6[5 ].Length= 6;
- d->Entropie_6[4 ].Code= 45; d->Entropie_6[4 ].Length= 6;
- d->Entropie_6[26].Code= 41; d->Entropie_6[26].Length= 6;
- d->Entropie_6[2 ].Code= 40; d->Entropie_6[2 ].Length= 6;
- d->Entropie_6[27].Code= 17; d->Entropie_6[27].Length= 6;
- d->Entropie_6[28].Code= 16; d->Entropie_6[28].Length= 6;
- d->Entropie_6[3 ].Code= 5; d->Entropie_6[3 ].Length= 6;
- d->Entropie_6[29].Code= 89; d->Entropie_6[29].Length= 7;
- d->Entropie_6[1 ].Code= 88; d->Entropie_6[1 ].Length= 7;
- d->Entropie_6[30].Code= 9; d->Entropie_6[30].Length= 7;
- d->Entropie_6[0 ].Code= 8; d->Entropie_6[0 ].Length= 7;
-
- // seventh quantizer
- d->Entropie_7[25].Code= 0; d->Entropie_7[25].Length= 5;
- d->Entropie_7[37].Code= 1; d->Entropie_7[37].Length= 5;
- d->Entropie_7[62].Code= 16; d->Entropie_7[62].Length= 8;
- d->Entropie_7[ 0].Code= 17; d->Entropie_7[ 0].Length= 8;
- d->Entropie_7[ 3].Code= 9; d->Entropie_7[ 3].Length= 7;
- d->Entropie_7[ 5].Code= 10; d->Entropie_7[ 5].Length= 7;
- d->Entropie_7[ 6].Code= 11; d->Entropie_7[ 6].Length= 7;
- d->Entropie_7[38].Code= 3; d->Entropie_7[38].Length= 5;
- d->Entropie_7[35].Code= 4; d->Entropie_7[35].Length= 5;
- d->Entropie_7[33].Code= 5; d->Entropie_7[33].Length= 5;
- d->Entropie_7[24].Code= 6; d->Entropie_7[24].Length= 5;
- d->Entropie_7[27].Code= 7; d->Entropie_7[27].Length= 5;
- d->Entropie_7[26].Code= 8; d->Entropie_7[26].Length= 5;
- d->Entropie_7[12].Code= 18; d->Entropie_7[12].Length= 6;
- d->Entropie_7[50].Code= 19; d->Entropie_7[50].Length= 6;
- d->Entropie_7[29].Code= 10; d->Entropie_7[29].Length= 5;
- d->Entropie_7[31].Code= 11; d->Entropie_7[31].Length= 5;
- d->Entropie_7[36].Code= 12; d->Entropie_7[36].Length= 5;
- d->Entropie_7[34].Code= 13; d->Entropie_7[34].Length= 5;
- d->Entropie_7[28].Code= 14; d->Entropie_7[28].Length= 5;
- d->Entropie_7[49].Code= 30; d->Entropie_7[49].Length= 6;
- d->Entropie_7[56].Code= 62; d->Entropie_7[56].Length= 7;
- d->Entropie_7[ 7].Code= 63; d->Entropie_7[ 7].Length= 7;
- d->Entropie_7[32].Code= 16; d->Entropie_7[32].Length= 5;
- d->Entropie_7[30].Code= 17; d->Entropie_7[30].Length= 5;
- d->Entropie_7[13].Code= 36; d->Entropie_7[13].Length= 6;
- d->Entropie_7[55].Code= 74; d->Entropie_7[55].Length= 7;
- d->Entropie_7[61].Code= 150; d->Entropie_7[61].Length= 8;
- d->Entropie_7[ 1].Code= 151; d->Entropie_7[ 1].Length= 8;
- d->Entropie_7[14].Code= 38; d->Entropie_7[14].Length= 6;
- d->Entropie_7[48].Code= 39; d->Entropie_7[48].Length= 6;
- d->Entropie_7[ 4].Code= 80; d->Entropie_7[ 4].Length= 7;
- d->Entropie_7[58].Code= 81; d->Entropie_7[58].Length= 7;
- d->Entropie_7[47].Code= 41; d->Entropie_7[47].Length= 6;
- d->Entropie_7[15].Code= 42; d->Entropie_7[15].Length= 6;
- d->Entropie_7[16].Code= 43; d->Entropie_7[16].Length= 6;
- d->Entropie_7[54].Code= 88; d->Entropie_7[54].Length= 7;
- d->Entropie_7[ 8].Code= 89; d->Entropie_7[ 8].Length= 7;
- d->Entropie_7[17].Code= 45; d->Entropie_7[17].Length= 6;
- d->Entropie_7[46].Code= 46; d->Entropie_7[46].Length= 6;
- d->Entropie_7[45].Code= 47; d->Entropie_7[45].Length= 6;
- d->Entropie_7[53].Code= 96; d->Entropie_7[53].Length= 7;
- d->Entropie_7[ 9].Code= 97; d->Entropie_7[ 9].Length= 7;
- d->Entropie_7[43].Code= 49; d->Entropie_7[43].Length= 6;
- d->Entropie_7[19].Code= 50; d->Entropie_7[19].Length= 6;
- d->Entropie_7[18].Code= 51; d->Entropie_7[18].Length= 6;
- d->Entropie_7[44].Code= 52; d->Entropie_7[44].Length= 6;
- d->Entropie_7[ 2].Code= 212; d->Entropie_7[ 2].Length= 8;
- d->Entropie_7[60].Code= 213; d->Entropie_7[60].Length= 8;
- d->Entropie_7[10].Code= 107; d->Entropie_7[10].Length= 7;
- d->Entropie_7[42].Code= 54; d->Entropie_7[42].Length= 6;
- d->Entropie_7[41].Code= 55; d->Entropie_7[41].Length= 6;
- d->Entropie_7[20].Code= 56; d->Entropie_7[20].Length= 6;
- d->Entropie_7[21].Code= 57; d->Entropie_7[21].Length= 6;
- d->Entropie_7[52].Code= 116; d->Entropie_7[52].Length= 7;
- d->Entropie_7[51].Code= 117; d->Entropie_7[51].Length= 7;
- d->Entropie_7[40].Code= 59; d->Entropie_7[40].Length= 6;
- d->Entropie_7[22].Code= 60; d->Entropie_7[22].Length= 6;
- d->Entropie_7[23].Code= 61; d->Entropie_7[23].Length= 6;
- d->Entropie_7[39].Code= 62; d->Entropie_7[39].Length= 6;
- d->Entropie_7[11].Code= 126; d->Entropie_7[11].Length= 7;
- d->Entropie_7[57].Code= 254; d->Entropie_7[57].Length= 8;
- d->Entropie_7[59].Code= 255; d->Entropie_7[59].Length= 8;
-}
diff --git a/src/libmusepack/huffsv7.c b/src/libmusepack/huffsv7.c
deleted file mode 100644
index 80a8f2bff..000000000
--- a/src/libmusepack/huffsv7.c
+++ /dev/null
@@ -1,500 +0,0 @@
-/*
- Copyright (c) 2004, The Musepack Development Team
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are
- met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
-
- * Neither the name of the The Musepack Development Team nor the
- names of its contributors may be used to endorse or promote
- products derived from this software without specific prior
- written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/// \file huffsv7.c
-/// Implementations of sv7 huffman decoding functions.
-
-#include "musepack/musepack.h"
-#include "musepack/huffman.h"
-#include "musepack/requant.h"
-
-void
-mpc_decoder_init_huffman_sv7(mpc_decoder *d)
-{
- mpc_decoder_init_huffman_sv7_tables(d);
- mpc_decoder_resort_huff_tables(10, &(d->HuffHdr[0]) , 5);
- mpc_decoder_resort_huff_tables( 4, &(d->HuffSCFI[0]) , 0);
- mpc_decoder_resort_huff_tables(16, &(d->HuffDSCF[0]) , 7);
- mpc_decoder_resort_huff_tables(27, &(d->HuffQ1[0][0]) , 0);
- mpc_decoder_resort_huff_tables(27, &(d->HuffQ1[1][0]) , 0);
- mpc_decoder_resort_huff_tables(25, &(d->HuffQ2[0][0]) , 0);
- mpc_decoder_resort_huff_tables(25, &(d->HuffQ2[1][0]) , 0);
- mpc_decoder_resort_huff_tables( 7, &(d->HuffQ3[0][0]) , Dc[3]);
- mpc_decoder_resort_huff_tables( 7, &(d->HuffQ3[1][0]) , Dc[3]);
- mpc_decoder_resort_huff_tables( 9, &(d->HuffQ4[0][0]) , Dc[4]);
- mpc_decoder_resort_huff_tables( 9, &(d->HuffQ4[1][0]) , Dc[4]);
- mpc_decoder_resort_huff_tables(15, &(d->HuffQ5[0][0]) , Dc[5]);
- mpc_decoder_resort_huff_tables(15, &(d->HuffQ5[1][0]) , Dc[5]);
- mpc_decoder_resort_huff_tables(31, &(d->HuffQ6[0][0]) , Dc[6]);
- mpc_decoder_resort_huff_tables(31, &(d->HuffQ6[1][0]) , Dc[6]);
- mpc_decoder_resort_huff_tables(63, &(d->HuffQ7[0][0]) , Dc[7]);
- mpc_decoder_resort_huff_tables(63, &(d->HuffQ7[1][0]) , Dc[7]);
-}
-
-void
-mpc_decoder_init_huffman_sv7_tables(mpc_decoder *d)
-{
- /***************************** SCFI *******************************/
- d->HuffSCFI[0].Code = 2; d->HuffSCFI[0].Length = 3;
- d->HuffSCFI[1].Code = 1; d->HuffSCFI[1].Length = 1;
- d->HuffSCFI[2].Code = 3; d->HuffSCFI[2].Length = 3;
- d->HuffSCFI[3].Code = 0; d->HuffSCFI[3].Length = 2;
-
- /***************************** DSCF *******************************/
- d->HuffDSCF[ 0].Code = 32; d->HuffDSCF[ 0].Length = 6;
- d->HuffDSCF[ 1].Code = 4; d->HuffDSCF[ 1].Length = 5;
- d->HuffDSCF[ 2].Code = 17; d->HuffDSCF[ 2].Length = 5;
- d->HuffDSCF[ 3].Code = 30; d->HuffDSCF[ 3].Length = 5;
- d->HuffDSCF[ 4].Code = 13; d->HuffDSCF[ 4].Length = 4;
- d->HuffDSCF[ 5].Code = 0; d->HuffDSCF[ 5].Length = 3;
- d->HuffDSCF[ 6].Code = 3; d->HuffDSCF[ 6].Length = 3;
- d->HuffDSCF[ 7].Code = 9; d->HuffDSCF[ 7].Length = 4;
- d->HuffDSCF[ 8].Code = 5; d->HuffDSCF[ 8].Length = 3;
- d->HuffDSCF[ 9].Code = 2; d->HuffDSCF[ 9].Length = 3;
- d->HuffDSCF[10].Code = 14; d->HuffDSCF[10].Length = 4;
- d->HuffDSCF[11].Code = 3; d->HuffDSCF[11].Length = 4;
- d->HuffDSCF[12].Code = 31; d->HuffDSCF[12].Length = 5;
- d->HuffDSCF[13].Code = 5; d->HuffDSCF[13].Length = 5;
- d->HuffDSCF[14].Code = 33; d->HuffDSCF[14].Length = 6;
- d->HuffDSCF[15].Code = 12; d->HuffDSCF[15].Length = 4;
-
- /************************* frame-header ***************************/
- /***************** differential quantizer indizes *****************/
- d->HuffHdr[0].Code = 92; d->HuffHdr[0].Length = 8;
- d->HuffHdr[1].Code = 47; d->HuffHdr[1].Length = 7;
- d->HuffHdr[2].Code = 10; d->HuffHdr[2].Length = 5;
- d->HuffHdr[3].Code = 4; d->HuffHdr[3].Length = 4;
- d->HuffHdr[4].Code = 0; d->HuffHdr[4].Length = 2;
- d->HuffHdr[5].Code = 1; d->HuffHdr[5].Length = 1;
- d->HuffHdr[6].Code = 3; d->HuffHdr[6].Length = 3;
- d->HuffHdr[7].Code = 22; d->HuffHdr[7].Length = 6;
- d->HuffHdr[8].Code = 187; d->HuffHdr[8].Length = 9;
- d->HuffHdr[9].Code = 186; d->HuffHdr[9].Length = 9;
-
- /********************** 3-step quantizer **************************/
- /********************* 3 bundled samples **************************/
- //less shaped, book 0
- d->HuffQ1[0][ 0].Code = 54; d->HuffQ1[0][ 0].Length = 6;
- d->HuffQ1[0][ 1].Code = 9; d->HuffQ1[0][ 1].Length = 5;
- d->HuffQ1[0][ 2].Code = 32; d->HuffQ1[0][ 2].Length = 6;
- d->HuffQ1[0][ 3].Code = 5; d->HuffQ1[0][ 3].Length = 5;
- d->HuffQ1[0][ 4].Code = 10; d->HuffQ1[0][ 4].Length = 4;
- d->HuffQ1[0][ 5].Code = 7; d->HuffQ1[0][ 5].Length = 5;
- d->HuffQ1[0][ 6].Code = 52; d->HuffQ1[0][ 6].Length = 6;
- d->HuffQ1[0][ 7].Code = 0; d->HuffQ1[0][ 7].Length = 5;
- d->HuffQ1[0][ 8].Code = 35; d->HuffQ1[0][ 8].Length = 6;
- d->HuffQ1[0][ 9].Code = 10; d->HuffQ1[0][ 9].Length = 5;
- d->HuffQ1[0][10].Code = 6; d->HuffQ1[0][10].Length = 4;
- d->HuffQ1[0][11].Code = 4; d->HuffQ1[0][11].Length = 5;
- d->HuffQ1[0][12].Code = 11; d->HuffQ1[0][12].Length = 4;
- d->HuffQ1[0][13].Code = 7; d->HuffQ1[0][13].Length = 3;
- d->HuffQ1[0][14].Code = 12; d->HuffQ1[0][14].Length = 4;
- d->HuffQ1[0][15].Code = 3; d->HuffQ1[0][15].Length = 5;
- d->HuffQ1[0][16].Code = 7; d->HuffQ1[0][16].Length = 4;
- d->HuffQ1[0][17].Code = 11; d->HuffQ1[0][17].Length = 5;
- d->HuffQ1[0][18].Code = 34; d->HuffQ1[0][18].Length = 6;
- d->HuffQ1[0][19].Code = 1; d->HuffQ1[0][19].Length = 5;
- d->HuffQ1[0][20].Code = 53; d->HuffQ1[0][20].Length = 6;
- d->HuffQ1[0][21].Code = 6; d->HuffQ1[0][21].Length = 5;
- d->HuffQ1[0][22].Code = 9; d->HuffQ1[0][22].Length = 4;
- d->HuffQ1[0][23].Code = 2; d->HuffQ1[0][23].Length = 5;
- d->HuffQ1[0][24].Code = 33; d->HuffQ1[0][24].Length = 6;
- d->HuffQ1[0][25].Code = 8; d->HuffQ1[0][25].Length = 5;
- d->HuffQ1[0][26].Code = 55; d->HuffQ1[0][26].Length = 6;
-
- //more shaped, book 1
- d->HuffQ1[1][ 0].Code = 103; d->HuffQ1[1][ 0].Length = 8;
- d->HuffQ1[1][ 1].Code = 62; d->HuffQ1[1][ 1].Length = 7;
- d->HuffQ1[1][ 2].Code = 225; d->HuffQ1[1][ 2].Length = 9;
- d->HuffQ1[1][ 3].Code = 55; d->HuffQ1[1][ 3].Length = 7;
- d->HuffQ1[1][ 4].Code = 3; d->HuffQ1[1][ 4].Length = 4;
- d->HuffQ1[1][ 5].Code = 52; d->HuffQ1[1][ 5].Length = 7;
- d->HuffQ1[1][ 6].Code = 101; d->HuffQ1[1][ 6].Length = 8;
- d->HuffQ1[1][ 7].Code = 60; d->HuffQ1[1][ 7].Length = 7;
- d->HuffQ1[1][ 8].Code = 227; d->HuffQ1[1][ 8].Length = 9;
- d->HuffQ1[1][ 9].Code = 24; d->HuffQ1[1][ 9].Length = 6;
- d->HuffQ1[1][10].Code = 0; d->HuffQ1[1][10].Length = 4;
- d->HuffQ1[1][11].Code = 61; d->HuffQ1[1][11].Length = 7;
- d->HuffQ1[1][12].Code = 4; d->HuffQ1[1][12].Length = 4;
- d->HuffQ1[1][13].Code = 1; d->HuffQ1[1][13].Length = 1;
- d->HuffQ1[1][14].Code = 5; d->HuffQ1[1][14].Length = 4;
- d->HuffQ1[1][15].Code = 63; d->HuffQ1[1][15].Length = 7;
- d->HuffQ1[1][16].Code = 1; d->HuffQ1[1][16].Length = 4;
- d->HuffQ1[1][17].Code = 59; d->HuffQ1[1][17].Length = 7;
- d->HuffQ1[1][18].Code = 226; d->HuffQ1[1][18].Length = 9;
- d->HuffQ1[1][19].Code = 57; d->HuffQ1[1][19].Length = 7;
- d->HuffQ1[1][20].Code = 100; d->HuffQ1[1][20].Length = 8;
- d->HuffQ1[1][21].Code = 53; d->HuffQ1[1][21].Length = 7;
- d->HuffQ1[1][22].Code = 2; d->HuffQ1[1][22].Length = 4;
- d->HuffQ1[1][23].Code = 54; d->HuffQ1[1][23].Length = 7;
- d->HuffQ1[1][24].Code = 224; d->HuffQ1[1][24].Length = 9;
- d->HuffQ1[1][25].Code = 58; d->HuffQ1[1][25].Length = 7;
- d->HuffQ1[1][26].Code = 102; d->HuffQ1[1][26].Length = 8;
-
- /********************** 5-step quantizer **************************/
- /********************* 2 bundled samples **************************/
- //less shaped, book 0
- d->HuffQ2[0][ 0].Code = 89; d->HuffQ2[0][ 0].Length = 7;
- d->HuffQ2[0][ 1].Code = 47; d->HuffQ2[0][ 1].Length = 6;
- d->HuffQ2[0][ 2].Code = 15; d->HuffQ2[0][ 2].Length = 5;
- d->HuffQ2[0][ 3].Code = 0; d->HuffQ2[0][ 3].Length = 5;
- d->HuffQ2[0][ 4].Code = 91; d->HuffQ2[0][ 4].Length = 7;
- d->HuffQ2[0][ 5].Code = 4; d->HuffQ2[0][ 5].Length = 5;
- d->HuffQ2[0][ 6].Code = 6; d->HuffQ2[0][ 6].Length = 4;
- d->HuffQ2[0][ 7].Code = 13; d->HuffQ2[0][ 7].Length = 4;
- d->HuffQ2[0][ 8].Code = 4; d->HuffQ2[0][ 8].Length = 4;
- d->HuffQ2[0][ 9].Code = 5; d->HuffQ2[0][ 9].Length = 5;
- d->HuffQ2[0][10].Code = 20; d->HuffQ2[0][10].Length = 5;
- d->HuffQ2[0][11].Code = 12; d->HuffQ2[0][11].Length = 4;
- d->HuffQ2[0][12].Code = 4; d->HuffQ2[0][12].Length = 3;
- d->HuffQ2[0][13].Code = 15; d->HuffQ2[0][13].Length = 4;
- d->HuffQ2[0][14].Code = 14; d->HuffQ2[0][14].Length = 5;
- d->HuffQ2[0][15].Code = 3; d->HuffQ2[0][15].Length = 5;
- d->HuffQ2[0][16].Code = 3; d->HuffQ2[0][16].Length = 4;
- d->HuffQ2[0][17].Code = 14; d->HuffQ2[0][17].Length = 4;
- d->HuffQ2[0][18].Code = 5; d->HuffQ2[0][18].Length = 4;
- d->HuffQ2[0][19].Code = 1; d->HuffQ2[0][19].Length = 5;
- d->HuffQ2[0][20].Code = 90; d->HuffQ2[0][20].Length = 7;
- d->HuffQ2[0][21].Code = 2; d->HuffQ2[0][21].Length = 5;
- d->HuffQ2[0][22].Code = 21; d->HuffQ2[0][22].Length = 5;
- d->HuffQ2[0][23].Code = 46; d->HuffQ2[0][23].Length = 6;
- d->HuffQ2[0][24].Code = 88; d->HuffQ2[0][24].Length = 7;
-
- //more shaped, book 1
- d->HuffQ2[1][ 0].Code = 921; d->HuffQ2[1][ 0].Length = 10;
- d->HuffQ2[1][ 1].Code = 113; d->HuffQ2[1][ 1].Length = 7;
- d->HuffQ2[1][ 2].Code = 51; d->HuffQ2[1][ 2].Length = 6;
- d->HuffQ2[1][ 3].Code = 231; d->HuffQ2[1][ 3].Length = 8;
- d->HuffQ2[1][ 4].Code = 922; d->HuffQ2[1][ 4].Length = 10;
- d->HuffQ2[1][ 5].Code = 104; d->HuffQ2[1][ 5].Length = 7;
- d->HuffQ2[1][ 6].Code = 30; d->HuffQ2[1][ 6].Length = 5;
- d->HuffQ2[1][ 7].Code = 0; d->HuffQ2[1][ 7].Length = 3;
- d->HuffQ2[1][ 8].Code = 29; d->HuffQ2[1][ 8].Length = 5;
- d->HuffQ2[1][ 9].Code = 105; d->HuffQ2[1][ 9].Length = 7;
- d->HuffQ2[1][10].Code = 50; d->HuffQ2[1][10].Length = 6;
- d->HuffQ2[1][11].Code = 1; d->HuffQ2[1][11].Length = 3;
- d->HuffQ2[1][12].Code = 2; d->HuffQ2[1][12].Length = 2;
- d->HuffQ2[1][13].Code = 3; d->HuffQ2[1][13].Length = 3;
- d->HuffQ2[1][14].Code = 49; d->HuffQ2[1][14].Length = 6;
- d->HuffQ2[1][15].Code = 107; d->HuffQ2[1][15].Length = 7;
- d->HuffQ2[1][16].Code = 27; d->HuffQ2[1][16].Length = 5;
- d->HuffQ2[1][17].Code = 2; d->HuffQ2[1][17].Length = 3;
- d->HuffQ2[1][18].Code = 31; d->HuffQ2[1][18].Length = 5;
- d->HuffQ2[1][19].Code = 112; d->HuffQ2[1][19].Length = 7;
- d->HuffQ2[1][20].Code = 920; d->HuffQ2[1][20].Length = 10;
- d->HuffQ2[1][21].Code = 106; d->HuffQ2[1][21].Length = 7;
- d->HuffQ2[1][22].Code = 48; d->HuffQ2[1][22].Length = 6;
- d->HuffQ2[1][23].Code = 114; d->HuffQ2[1][23].Length = 7;
- d->HuffQ2[1][24].Code = 923; d->HuffQ2[1][24].Length = 10;
-
- /********************** 7-step quantizer **************************/
- /*********************** single samples ***************************/
- //less shaped, book 0
- d->HuffQ3[0][0].Code = 12; d->HuffQ3[0][0].Length = 4;
- d->HuffQ3[0][1].Code = 4; d->HuffQ3[0][1].Length = 3;
- d->HuffQ3[0][2].Code = 0; d->HuffQ3[0][2].Length = 2;
- d->HuffQ3[0][3].Code = 1; d->HuffQ3[0][3].Length = 2;
- d->HuffQ3[0][4].Code = 7; d->HuffQ3[0][4].Length = 3;
- d->HuffQ3[0][5].Code = 5; d->HuffQ3[0][5].Length = 3;
- d->HuffQ3[0][6].Code = 13; d->HuffQ3[0][6].Length = 4;
-
- //more shaped, book 1
- d->HuffQ3[1][0].Code = 4; d->HuffQ3[1][0].Length = 5;
- d->HuffQ3[1][1].Code = 3; d->HuffQ3[1][1].Length = 4;
- d->HuffQ3[1][2].Code = 2; d->HuffQ3[1][2].Length = 2;
- d->HuffQ3[1][3].Code = 3; d->HuffQ3[1][3].Length = 2;
- d->HuffQ3[1][4].Code = 1; d->HuffQ3[1][4].Length = 2;
- d->HuffQ3[1][5].Code = 0; d->HuffQ3[1][5].Length = 3;
- d->HuffQ3[1][6].Code = 5; d->HuffQ3[1][6].Length = 5;
-
- /********************** 9-step quantizer **************************/
- /*********************** single samples ***************************/
- //less shaped, book 0
- d->HuffQ4[0][0].Code = 5; d->HuffQ4[0][0].Length = 4;
- d->HuffQ4[0][1].Code = 0; d->HuffQ4[0][1].Length = 3;
- d->HuffQ4[0][2].Code = 4; d->HuffQ4[0][2].Length = 3;
- d->HuffQ4[0][3].Code = 6; d->HuffQ4[0][3].Length = 3;
- d->HuffQ4[0][4].Code = 7; d->HuffQ4[0][4].Length = 3;
- d->HuffQ4[0][5].Code = 5; d->HuffQ4[0][5].Length = 3;
- d->HuffQ4[0][6].Code = 3; d->HuffQ4[0][6].Length = 3;
- d->HuffQ4[0][7].Code = 1; d->HuffQ4[0][7].Length = 3;
- d->HuffQ4[0][8].Code = 4; d->HuffQ4[0][8].Length = 4;
-
- //more shaped, book 1
- d->HuffQ4[1][0].Code = 9; d->HuffQ4[1][0].Length = 5;
- d->HuffQ4[1][1].Code = 12; d->HuffQ4[1][1].Length = 4;
- d->HuffQ4[1][2].Code = 3; d->HuffQ4[1][2].Length = 3;
- d->HuffQ4[1][3].Code = 0; d->HuffQ4[1][3].Length = 2;
- d->HuffQ4[1][4].Code = 2; d->HuffQ4[1][4].Length = 2;
- d->HuffQ4[1][5].Code = 7; d->HuffQ4[1][5].Length = 3;
- d->HuffQ4[1][6].Code = 13; d->HuffQ4[1][6].Length = 4;
- d->HuffQ4[1][7].Code = 5; d->HuffQ4[1][7].Length = 4;
- d->HuffQ4[1][8].Code = 8; d->HuffQ4[1][8].Length = 5;
-
- /********************* 15-step quantizer **************************/
- /*********************** single samples ***************************/
- //less shaped, book 0
- d->HuffQ5[0][ 0].Code = 57; d->HuffQ5[0][ 0].Length = 6;
- d->HuffQ5[0][ 1].Code = 23; d->HuffQ5[0][ 1].Length = 5;
- d->HuffQ5[0][ 2].Code = 8; d->HuffQ5[0][ 2].Length = 4;
- d->HuffQ5[0][ 3].Code = 10; d->HuffQ5[0][ 3].Length = 4;
- d->HuffQ5[0][ 4].Code = 13; d->HuffQ5[0][ 4].Length = 4;
- d->HuffQ5[0][ 5].Code = 0; d->HuffQ5[0][ 5].Length = 3;
- d->HuffQ5[0][ 6].Code = 2; d->HuffQ5[0][ 6].Length = 3;
- d->HuffQ5[0][ 7].Code = 3; d->HuffQ5[0][ 7].Length = 3;
- d->HuffQ5[0][ 8].Code = 1; d->HuffQ5[0][ 8].Length = 3;
- d->HuffQ5[0][ 9].Code = 15; d->HuffQ5[0][ 9].Length = 4;
- d->HuffQ5[0][10].Code = 12; d->HuffQ5[0][10].Length = 4;
- d->HuffQ5[0][11].Code = 9; d->HuffQ5[0][11].Length = 4;
- d->HuffQ5[0][12].Code = 29; d->HuffQ5[0][12].Length = 5;
- d->HuffQ5[0][13].Code = 22; d->HuffQ5[0][13].Length = 5;
- d->HuffQ5[0][14].Code = 56; d->HuffQ5[0][14].Length = 6;
-
- //more shaped, book 1
- d->HuffQ5[1][ 0].Code = 229; d->HuffQ5[1][ 0].Length = 8;
- d->HuffQ5[1][ 1].Code = 56; d->HuffQ5[1][ 1].Length = 6;
- d->HuffQ5[1][ 2].Code = 7; d->HuffQ5[1][ 2].Length = 5;
- d->HuffQ5[1][ 3].Code = 2; d->HuffQ5[1][ 3].Length = 4;
- d->HuffQ5[1][ 4].Code = 0; d->HuffQ5[1][ 4].Length = 3;
- d->HuffQ5[1][ 5].Code = 3; d->HuffQ5[1][ 5].Length = 3;
- d->HuffQ5[1][ 6].Code = 5; d->HuffQ5[1][ 6].Length = 3;
- d->HuffQ5[1][ 7].Code = 6; d->HuffQ5[1][ 7].Length = 3;
- d->HuffQ5[1][ 8].Code = 4; d->HuffQ5[1][ 8].Length = 3;
- d->HuffQ5[1][ 9].Code = 2; d->HuffQ5[1][ 9].Length = 3;
- d->HuffQ5[1][10].Code = 15; d->HuffQ5[1][10].Length = 4;
- d->HuffQ5[1][11].Code = 29; d->HuffQ5[1][11].Length = 5;
- d->HuffQ5[1][12].Code = 6; d->HuffQ5[1][12].Length = 5;
- d->HuffQ5[1][13].Code = 115; d->HuffQ5[1][13].Length = 7;
- d->HuffQ5[1][14].Code = 228; d->HuffQ5[1][14].Length = 8;
-
- /********************* 31-step quantizer **************************/
- /*********************** single samples ***************************/
- //less shaped, book 0
- d->HuffQ6[0][ 0].Code = 65; d->HuffQ6[0][ 0].Length = 7;
- d->HuffQ6[0][ 1].Code = 6; d->HuffQ6[0][ 1].Length = 6;
- d->HuffQ6[0][ 2].Code = 44; d->HuffQ6[0][ 2].Length = 6;
- d->HuffQ6[0][ 3].Code = 45; d->HuffQ6[0][ 3].Length = 6;
- d->HuffQ6[0][ 4].Code = 59; d->HuffQ6[0][ 4].Length = 6;
- d->HuffQ6[0][ 5].Code = 13; d->HuffQ6[0][ 5].Length = 5;
- d->HuffQ6[0][ 6].Code = 17; d->HuffQ6[0][ 6].Length = 5;
- d->HuffQ6[0][ 7].Code = 19; d->HuffQ6[0][ 7].Length = 5;
- d->HuffQ6[0][ 8].Code = 23; d->HuffQ6[0][ 8].Length = 5;
- d->HuffQ6[0][ 9].Code = 21; d->HuffQ6[0][ 9].Length = 5;
- d->HuffQ6[0][10].Code = 26; d->HuffQ6[0][10].Length = 5;
- d->HuffQ6[0][11].Code = 30; d->HuffQ6[0][11].Length = 5;
- d->HuffQ6[0][12].Code = 0; d->HuffQ6[0][12].Length = 4;
- d->HuffQ6[0][13].Code = 2; d->HuffQ6[0][13].Length = 4;
- d->HuffQ6[0][14].Code = 5; d->HuffQ6[0][14].Length = 4;
- d->HuffQ6[0][15].Code = 7; d->HuffQ6[0][15].Length = 4;
- d->HuffQ6[0][16].Code = 3; d->HuffQ6[0][16].Length = 4;
- d->HuffQ6[0][17].Code = 4; d->HuffQ6[0][17].Length = 4;
- d->HuffQ6[0][18].Code = 31; d->HuffQ6[0][18].Length = 5;
- d->HuffQ6[0][19].Code = 28; d->HuffQ6[0][19].Length = 5;
- d->HuffQ6[0][20].Code = 25; d->HuffQ6[0][20].Length = 5;
- d->HuffQ6[0][21].Code = 27; d->HuffQ6[0][21].Length = 5;
- d->HuffQ6[0][22].Code = 24; d->HuffQ6[0][22].Length = 5;
- d->HuffQ6[0][23].Code = 20; d->HuffQ6[0][23].Length = 5;
- d->HuffQ6[0][24].Code = 18; d->HuffQ6[0][24].Length = 5;
- d->HuffQ6[0][25].Code = 12; d->HuffQ6[0][25].Length = 5;
- d->HuffQ6[0][26].Code = 2; d->HuffQ6[0][26].Length = 5;
- d->HuffQ6[0][27].Code = 58; d->HuffQ6[0][27].Length = 6;
- d->HuffQ6[0][28].Code = 33; d->HuffQ6[0][28].Length = 6;
- d->HuffQ6[0][29].Code = 7; d->HuffQ6[0][29].Length = 6;
- d->HuffQ6[0][30].Code = 64; d->HuffQ6[0][30].Length = 7;
-
- //more shaped, book 1
- d->HuffQ6[1][ 0].Code = 6472; d->HuffQ6[1][ 0].Length = 13;
- d->HuffQ6[1][ 1].Code = 6474; d->HuffQ6[1][ 1].Length = 13;
- d->HuffQ6[1][ 2].Code = 808; d->HuffQ6[1][ 2].Length = 10;
- d->HuffQ6[1][ 3].Code = 405; d->HuffQ6[1][ 3].Length = 9;
- d->HuffQ6[1][ 4].Code = 203; d->HuffQ6[1][ 4].Length = 8;
- d->HuffQ6[1][ 5].Code = 102; d->HuffQ6[1][ 5].Length = 7;
- d->HuffQ6[1][ 6].Code = 49; d->HuffQ6[1][ 6].Length = 6;
- d->HuffQ6[1][ 7].Code = 9; d->HuffQ6[1][ 7].Length = 5;
- d->HuffQ6[1][ 8].Code = 15; d->HuffQ6[1][ 8].Length = 5;
- d->HuffQ6[1][ 9].Code = 31; d->HuffQ6[1][ 9].Length = 5;
- d->HuffQ6[1][10].Code = 2; d->HuffQ6[1][10].Length = 4;
- d->HuffQ6[1][11].Code = 6; d->HuffQ6[1][11].Length = 4;
- d->HuffQ6[1][12].Code = 8; d->HuffQ6[1][12].Length = 4;
- d->HuffQ6[1][13].Code = 11; d->HuffQ6[1][13].Length = 4;
- d->HuffQ6[1][14].Code = 13; d->HuffQ6[1][14].Length = 4;
- d->HuffQ6[1][15].Code = 0; d->HuffQ6[1][15].Length = 3;
- d->HuffQ6[1][16].Code = 14; d->HuffQ6[1][16].Length = 4;
- d->HuffQ6[1][17].Code = 10; d->HuffQ6[1][17].Length = 4;
- d->HuffQ6[1][18].Code = 9; d->HuffQ6[1][18].Length = 4;
- d->HuffQ6[1][19].Code = 5; d->HuffQ6[1][19].Length = 4;
- d->HuffQ6[1][20].Code = 3; d->HuffQ6[1][20].Length = 4;
- d->HuffQ6[1][21].Code = 30; d->HuffQ6[1][21].Length = 5;
- d->HuffQ6[1][22].Code = 14; d->HuffQ6[1][22].Length = 5;
- d->HuffQ6[1][23].Code = 8; d->HuffQ6[1][23].Length = 5;
- d->HuffQ6[1][24].Code = 48; d->HuffQ6[1][24].Length = 6;
- d->HuffQ6[1][25].Code = 103; d->HuffQ6[1][25].Length = 7;
- d->HuffQ6[1][26].Code = 201; d->HuffQ6[1][26].Length = 8;
- d->HuffQ6[1][27].Code = 200; d->HuffQ6[1][27].Length = 8;
- d->HuffQ6[1][28].Code = 1619; d->HuffQ6[1][28].Length = 11;
- d->HuffQ6[1][29].Code = 6473; d->HuffQ6[1][29].Length = 13;
- d->HuffQ6[1][30].Code = 6475; d->HuffQ6[1][30].Length = 13;
-
- /********************* 63-step quantizer **************************/
- /*********************** single samples ***************************/
- //less shaped, book 0
- d->HuffQ7[0][ 0].Code = 103; d->HuffQ7[0][ 0].Length = 8; /* 0.003338 - 01100111 */
- d->HuffQ7[0][ 1].Code = 153; d->HuffQ7[0][ 1].Length = 8; /* 0.003766 - 10011001 */
- d->HuffQ7[0][ 2].Code = 181; d->HuffQ7[0][ 2].Length = 8; /* 0.004715 - 10110101 */
- d->HuffQ7[0][ 3].Code = 233; d->HuffQ7[0][ 3].Length = 8; /* 0.005528 - 11101001 */
- d->HuffQ7[0][ 4].Code = 64; d->HuffQ7[0][ 4].Length = 7; /* 0.006677 - 1000000 */
- d->HuffQ7[0][ 5].Code = 65; d->HuffQ7[0][ 5].Length = 7; /* 0.007041 - 1000001 */
- d->HuffQ7[0][ 6].Code = 77; d->HuffQ7[0][ 6].Length = 7; /* 0.007733 - 1001101 */
- d->HuffQ7[0][ 7].Code = 81; d->HuffQ7[0][ 7].Length = 7; /* 0.008296 - 1010001 */
- d->HuffQ7[0][ 8].Code = 91; d->HuffQ7[0][ 8].Length = 7; /* 0.009295 - 1011011 */
- d->HuffQ7[0][ 9].Code = 113; d->HuffQ7[0][ 9].Length = 7; /* 0.010814 - 1110001 */
- d->HuffQ7[0][10].Code = 112; d->HuffQ7[0][10].Length = 7; /* 0.010807 - 1110000 */
- d->HuffQ7[0][11].Code = 24; d->HuffQ7[0][11].Length = 6; /* 0.012748 - 011000 */
- d->HuffQ7[0][12].Code = 29; d->HuffQ7[0][12].Length = 6; /* 0.013390 - 011101 */
- d->HuffQ7[0][13].Code = 35; d->HuffQ7[0][13].Length = 6; /* 0.014224 - 100011 */
- d->HuffQ7[0][14].Code = 37; d->HuffQ7[0][14].Length = 6; /* 0.015201 - 100101 */
- d->HuffQ7[0][15].Code = 41; d->HuffQ7[0][15].Length = 6; /* 0.016642 - 101001 */
- d->HuffQ7[0][16].Code = 44; d->HuffQ7[0][16].Length = 6; /* 0.017292 - 101100 */
- d->HuffQ7[0][17].Code = 46; d->HuffQ7[0][17].Length = 6; /* 0.018647 - 101110 */
- d->HuffQ7[0][18].Code = 51; d->HuffQ7[0][18].Length = 6; /* 0.020473 - 110011 */
- d->HuffQ7[0][19].Code = 49; d->HuffQ7[0][19].Length = 6; /* 0.020152 - 110001 */
- d->HuffQ7[0][20].Code = 54; d->HuffQ7[0][20].Length = 6; /* 0.021315 - 110110 */
- d->HuffQ7[0][21].Code = 55; d->HuffQ7[0][21].Length = 6; /* 0.021358 - 110111 */
- d->HuffQ7[0][22].Code = 57; d->HuffQ7[0][22].Length = 6; /* 0.021700 - 111001 */
- d->HuffQ7[0][23].Code = 60; d->HuffQ7[0][23].Length = 6; /* 0.022449 - 111100 */
- d->HuffQ7[0][24].Code = 0; d->HuffQ7[0][24].Length = 5; /* 0.023063 - 00000 */
- d->HuffQ7[0][25].Code = 2; d->HuffQ7[0][25].Length = 5; /* 0.023854 - 00010 */
- d->HuffQ7[0][26].Code = 10; d->HuffQ7[0][26].Length = 5; /* 0.025481 - 01010 */
- d->HuffQ7[0][27].Code = 5; d->HuffQ7[0][27].Length = 5; /* 0.024867 - 00101 */
- d->HuffQ7[0][28].Code = 9; d->HuffQ7[0][28].Length = 5; /* 0.025352 - 01001 */
- d->HuffQ7[0][29].Code = 6; d->HuffQ7[0][29].Length = 5; /* 0.025074 - 00110 */
- d->HuffQ7[0][30].Code = 13; d->HuffQ7[0][30].Length = 5; /* 0.025745 - 01101 */
- d->HuffQ7[0][31].Code = 7; d->HuffQ7[0][31].Length = 5; /* 0.025195 - 00111 */
- d->HuffQ7[0][32].Code = 11; d->HuffQ7[0][32].Length = 5; /* 0.025502 - 01011 */
- d->HuffQ7[0][33].Code = 15; d->HuffQ7[0][33].Length = 5; /* 0.026251 - 01111 */
- d->HuffQ7[0][34].Code = 8; d->HuffQ7[0][34].Length = 5; /* 0.025260 - 01000 */
- d->HuffQ7[0][35].Code = 4; d->HuffQ7[0][35].Length = 5; /* 0.024418 - 00100 */
- d->HuffQ7[0][36].Code = 3; d->HuffQ7[0][36].Length = 5; /* 0.023983 - 00011 */
- d->HuffQ7[0][37].Code = 1; d->HuffQ7[0][37].Length = 5; /* 0.023697 - 00001 */
- d->HuffQ7[0][38].Code = 63; d->HuffQ7[0][38].Length = 6; /* 0.023041 - 111111 */
- d->HuffQ7[0][39].Code = 62; d->HuffQ7[0][39].Length = 6; /* 0.022656 - 111110 */
- d->HuffQ7[0][40].Code = 61; d->HuffQ7[0][40].Length = 6; /* 0.022549 - 111101 */
- d->HuffQ7[0][41].Code = 53; d->HuffQ7[0][41].Length = 6; /* 0.021151 - 110101 */
- d->HuffQ7[0][42].Code = 59; d->HuffQ7[0][42].Length = 6; /* 0.022042 - 111011 */
- d->HuffQ7[0][43].Code = 52; d->HuffQ7[0][43].Length = 6; /* 0.020837 - 110100 */
- d->HuffQ7[0][44].Code = 48; d->HuffQ7[0][44].Length = 6; /* 0.019446 - 110000 */
- d->HuffQ7[0][45].Code = 47; d->HuffQ7[0][45].Length = 6; /* 0.019189 - 101111 */
- d->HuffQ7[0][46].Code = 43; d->HuffQ7[0][46].Length = 6; /* 0.017177 - 101011 */
- d->HuffQ7[0][47].Code = 42; d->HuffQ7[0][47].Length = 6; /* 0.017035 - 101010 */
- d->HuffQ7[0][48].Code = 39; d->HuffQ7[0][48].Length = 6; /* 0.015287 - 100111 */
- d->HuffQ7[0][49].Code = 36; d->HuffQ7[0][49].Length = 6; /* 0.014559 - 100100 */
- d->HuffQ7[0][50].Code = 33; d->HuffQ7[0][50].Length = 6; /* 0.014117 - 100001 */
- d->HuffQ7[0][51].Code = 28; d->HuffQ7[0][51].Length = 6; /* 0.012776 - 011100 */
- d->HuffQ7[0][52].Code = 117; d->HuffQ7[0][52].Length = 7; /* 0.011107 - 1110101 */
- d->HuffQ7[0][53].Code = 101; d->HuffQ7[0][53].Length = 7; /* 0.010636 - 1100101 */
- d->HuffQ7[0][54].Code = 100; d->HuffQ7[0][54].Length = 7; /* 0.009751 - 1100100 */
- d->HuffQ7[0][55].Code = 80; d->HuffQ7[0][55].Length = 7; /* 0.008132 - 1010000 */
- d->HuffQ7[0][56].Code = 69; d->HuffQ7[0][56].Length = 7; /* 0.007091 - 1000101 */
- d->HuffQ7[0][57].Code = 68; d->HuffQ7[0][57].Length = 7; /* 0.007084 - 1000100 */
- d->HuffQ7[0][58].Code = 50; d->HuffQ7[0][58].Length = 7; /* 0.006277 - 0110010 */
- d->HuffQ7[0][59].Code = 232; d->HuffQ7[0][59].Length = 8; /* 0.005386 - 11101000 */
- d->HuffQ7[0][60].Code = 180; d->HuffQ7[0][60].Length = 8; /* 0.004408 - 10110100 */
- d->HuffQ7[0][61].Code = 152; d->HuffQ7[0][61].Length = 8; /* 0.003759 - 10011000 */
- d->HuffQ7[0][62].Code = 102; d->HuffQ7[0][62].Length = 8; /* 0.003160 - 01100110 */
-
- //more shaped, book 1
- d->HuffQ7[1][ 0].Code = 14244; d->HuffQ7[1][ 0].Length = 14; /* 0.000059 - 11011110100100 */
- d->HuffQ7[1][ 1].Code = 14253; d->HuffQ7[1][ 1].Length = 14; /* 0.000098 - 11011110101101 */
- d->HuffQ7[1][ 2].Code = 14246; d->HuffQ7[1][ 2].Length = 14; /* 0.000078 - 11011110100110 */
- d->HuffQ7[1][ 3].Code = 14254; d->HuffQ7[1][ 3].Length = 14; /* 0.000111 - 11011110101110 */
- d->HuffQ7[1][ 4].Code = 3562; d->HuffQ7[1][ 4].Length = 12; /* 0.000320 - 110111101010 */
- d->HuffQ7[1][ 5].Code = 752; d->HuffQ7[1][ 5].Length = 10; /* 0.000920 - 1011110000 */
- d->HuffQ7[1][ 6].Code = 753; d->HuffQ7[1][ 6].Length = 10; /* 0.001057 - 1011110001 */
- d->HuffQ7[1][ 7].Code = 160; d->HuffQ7[1][ 7].Length = 9; /* 0.001403 - 010100000 */
- d->HuffQ7[1][ 8].Code = 162; d->HuffQ7[1][ 8].Length = 9; /* 0.001579 - 010100010 */
- d->HuffQ7[1][ 9].Code = 444; d->HuffQ7[1][ 9].Length = 9; /* 0.002486 - 110111100 */
- d->HuffQ7[1][10].Code = 122; d->HuffQ7[1][10].Length = 8; /* 0.003772 - 01111010 */
- d->HuffQ7[1][11].Code = 223; d->HuffQ7[1][11].Length = 8; /* 0.005710 - 11011111 */
- d->HuffQ7[1][12].Code = 60; d->HuffQ7[1][12].Length = 7; /* 0.006858 - 0111100 */
- d->HuffQ7[1][13].Code = 73; d->HuffQ7[1][13].Length = 7; /* 0.008033 - 1001001 */
- d->HuffQ7[1][14].Code = 110; d->HuffQ7[1][14].Length = 7; /* 0.009827 - 1101110 */
- d->HuffQ7[1][15].Code = 14; d->HuffQ7[1][15].Length = 6; /* 0.012601 - 001110 */
- d->HuffQ7[1][16].Code = 24; d->HuffQ7[1][16].Length = 6; /* 0.013194 - 011000 */
- d->HuffQ7[1][17].Code = 25; d->HuffQ7[1][17].Length = 6; /* 0.013938 - 011001 */
- d->HuffQ7[1][18].Code = 34; d->HuffQ7[1][18].Length = 6; /* 0.015693 - 100010 */
- d->HuffQ7[1][19].Code = 37; d->HuffQ7[1][19].Length = 6; /* 0.017846 - 100101 */
- d->HuffQ7[1][20].Code = 54; d->HuffQ7[1][20].Length = 6; /* 0.020078 - 110110 */
- d->HuffQ7[1][21].Code = 3; d->HuffQ7[1][21].Length = 5; /* 0.022975 - 00011 */
- d->HuffQ7[1][22].Code = 9; d->HuffQ7[1][22].Length = 5; /* 0.025631 - 01001 */
- d->HuffQ7[1][23].Code = 11; d->HuffQ7[1][23].Length = 5; /* 0.027021 - 01011 */
- d->HuffQ7[1][24].Code = 16; d->HuffQ7[1][24].Length = 5; /* 0.031465 - 10000 */
- d->HuffQ7[1][25].Code = 19; d->HuffQ7[1][25].Length = 5; /* 0.034244 - 10011 */
- d->HuffQ7[1][26].Code = 21; d->HuffQ7[1][26].Length = 5; /* 0.035921 - 10101 */
- d->HuffQ7[1][27].Code = 24; d->HuffQ7[1][27].Length = 5; /* 0.037938 - 11000 */
- d->HuffQ7[1][28].Code = 26; d->HuffQ7[1][28].Length = 5; /* 0.039595 - 11010 */
- d->HuffQ7[1][29].Code = 29; d->HuffQ7[1][29].Length = 5; /* 0.041546 - 11101 */
- d->HuffQ7[1][30].Code = 31; d->HuffQ7[1][30].Length = 5; /* 0.042623 - 11111 */
- d->HuffQ7[1][31].Code = 2; d->HuffQ7[1][31].Length = 4; /* 0.045180 - 0010 */
- d->HuffQ7[1][32].Code = 0; d->HuffQ7[1][32].Length = 4; /* 0.043151 - 0000 */
- d->HuffQ7[1][33].Code = 30; d->HuffQ7[1][33].Length = 5; /* 0.042538 - 11110 */
- d->HuffQ7[1][34].Code = 28; d->HuffQ7[1][34].Length = 5; /* 0.041422 - 11100 */
- d->HuffQ7[1][35].Code = 25; d->HuffQ7[1][35].Length = 5; /* 0.039145 - 11001 */
- d->HuffQ7[1][36].Code = 22; d->HuffQ7[1][36].Length = 5; /* 0.036691 - 10110 */
- d->HuffQ7[1][37].Code = 20; d->HuffQ7[1][37].Length = 5; /* 0.034955 - 10100 */
- d->HuffQ7[1][38].Code = 14; d->HuffQ7[1][38].Length = 5; /* 0.029155 - 01110 */
- d->HuffQ7[1][39].Code = 13; d->HuffQ7[1][39].Length = 5; /* 0.027921 - 01101 */
- d->HuffQ7[1][40].Code = 8; d->HuffQ7[1][40].Length = 5; /* 0.025553 - 01000 */
- d->HuffQ7[1][41].Code = 6; d->HuffQ7[1][41].Length = 5; /* 0.023093 - 00110 */
- d->HuffQ7[1][42].Code = 2; d->HuffQ7[1][42].Length = 5; /* 0.021200 - 00010 */
- d->HuffQ7[1][43].Code = 46; d->HuffQ7[1][43].Length = 6; /* 0.018134 - 101110 */
- d->HuffQ7[1][44].Code = 35; d->HuffQ7[1][44].Length = 6; /* 0.015824 - 100011 */
- d->HuffQ7[1][45].Code = 31; d->HuffQ7[1][45].Length = 6; /* 0.014701 - 011111 */
- d->HuffQ7[1][46].Code = 21; d->HuffQ7[1][46].Length = 6; /* 0.013187 - 010101 */
- d->HuffQ7[1][47].Code = 15; d->HuffQ7[1][47].Length = 6; /* 0.012776 - 001111 */
- d->HuffQ7[1][48].Code = 95; d->HuffQ7[1][48].Length = 7; /* 0.009664 - 1011111 */
- d->HuffQ7[1][49].Code = 72; d->HuffQ7[1][49].Length = 7; /* 0.007922 - 1001000 */
- d->HuffQ7[1][50].Code = 41; d->HuffQ7[1][50].Length = 7; /* 0.006838 - 0101001 */
- d->HuffQ7[1][51].Code = 189; d->HuffQ7[1][51].Length = 8; /* 0.005024 - 10111101 */
- d->HuffQ7[1][52].Code = 123; d->HuffQ7[1][52].Length = 8; /* 0.003830 - 01111011 */
- d->HuffQ7[1][53].Code = 377; d->HuffQ7[1][53].Length = 9; /* 0.002232 - 101111001 */
- d->HuffQ7[1][54].Code = 161; d->HuffQ7[1][54].Length = 9; /* 0.001566 - 010100001 */
- d->HuffQ7[1][55].Code = 891; d->HuffQ7[1][55].Length = 10; /* 0.001383 - 1101111011 */
- d->HuffQ7[1][56].Code = 327; d->HuffQ7[1][56].Length = 10; /* 0.000900 - 0101000111 */
- d->HuffQ7[1][57].Code = 326; d->HuffQ7[1][57].Length = 10; /* 0.000790 - 0101000110 */
- d->HuffQ7[1][58].Code = 3560; d->HuffQ7[1][58].Length = 12; /* 0.000254 - 110111101000 */
- d->HuffQ7[1][59].Code = 14255; d->HuffQ7[1][59].Length = 14; /* 0.000117 - 11011110101111 */
- d->HuffQ7[1][60].Code = 14247; d->HuffQ7[1][60].Length = 14; /* 0.000085 - 11011110100111 */
- d->HuffQ7[1][61].Code = 14252; d->HuffQ7[1][61].Length = 14; /* 0.000085 - 11011110101100 */
- d->HuffQ7[1][62].Code = 14245; d->HuffQ7[1][62].Length = 14; /* 0.000065 - 11011110100101 */
-}
diff --git a/src/libmusepack/idtag.c b/src/libmusepack/idtag.c
deleted file mode 100644
index 4b02b33f4..000000000
--- a/src/libmusepack/idtag.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- Copyright (c) 2004, The Musepack Development Team
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are
- met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
-
- * Neither the name of the The Musepack Development Team nor the
- names of its contributors may be used to endorse or promote
- products derived from this software without specific prior
- written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/// \file idtag.c
-/// Rudimentary id3tag handling routines, just enough to skip id3v2 tags,
-/// if present.
-
-#include "musepack/musepack.h"
-#include "musepack/internal.h"
-
-mpc_int32_t
-JumpID3v2 (mpc_reader* r) {
- unsigned char tmp [10];
- mpc_uint32_t Unsynchronisation; // ID3v2.4-flag
- mpc_uint32_t ExtHeaderPresent; // ID3v2.4-flag
- mpc_uint32_t ExperimentalFlag; // ID3v2.4-flag
- mpc_uint32_t FooterPresent; // ID3v2.4-flag
- mpc_int32_t ret;
-
- // seek to first byte of mpc data
- if (!r->seek (r->data, 0)) {
- return 0;
- }
-
- r->read(r->data, tmp, sizeof(tmp));
-
- // check id3-tag
- if ( 0 != memcmp ( tmp, "ID3", 3) )
- return 0;
-
- // read flags
- Unsynchronisation = tmp[5] & 0x80;
- ExtHeaderPresent = tmp[5] & 0x40;
- ExperimentalFlag = tmp[5] & 0x20;
- FooterPresent = tmp[5] & 0x10;
-
- if ( tmp[5] & 0x0F )
- return -1; // not (yet???) allowed
- if ( (tmp[6] | tmp[7] | tmp[8] | tmp[9]) & 0x80 )
- return -1; // not allowed
-
- // read HeaderSize (syncsave: 4 * $0xxxxxxx = 28 significant bits)
- ret = tmp[6] << 21;
- ret += tmp[7] << 14;
- ret += tmp[8] << 7;
- ret += tmp[9] ;
- ret += 10;
- if ( FooterPresent )
- ret += 10;
-
- return ret;
-}
diff --git a/src/libmusepack/mpc_decoder.c b/src/libmusepack/mpc_decoder.c
deleted file mode 100644
index d65708c52..000000000
--- a/src/libmusepack/mpc_decoder.c
+++ /dev/null
@@ -1,1349 +0,0 @@
-/*
- Copyright (c) 2004, The Musepack Development Team
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are
- met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
-
- * Neither the name of the The Musepack Development Team nor the
- names of its contributors may be used to endorse or promote
- products derived from this software without specific prior
- written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/// \file mpc_decoder.c
-/// Core decoding routines and logic.
-
-#include "musepack/musepack.h"
-#include "musepack/internal.h"
-#include "musepack/requant.h"
-#include "musepack/huffman.h"
-
-//------------------------------------------------------------------------------
-// types
-//------------------------------------------------------------------------------
-enum
- {
- EQ_TAP = 13, // length of FIR filter for EQ
- DELAY = ((EQ_TAP + 1) / 2), // delay of FIR
- FIR_BANDS = 4, // number of subbands to be FIR filtered
- MEMSIZE = MPC_DECODER_MEMSIZE, // overall buffer size
- MEMSIZE2 = (MEMSIZE/2), // size of one buffer
- MEMMASK = (MEMSIZE-1)
- };
-
-//------------------------------------------------------------------------------
-// forward declarations
-//------------------------------------------------------------------------------
-void mpc_decoder_init_huffman_sv6(mpc_decoder *d);
-void mpc_decoder_init_huffman_sv7(mpc_decoder *d);
-void mpc_decoder_read_bitstream_sv6(mpc_decoder *d);
-void mpc_decoder_read_bitstream_sv7(mpc_decoder *d);
-void mpc_decoder_update_buffer(mpc_decoder *d, mpc_uint32_t RING);
-mpc_bool_t mpc_decoder_seek_sample(mpc_decoder *d, mpc_int64_t destsample);
-void mpc_decoder_requantisierung(mpc_decoder *d, const mpc_int32_t Last_Band);
-
-//------------------------------------------------------------------------------
-// utility functions
-//------------------------------------------------------------------------------
-static mpc_int32_t f_read(mpc_decoder *d, void *ptr, size_t size)
-{
- return d->r->read(d->r->data, ptr, size);
-};
-
-static mpc_bool_t f_seek(mpc_decoder *d, mpc_int32_t offset)
-{
- return d->r->seek(d->r->data, offset);
-};
-
-static mpc_int32_t f_read_dword(mpc_decoder *d, mpc_uint32_t * ptr, mpc_uint32_t count)
-{
- count = f_read(d, ptr, count << 2) >> 2;
-#ifndef MPC_LITTLE_ENDIAN
- mpc_uint32_t n;
- for(n = 0; n< count; n++) {
- ptr[n] = swap32(ptr[n]);
- }
-#endif
- return count;
-}
-
-//------------------------------------------------------------------------------
-// huffman & bitstream functions
-//------------------------------------------------------------------------------
-static const mpc_uint32_t mask [33] = {
- 0x00000000, 0x00000001, 0x00000003, 0x00000007,
- 0x0000000F, 0x0000001F, 0x0000003F, 0x0000007F,
- 0x000000FF, 0x000001FF, 0x000003FF, 0x000007FF,
- 0x00000FFF, 0x00001FFF, 0x00003FFF, 0x00007FFF,
- 0x0000FFFF, 0x0001FFFF, 0x0003FFFF, 0x0007FFFF,
- 0x000FFFFF, 0x001FFFFF, 0x003FFFFF, 0x007FFFFF,
- 0x00FFFFFF, 0x01FFFFFF, 0x03FFFFFF, 0x07FFFFFF,
- 0x0FFFFFFF, 0x1FFFFFFF, 0x3FFFFFFF, 0x7FFFFFFF,
- 0xFFFFFFFF
-};
-
-/* F U N C T I O N S */
-
-// resets bitstream decoding
-static void
-mpc_decoder_reset_bitstream_decode(mpc_decoder *d)
-{
- d->dword = 0;
- d->pos = 0;
- d->Zaehler = 0;
- d->WordsRead = 0;
-}
-
-// reports the number of read bits
-static mpc_uint32_t
-mpc_decoder_bits_read(mpc_decoder *d)
-{
- return 32 * d->WordsRead + d->pos;
-}
-
-// read desired number of bits out of the bitstream
-static mpc_uint32_t
-mpc_decoder_bitstream_read(mpc_decoder *d, const mpc_uint32_t bits)
-{
- mpc_uint32_t out = d->dword;
-
- d->pos += bits;
-
- if (d->pos < 32) {
- out >>= (32 - d->pos);
- }
- else {
- d->dword = d->Speicher[d->Zaehler = (d->Zaehler + 1) & MEMMASK];
- d->pos -= 32;
- if (d->pos) {
- out <<= d->pos;
- out |= d->dword >> (32 - d->pos);
- }
- ++(d->WordsRead);
- }
-
- return out & mask[bits];
-}
-
-// decode SCFI-bundle (sv4,5,6)
-static void
-mpc_decoder_scfi_bundle_read(
- mpc_decoder *d,
- HuffmanTyp* Table, mpc_int32_t* SCFI, mpc_int32_t* DSCF)
-{
- // load preview and decode
- mpc_uint32_t code = d->dword << d->pos;
- if (d->pos > 26) {
- code |= d->Speicher[(d->Zaehler + 1) & MEMMASK] >> (32 - d->pos);
- }
- while (code < Table->Code) {
- Table++;
- }
-
- // set the new position within bitstream without performing a dummy-read
- if ((d->pos += Table->Length) >= 32) {
- d->pos -= 32;
- d->dword = d->Speicher[d->Zaehler = (d->Zaehler+1) & MEMMASK];
- ++(d->WordsRead);
- }
-
- *SCFI = Table->Value >> 1;
- *DSCF = Table->Value & 1;
-}
-
-static int
-mpc_decoder_huffman_typ_cmpfn(const void* p1, const void* p2)
-{
- if (((HuffmanTyp*) p1)->Code < ((HuffmanTyp*) p2)->Code ) return +1;
- if (((HuffmanTyp*) p1)->Code > ((HuffmanTyp*) p2)->Code ) return -1;
- return 0;
-}
-
-// sort huffman-tables by codeword
-// offset resulting value
-void
-mpc_decoder_resort_huff_tables(
- const mpc_uint32_t elements, HuffmanTyp* Table, const mpc_int32_t offset )
-{
- mpc_uint32_t i;
-
- for ( i = 0; i < elements; i++ ) {
- Table[i].Code <<= 32 - Table[i].Length;
- Table[i].Value = i - offset;
- }
- qsort(Table, elements, sizeof(*Table), mpc_decoder_huffman_typ_cmpfn);
-}
-
-// basic huffman decoding routine
-// works with maximum lengths up to 14
-static mpc_int32_t
-mpc_decoder_huffman_decode(mpc_decoder *d, const HuffmanTyp *Table)
-{
- // load preview and decode
- mpc_uint32_t code = d->dword << d->pos;
- if (d->pos > 18) {
- code |= d->Speicher[(d->Zaehler + 1) & MEMMASK] >> (32 - d->pos);
- }
- while (code < Table->Code) {
- Table++;
- }
-
- // set the new position within bitstream without performing a dummy-read
- if ((d->pos += Table->Length) >= 32) {
- d->pos -= 32;
- d->dword = d->Speicher[d->Zaehler = (d->Zaehler + 1) & MEMMASK];
- ++(d->WordsRead);
- }
-
- return Table->Value;
-}
-
-// faster huffman through previewing less bits
-// works with maximum lengths up to 10
-static mpc_int32_t
-mpc_decoder_huffman_decode_fast(mpc_decoder *d, const HuffmanTyp* Table)
-{
- // load preview and decode
- mpc_uint32_t code = d->dword << d->pos;
- if (d->pos > 22) {
- code |= d->Speicher[(d->Zaehler + 1) & MEMMASK] >> (32 - d->pos);
- }
- while (code < Table->Code) {
- Table++;
- }
-
- // set the new position within bitstream without performing a dummy-read
- if ((d->pos += Table->Length) >= 32) {
- d->pos -= 32;
- d->dword = d->Speicher[d->Zaehler = (d->Zaehler + 1) & MEMMASK];
- ++(d->WordsRead);
- }
-
- return Table->Value;
-}
-
-// even faster huffman through previewing even less bits
-// works with maximum lengths up to 5
-static mpc_int32_t
-mpc_decoder_huffman_decode_faster(mpc_decoder *d, const HuffmanTyp* Table)
-{
- // load preview and decode
- mpc_uint32_t code = d->dword << d->pos;
- if (d->pos > 27) {
- code |= d->Speicher[(d->Zaehler + 1) & MEMMASK] >> (32 - d->pos);
- }
- while (code < Table->Code) {
- Table++;
- }
-
- // set the new position within bitstream without performing a dummy-read
- if ((d->pos += Table->Length) >= 32) {
- d->pos -= 32;
- d->dword = d->Speicher[d->Zaehler = (d->Zaehler + 1) & MEMMASK];
- ++(d->WordsRead);
- }
-
- return Table->Value;
-}
-
-static void
-mpc_decoder_reset_v(mpc_decoder *d)
-{
- memset(d->V_L, 0, sizeof d->V_L);
- memset(d->V_R, 0, sizeof d->V_R);
-}
-
-static void
-mpc_decoder_reset_synthesis(mpc_decoder *d)
-{
- mpc_decoder_reset_v(d);
-}
-
-static void
-mpc_decoder_reset_y(mpc_decoder *d)
-{
- memset(d->Y_L, 0, sizeof d->Y_L);
- memset(d->Y_R, 0, sizeof d->Y_R);
-}
-
-static void
-mpc_decoder_reset_globals(mpc_decoder *d)
-{
- mpc_decoder_reset_bitstream_decode(d);
-
- d->DecodedFrames = 0;
- d->StreamVersion = 0;
- d->MS_used = 0;
-
- memset(d->Y_L , 0, sizeof d->Y_L );
- memset(d->Y_R , 0, sizeof d->Y_R );
- memset(d->SCF_Index_L , 0, sizeof d->SCF_Index_L );
- memset(d->SCF_Index_R , 0, sizeof d->SCF_Index_R );
- memset(d->Res_L , 0, sizeof d->Res_L );
- memset(d->Res_R , 0, sizeof d->Res_R );
- memset(d->SCFI_L , 0, sizeof d->SCFI_L );
- memset(d->SCFI_R , 0, sizeof d->SCFI_R );
- memset(d->DSCF_Flag_L , 0, sizeof d->DSCF_Flag_L );
- memset(d->DSCF_Flag_R , 0, sizeof d->DSCF_Flag_R );
- memset(d->DSCF_Reference_L, 0, sizeof d->DSCF_Reference_L );
- memset(d->DSCF_Reference_R, 0, sizeof d->DSCF_Reference_R );
- memset(d->Q , 0, sizeof d->Q );
- memset(d->MS_Flag , 0, sizeof d->MS_Flag );
-}
-
-static mpc_uint32_t
-mpc_decoder_decode_internal(mpc_decoder *d, MPC_SAMPLE_FORMAT *buffer)
-{
- mpc_uint32_t output_frame_length = MPC_FRAME_LENGTH;
-
- mpc_uint32_t FrameBitCnt = 0;
-
- if (d->DecodedFrames >= d->OverallFrames) {
- return (mpc_uint32_t)(-1); // end of file -> abort decoding
- }
-
- // read jump-info for validity check of frame
- d->FwdJumpInfo = mpc_decoder_bitstream_read(d, 20);
-
- d->ActDecodePos = (d->Zaehler << 5) + d->pos;
-
- // decode data and check for validity of frame
- FrameBitCnt = mpc_decoder_bits_read(d);
- switch (d->StreamVersion) {
- case 0x04:
- case 0x05:
- case 0x06:
- mpc_decoder_read_bitstream_sv6(d);
- break;
- case 0x07:
- case 0x17:
- mpc_decoder_read_bitstream_sv7(d);
- break;
- default:
- return (mpc_uint32_t)(-1);
- }
- d->FrameWasValid = mpc_decoder_bits_read(d) - FrameBitCnt == d->FwdJumpInfo;
-
- // synthesize signal
- mpc_decoder_requantisierung(d, d->Max_Band);
-
- //if ( d->EQ_activated && PluginSettings.EQbyMPC )
- // perform_EQ ();
-
- mpc_decoder_synthese_filter_float(d, buffer);
-
- d->DecodedFrames++;
-
- // cut off first MPC_DECODER_SYNTH_DELAY zero-samples
- if (d->DecodedFrames == d->OverallFrames && d->StreamVersion >= 6) {
- // reconstruct exact filelength
- mpc_int32_t mod_block = mpc_decoder_bitstream_read(d, 11);
- mpc_int32_t FilterDecay;
-
- if (mod_block == 0) {
- // Encoder bugfix
- mod_block = 1152;
- }
- FilterDecay = (mod_block + MPC_DECODER_SYNTH_DELAY) % MPC_FRAME_LENGTH;
-
- // additional FilterDecay samples are needed for decay of synthesis filter
- if (MPC_DECODER_SYNTH_DELAY + mod_block >= MPC_FRAME_LENGTH) {
-
- // **********************************************************************
- // Rhoades 4/16/2002
- // Commented out are blocks of code which cause gapless playback to fail.
- // Temporary fix...
- // **********************************************************************
-
- if (!d->TrueGaplessPresent) {
- mpc_decoder_reset_y(d);
- }
- else {
- //if ( MPC_FRAME_LENGTH != d->LastValidSamples ) {
- mpc_decoder_bitstream_read(d, 20);
- mpc_decoder_read_bitstream_sv7(d);
- mpc_decoder_requantisierung(d, d->Max_Band);
- //FilterDecay = d->LastValidSamples;
- //}
- //else {
- //FilterDecay = 0;
- //}
- }
-
- mpc_decoder_synthese_filter_float(d, buffer + 2304);
-
- output_frame_length = MPC_FRAME_LENGTH + FilterDecay;
- }
- else { // there are only FilterDecay samples needed for this frame
- output_frame_length = FilterDecay;
- }
- }
-
- if (d->samples_to_skip) {
- if (output_frame_length < d->samples_to_skip) {
- d->samples_to_skip -= output_frame_length;
- output_frame_length = 0;
- }
- else {
- output_frame_length -= d->samples_to_skip;
- memmove(
- buffer,
- buffer + d->samples_to_skip * 2,
- output_frame_length * 2 * sizeof (MPC_SAMPLE_FORMAT));
- d->samples_to_skip = 0;
- }
- }
-
- return output_frame_length;
-}
-
-mpc_uint32_t mpc_decoder_decode(
- mpc_decoder *d,
- MPC_SAMPLE_FORMAT *buffer,
- mpc_uint32_t *vbr_update_acc,
- mpc_uint32_t *vbr_update_bits)
-{
- for(;;)
- {
- //const mpc_int32_t MaxBrokenFrames = 0; // PluginSettings.MaxBrokenFrames
-
- mpc_uint32_t RING = d->Zaehler;
- mpc_int32_t vbr_ring = (RING << 5) + d->pos;
-
- mpc_uint32_t valid_samples = mpc_decoder_decode_internal(d, buffer);
-
- if (valid_samples == (mpc_uint32_t)(-1) ) {
- return 0;
- }
-
- /**************** ERROR CONCEALMENT *****************/
- if (d->FrameWasValid == 0 ) {
- // error occurred in bitstream
- return (mpc_uint32_t)(-1);
- }
- else {
- if (vbr_update_acc && vbr_update_bits) {
- (*vbr_update_acc) ++;
- vbr_ring = (d->Zaehler << 5) + d->pos - vbr_ring;
- if (vbr_ring < 0) {
- vbr_ring += 524288;
- }
- (*vbr_update_bits) += vbr_ring;
- }
-
- }
- mpc_decoder_update_buffer(d, RING);
-
- if (valid_samples > 0) {
- return valid_samples;
- }
- }
-}
-
-void
-mpc_decoder_requantisierung(mpc_decoder *d, const mpc_int32_t Last_Band)
-{
- mpc_int32_t Band;
- mpc_int32_t n;
- MPC_SAMPLE_FORMAT facL;
- MPC_SAMPLE_FORMAT facR;
- MPC_SAMPLE_FORMAT templ;
- MPC_SAMPLE_FORMAT tempr;
- MPC_SAMPLE_FORMAT* YL;
- MPC_SAMPLE_FORMAT* YR;
- mpc_int32_t* L;
- mpc_int32_t* R;
-
-#ifdef MPC_FIXED_POINT
-#if MPC_FIXED_POINT_FRACTPART == 14
-#define MPC_MULTIPLY_SCF(CcVal, SCF_idx) \
- MPC_MULTIPLY_EX(CcVal, d->SCF[SCF_idx], d->SCF_shift[SCF_idx])
-#else
-
-#error FIXME, Cc table is in 18.14 format
-
-#endif
-#else
-#define MPC_MULTIPLY_SCF(CcVal, SCF_idx) \
- MPC_MULTIPLY(CcVal, d->SCF[SCF_idx])
-#endif
- // requantization and scaling of subband-samples
- for ( Band = 0; Band <= Last_Band; Band++ ) { // setting pointers
- YL = d->Y_L[0] + Band;
- YR = d->Y_R[0] + Band;
- L = d->Q[Band].L;
- R = d->Q[Band].R;
- /************************** MS-coded **************************/
- if ( d->MS_Flag [Band] ) {
- if ( d->Res_L [Band] ) {
- if ( d->Res_R [Band] ) { // M!=0, S!=0
- facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , (unsigned char)d->SCF_Index_L[Band][0]);
- facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , (unsigned char)d->SCF_Index_R[Band][0]);
- for ( n = 0; n < 12; n++, YL += 32, YR += 32 ) {
- *YL = (templ = MPC_MULTIPLY_FLOAT_INT(facL,*L++))+(tempr = MPC_MULTIPLY_FLOAT_INT(facR,*R++));
- *YR = templ - tempr;
- }
- facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , (unsigned char)d->SCF_Index_L[Band][1]);
- facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , (unsigned char)d->SCF_Index_R[Band][1]);
- for ( ; n < 24; n++, YL += 32, YR += 32 ) {
- *YL = (templ = MPC_MULTIPLY_FLOAT_INT(facL,*L++))+(tempr = MPC_MULTIPLY_FLOAT_INT(facR,*R++));
- *YR = templ - tempr;
- }
- facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , (unsigned char)d->SCF_Index_L[Band][2]);
- facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , (unsigned char)d->SCF_Index_R[Band][2]);
- for ( ; n < 36; n++, YL += 32, YR += 32 ) {
- *YL = (templ = MPC_MULTIPLY_FLOAT_INT(facL,*L++))+(tempr = MPC_MULTIPLY_FLOAT_INT(facR,*R++));
- *YR = templ - tempr;
- }
- } else { // M!=0, S==0
- facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , (unsigned char)d->SCF_Index_L[Band][0]);
- for ( n = 0; n < 12; n++, YL += 32, YR += 32 ) {
- *YR = *YL = MPC_MULTIPLY_FLOAT_INT(facL,*L++);
- }
- facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , (unsigned char)d->SCF_Index_L[Band][1]);
- for ( ; n < 24; n++, YL += 32, YR += 32 ) {
- *YR = *YL = MPC_MULTIPLY_FLOAT_INT(facL,*L++);
- }
- facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , (unsigned char)d->SCF_Index_L[Band][2]);
- for ( ; n < 36; n++, YL += 32, YR += 32 ) {
- *YR = *YL = MPC_MULTIPLY_FLOAT_INT(facL,*L++);
- }
- }
- } else {
- if (d->Res_R[Band]) // M==0, S!=0
- {
- facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , (unsigned char)d->SCF_Index_R[Band][0]);
- for ( n = 0; n < 12; n++, YL += 32, YR += 32 ) {
- *YR = - (*YL = MPC_MULTIPLY_FLOAT_INT(facR,*(R++)));
- }
- facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , (unsigned char)d->SCF_Index_R[Band][1]);
- for ( ; n < 24; n++, YL += 32, YR += 32 ) {
- *YR = - (*YL = MPC_MULTIPLY_FLOAT_INT(facR,*(R++)));
- }
- facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , (unsigned char)d->SCF_Index_R[Band][2]);
- for ( ; n < 36; n++, YL += 32, YR += 32 ) {
- *YR = - (*YL = MPC_MULTIPLY_FLOAT_INT(facR,*(R++)));
- }
- } else { // M==0, S==0
- for ( n = 0; n < 36; n++, YL += 32, YR += 32 ) {
- *YR = *YL = 0;
- }
- }
- }
- }
- /************************** LR-coded **************************/
- else {
- if ( d->Res_L [Band] ) {
- if ( d->Res_R [Band] ) { // L!=0, R!=0
- facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , (unsigned char)d->SCF_Index_L[Band][0]);
- facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , (unsigned char)d->SCF_Index_R[Band][0]);
- for (n = 0; n < 12; n++, YL += 32, YR += 32 ) {
- *YL = MPC_MULTIPLY_FLOAT_INT(facL,*L++);
- *YR = MPC_MULTIPLY_FLOAT_INT(facR,*R++);
- }
- facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , (unsigned char)d->SCF_Index_L[Band][1]);
- facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , (unsigned char)d->SCF_Index_R[Band][1]);
- for (; n < 24; n++, YL += 32, YR += 32 ) {
- *YL = MPC_MULTIPLY_FLOAT_INT(facL,*L++);
- *YR = MPC_MULTIPLY_FLOAT_INT(facR,*R++);
- }
- facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , (unsigned char)d->SCF_Index_L[Band][2]);
- facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , (unsigned char)d->SCF_Index_R[Band][2]);
- for (; n < 36; n++, YL += 32, YR += 32 ) {
- *YL = MPC_MULTIPLY_FLOAT_INT(facL,*L++);
- *YR = MPC_MULTIPLY_FLOAT_INT(facR,*R++);
- }
- } else { // L!=0, R==0
- facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , (unsigned char)d->SCF_Index_L[Band][0]);
- for ( n = 0; n < 12; n++, YL += 32, YR += 32 ) {
- *YL = MPC_MULTIPLY_FLOAT_INT(facL,*L++);
- *YR = 0;
- }
- facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , (unsigned char)d->SCF_Index_L[Band][1]);
- for ( ; n < 24; n++, YL += 32, YR += 32 ) {
- *YL = MPC_MULTIPLY_FLOAT_INT(facL,*L++);
- *YR = 0;
- }
- facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , (unsigned char)d->SCF_Index_L[Band][2]);
- for ( ; n < 36; n++, YL += 32, YR += 32 ) {
- *YL = MPC_MULTIPLY_FLOAT_INT(facL,*L++);
- *YR = 0;
- }
- }
- }
- else {
- if ( d->Res_R [Band] ) { // L==0, R!=0
- facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , (unsigned char)d->SCF_Index_R[Band][0]);
- for ( n = 0; n < 12; n++, YL += 32, YR += 32 ) {
- *YL = 0;
- *YR = MPC_MULTIPLY_FLOAT_INT(facR,*R++);
- }
- facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , (unsigned char)d->SCF_Index_R[Band][1]);
- for ( ; n < 24; n++, YL += 32, YR += 32 ) {
- *YL = 0;
- *YR = MPC_MULTIPLY_FLOAT_INT(facR,*R++);
- }
- facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , (unsigned char)d->SCF_Index_R[Band][2]);
- for ( ; n < 36; n++, YL += 32, YR += 32 ) {
- *YL = 0;
- *YR = MPC_MULTIPLY_FLOAT_INT(facR,*R++);
- }
- } else { // L==0, R==0
- for ( n = 0; n < 36; n++, YL += 32, YR += 32 ) {
- *YR = *YL = 0;
- }
- }
- }
- }
- }
-}
-
-/****************************************** SV 6 ******************************************/
-void
-mpc_decoder_read_bitstream_sv6(mpc_decoder *d)
-{
- mpc_int32_t n,k;
- mpc_int32_t Max_used_Band=0;
- HuffmanTyp *Table;
- const HuffmanTyp *x1;
- const HuffmanTyp *x2;
- mpc_int32_t *L;
- mpc_int32_t *R;
- mpc_int32_t *ResL = d->Res_L;
- mpc_int32_t *ResR = d->Res_R;
-
- /************************ HEADER **************************/
- ResL = d->Res_L;
- ResR = d->Res_R;
- for (n=0; n <= d->Max_Band; ++n, ++ResL, ++ResR)
- {
- if (n<11) Table = d->Region_A;
- else if (n>=11 && n<=22) Table = d->Region_B;
- else /*if (n>=23)*/ Table = d->Region_C;
-
- *ResL = d->Q_res[n][mpc_decoder_huffman_decode(d, Table)];
- if (d->MS_used) {
- d->MS_Flag[n] = mpc_decoder_bitstream_read(d, 1);
- }
- *ResR = d->Q_res[n][mpc_decoder_huffman_decode(d, Table)];
-
- // only perform the following procedure up to the maximum non-zero subband
- if (*ResL || *ResR) Max_used_Band = n;
- }
-
- /************************* SCFI-Bundle *****************************/
- ResL = d->Res_L;
- ResR = d->Res_R;
- for (n=0; n<=Max_used_Band; ++n, ++ResL, ++ResR) {
- if (*ResL) mpc_decoder_scfi_bundle_read(d, d->SCFI_Bundle, &(d->SCFI_L[n]), &(d->DSCF_Flag_L[n]));
- if (*ResR) mpc_decoder_scfi_bundle_read(d, d->SCFI_Bundle, &(d->SCFI_R[n]), &(d->DSCF_Flag_R[n]));
- }
-
- /***************************** SCFI ********************************/
- ResL = d->Res_L;
- ResR = d->Res_R;
- L = d->SCF_Index_L[0];
- R = d->SCF_Index_R[0];
- for (n=0; n <= Max_used_Band; ++n, ++ResL, ++ResR, L+=3, R+=3)
- {
- if (*ResL)
- {
- /*********** DSCF ************/
- if (d->DSCF_Flag_L[n]==1)
- {
- L[2] = d->DSCF_Reference_L[n];
- switch (d->SCFI_L[n])
- {
- case 3:
- L[0] = L[2] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie);
- L[1] = L[0];
- L[2] = L[1];
- break;
- case 1:
- L[0] = L[2] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie);
- L[1] = L[0] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie);
- L[2] = L[1];
- break;
- case 2:
- L[0] = L[2] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie);
- L[1] = L[0];
- L[2] = L[1] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie);
- break;
- case 0:
- L[0] = L[2] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie);
- L[1] = L[0] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie);
- L[2] = L[1] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie);
- break;
- default:
- return;
- break;
- }
- }
- /************ SCF ************/
- else
- {
- switch (d->SCFI_L[n])
- {
- case 3:
- L[0] = mpc_decoder_bitstream_read(d, 6);
- L[1] = L[0];
- L[2] = L[1];
- break;
- case 1:
- L[0] = mpc_decoder_bitstream_read(d, 6);
- L[1] = mpc_decoder_bitstream_read(d, 6);
- L[2] = L[1];
- break;
- case 2:
- L[0] = mpc_decoder_bitstream_read(d, 6);
- L[1] = L[0];
- L[2] = mpc_decoder_bitstream_read(d, 6);
- break;
- case 0:
- L[0] = mpc_decoder_bitstream_read(d, 6);
- L[1] = mpc_decoder_bitstream_read(d, 6);
- L[2] = mpc_decoder_bitstream_read(d, 6);
- break;
- default:
- return;
- break;
- }
- }
- // update Reference for DSCF
- d->DSCF_Reference_L[n] = L[2];
- }
- if (*ResR)
- {
- R[2] = d->DSCF_Reference_R[n];
- /*********** DSCF ************/
- if (d->DSCF_Flag_R[n]==1)
- {
- switch (d->SCFI_R[n])
- {
- case 3:
- R[0] = R[2] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie);
- R[1] = R[0];
- R[2] = R[1];
- break;
- case 1:
- R[0] = R[2] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie);
- R[1] = R[0] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie);
- R[2] = R[1];
- break;
- case 2:
- R[0] = R[2] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie);
- R[1] = R[0];
- R[2] = R[1] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie);
- break;
- case 0:
- R[0] = R[2] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie);
- R[1] = R[0] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie);
- R[2] = R[1] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie);
- break;
- default:
- return;
- break;
- }
- }
- /************ SCF ************/
- else
- {
- switch (d->SCFI_R[n])
- {
- case 3:
- R[0] = mpc_decoder_bitstream_read(d, 6);
- R[1] = R[0];
- R[2] = R[1];
- break;
- case 1:
- R[0] = mpc_decoder_bitstream_read(d, 6);
- R[1] = mpc_decoder_bitstream_read(d, 6);
- R[2] = R[1];
- break;
- case 2:
- R[0] = mpc_decoder_bitstream_read(d, 6);
- R[1] = R[0];
- R[2] = mpc_decoder_bitstream_read(d, 6);
- break;
- case 0:
- R[0] = mpc_decoder_bitstream_read(d, 6);
- R[1] = mpc_decoder_bitstream_read(d, 6);
- R[2] = mpc_decoder_bitstream_read(d, 6);
- break;
- default:
- return;
- break;
- }
- }
- // update Reference for DSCF
- d->DSCF_Reference_R[n] = R[2];
- }
- }
-
- /**************************** Samples ****************************/
- ResL = d->Res_L;
- ResR = d->Res_R;
- for (n=0; n <= Max_used_Band; ++n, ++ResL, ++ResR)
- {
- // setting pointers
- x1 = d->SampleHuff[*ResL];
- x2 = d->SampleHuff[*ResR];
- L = d->Q[n].L;
- R = d->Q[n].R;
-
- if (x1!=NULL || x2!=NULL)
- for (k=0; k<36; ++k)
- {
- if (x1 != NULL) *L++ = mpc_decoder_huffman_decode_fast(d, x1);
- if (x2 != NULL) *R++ = mpc_decoder_huffman_decode_fast(d, x2);
- }
-
- if (*ResL>7 || *ResR>7)
- for (k=0; k<36; ++k)
- {
- if (*ResL>7) *L++ = (mpc_int32_t)mpc_decoder_bitstream_read(d, Res_bit[*ResL]) - Dc[*ResL];
- if (*ResR>7) *R++ = (mpc_int32_t)mpc_decoder_bitstream_read(d, Res_bit[*ResR]) - Dc[*ResR];
- }
- }
-}
-
-/****************************************** SV 7 ******************************************/
-void
-mpc_decoder_read_bitstream_sv7(mpc_decoder *d)
-{
- // these arrays hold decoding results for bundled quantizers (3- and 5-step)
- /*static*/ mpc_int32_t idx30[] = { -1, 0, 1,-1, 0, 1,-1, 0, 1,-1, 0, 1,-1, 0, 1,-1, 0, 1,-1, 0, 1,-1, 0, 1,-1, 0, 1};
- /*static*/ mpc_int32_t idx31[] = { -1,-1,-1, 0, 0, 0, 1, 1, 1,-1,-1,-1, 0, 0, 0, 1, 1, 1,-1,-1,-1, 0, 0, 0, 1, 1, 1};
- /*static*/ mpc_int32_t idx32[] = { -1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1};
- /*static*/ mpc_int32_t idx50[] = { -2,-1, 0, 1, 2,-2,-1, 0, 1, 2,-2,-1, 0, 1, 2,-2,-1, 0, 1, 2,-2,-1, 0, 1, 2};
- /*static*/ mpc_int32_t idx51[] = { -2,-2,-2,-2,-2,-1,-1,-1,-1,-1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2};
-
- mpc_int32_t n,k;
- mpc_int32_t Max_used_Band=0;
- const HuffmanTyp *Table;
- mpc_int32_t idx;
- mpc_int32_t *L ,*R;
- mpc_int32_t *ResL,*ResR;
- mpc_uint32_t tmp;
-
- /***************************** Header *****************************/
- ResL = d->Res_L;
- ResR = d->Res_R;
-
- // first subband
- *ResL = mpc_decoder_bitstream_read(d, 4);
- *ResR = mpc_decoder_bitstream_read(d, 4);
- if (d->MS_used && !(*ResL==0 && *ResR==0)) {
- d->MS_Flag[0] = mpc_decoder_bitstream_read(d, 1);
- }
-
- // consecutive subbands
- ++ResL; ++ResR; // increase pointers
- for (n=1; n <= d->Max_Band; ++n, ++ResL, ++ResR)
- {
- idx = mpc_decoder_huffman_decode_fast(d, d->HuffHdr);
- *ResL = (idx!=4) ? *(ResL-1) + idx : mpc_decoder_bitstream_read(d, 4);
-
- idx = mpc_decoder_huffman_decode_fast(d, d->HuffHdr);
- *ResR = (idx!=4) ? *(ResR-1) + idx : mpc_decoder_bitstream_read(d, 4);
-
- if (d->MS_used && !(*ResL==0 && *ResR==0)) {
- d->MS_Flag[n] = mpc_decoder_bitstream_read(d, 1);
- }
-
- // only perform following procedures up to the maximum non-zero subband
- if (*ResL!=0 || *ResR!=0) {
- Max_used_Band = n;
- }
- }
- /****************************** SCFI ******************************/
- L = d->SCFI_L;
- R = d->SCFI_R;
- ResL = d->Res_L;
- ResR = d->Res_R;
- for (n=0; n <= Max_used_Band; ++n, ++L, ++R, ++ResL, ++ResR) {
- if (*ResL) *L = mpc_decoder_huffman_decode_faster(d, d->HuffSCFI);
- if (*ResR) *R = mpc_decoder_huffman_decode_faster(d, d->HuffSCFI);
- }
-
- /**************************** SCF/DSCF ****************************/
- ResL = d->Res_L;
- ResR = d->Res_R;
- L = d->SCF_Index_L[0];
- R = d->SCF_Index_R[0];
- for (n=0; n<=Max_used_Band; ++n, ++ResL, ++ResR, L+=3, R+=3) {
- if (*ResL)
- {
- L[2] = d->DSCF_Reference_L[n];
- switch (d->SCFI_L[n])
- {
- case 1:
- idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF);
- L[0] = (idx!=8) ? L[2] + idx : mpc_decoder_bitstream_read(d, 6);
- idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF);
- L[1] = (idx!=8) ? L[0] + idx : mpc_decoder_bitstream_read(d, 6);
- L[2] = L[1];
- break;
- case 3:
- idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF);
- L[0] = (idx!=8) ? L[2] + idx : mpc_decoder_bitstream_read(d, 6);
- L[1] = L[0];
- L[2] = L[1];
- break;
- case 2:
- idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF);
- L[0] = (idx!=8) ? L[2] + idx : mpc_decoder_bitstream_read(d, 6);
- L[1] = L[0];
- idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF);
- L[2] = (idx!=8) ? L[1] + idx : mpc_decoder_bitstream_read(d, 6);
- break;
- case 0:
- idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF);
- L[0] = (idx!=8) ? L[2] + idx : mpc_decoder_bitstream_read(d, 6);
- idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF);
- L[1] = (idx!=8) ? L[0] + idx : mpc_decoder_bitstream_read(d, 6);
- idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF);
- L[2] = (idx!=8) ? L[1] + idx : mpc_decoder_bitstream_read(d, 6);
- break;
- default:
- return;
- break;
- }
- // update Reference for DSCF
- d->DSCF_Reference_L[n] = L[2];
- }
- if (*ResR)
- {
- R[2] = d->DSCF_Reference_R[n];
- switch (d->SCFI_R[n])
- {
- case 1:
- idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF);
- R[0] = (idx!=8) ? R[2] + idx : mpc_decoder_bitstream_read(d, 6);
- idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF);
- R[1] = (idx!=8) ? R[0] + idx : mpc_decoder_bitstream_read(d, 6);
- R[2] = R[1];
- break;
- case 3:
- idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF);
- R[0] = (idx!=8) ? R[2] + idx : mpc_decoder_bitstream_read(d, 6);
- R[1] = R[0];
- R[2] = R[1];
- break;
- case 2:
- idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF);
- R[0] = (idx!=8) ? R[2] + idx : mpc_decoder_bitstream_read(d, 6);
- R[1] = R[0];
- idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF);
- R[2] = (idx!=8) ? R[1] + idx : mpc_decoder_bitstream_read(d, 6);
- break;
- case 0:
- idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF);
- R[0] = (idx!=8) ? R[2] + idx : mpc_decoder_bitstream_read(d, 6);
- idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF);
- R[1] = (idx!=8) ? R[0] + idx : mpc_decoder_bitstream_read(d, 6);
- idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF);
- R[2] = (idx!=8) ? R[1] + idx : mpc_decoder_bitstream_read(d, 6);
- break;
- default:
- return;
- break;
- }
- // update Reference for DSCF
- d->DSCF_Reference_R[n] = R[2];
- }
- }
- /***************************** Samples ****************************/
- ResL = d->Res_L;
- ResR = d->Res_R;
- L = d->Q[0].L;
- R = d->Q[0].R;
- for (n=0; n <= Max_used_Band; ++n, ++ResL, ++ResR, L+=36, R+=36)
- {
- /************** links **************/
- switch (*ResL)
- {
- case -2: case -3: case -4: case -5: case -6: case -7: case -8: case -9:
- case -10: case -11: case -12: case -13: case -14: case -15: case -16: case -17:
- L += 36;
- break;
- case -1:
- for (k=0; k<36; k++ ) {
- tmp = random_int(d);
- *L++ = ((tmp >> 24) & 0xFF) + ((tmp >> 16) & 0xFF) + ((tmp >> 8) & 0xFF) + ((tmp >> 0) & 0xFF) - 510;
- }
- break;
- case 0:
- L += 36;// increase pointer
- break;
- case 1:
- Table = d->HuffQ[mpc_decoder_bitstream_read(d, 1)][1];
- for (k=0; k<12; ++k)
- {
- idx = mpc_decoder_huffman_decode_fast(d, Table);
- *L++ = idx30[idx];
- *L++ = idx31[idx];
- *L++ = idx32[idx];
- }
- break;
- case 2:
- Table = d->HuffQ[mpc_decoder_bitstream_read(d, 1)][2];
- for (k=0; k<18; ++k)
- {
- idx = mpc_decoder_huffman_decode_fast(d, Table);
- *L++ = idx50[idx];
- *L++ = idx51[idx];
- }
- break;
- case 3:
- case 4:
- Table = d->HuffQ[mpc_decoder_bitstream_read(d, 1)][*ResL];
- for (k=0; k<36; ++k)
- *L++ = mpc_decoder_huffman_decode_faster(d, Table);
- break;
- case 5:
- Table = d->HuffQ[mpc_decoder_bitstream_read(d, 1)][*ResL];
- for (k=0; k<36; ++k)
- *L++ = mpc_decoder_huffman_decode_fast(d, Table);
- break;
- case 6:
- case 7:
- Table = d->HuffQ[mpc_decoder_bitstream_read(d, 1)][*ResL];
- for (k=0; k<36; ++k)
- *L++ = mpc_decoder_huffman_decode(d, Table);
- break;
- case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17:
- tmp = Dc[*ResL];
- for (k=0; k<36; ++k)
- *L++ = (mpc_int32_t)mpc_decoder_bitstream_read(d, Res_bit[*ResL]) - tmp;
- break;
- default:
- return;
- }
- /************** rechts **************/
- switch (*ResR)
- {
- case -2: case -3: case -4: case -5: case -6: case -7: case -8: case -9:
- case -10: case -11: case -12: case -13: case -14: case -15: case -16: case -17:
- R += 36;
- break;
- case -1:
- for (k=0; k<36; k++ ) {
- tmp = random_int(d);
- *R++ = ((tmp >> 24) & 0xFF) + ((tmp >> 16) & 0xFF) + ((tmp >> 8) & 0xFF) + ((tmp >> 0) & 0xFF) - 510;
- }
- break;
- case 0:
- R += 36;// increase pointer
- break;
- case 1:
- Table = d->HuffQ[mpc_decoder_bitstream_read(d, 1)][1];
- for (k=0; k<12; ++k)
- {
- idx = mpc_decoder_huffman_decode_fast(d, Table);
- *R++ = idx30[idx];
- *R++ = idx31[idx];
- *R++ = idx32[idx];
- }
- break;
- case 2:
- Table = d->HuffQ[mpc_decoder_bitstream_read(d, 1)][2];
- for (k=0; k<18; ++k)
- {
- idx = mpc_decoder_huffman_decode_fast(d, Table);
- *R++ = idx50[idx];
- *R++ = idx51[idx];
- }
- break;
- case 3:
- case 4:
- Table = d->HuffQ[mpc_decoder_bitstream_read(d, 1)][*ResR];
- for (k=0; k<36; ++k)
- *R++ = mpc_decoder_huffman_decode_faster(d, Table);
- break;
- case 5:
- Table = d->HuffQ[mpc_decoder_bitstream_read(d, 1)][*ResR];
- for (k=0; k<36; ++k)
- *R++ = mpc_decoder_huffman_decode_fast(d, Table);
- break;
- case 6:
- case 7:
- Table = d->HuffQ[mpc_decoder_bitstream_read(d, 1)][*ResR];
- for (k=0; k<36; ++k)
- *R++ = mpc_decoder_huffman_decode(d, Table);
- break;
- case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17:
- tmp = Dc[*ResR];
- for (k=0; k<36; ++k)
- *R++ = (mpc_int32_t)mpc_decoder_bitstream_read(d, Res_bit[*ResR]) - tmp;
- break;
- default:
- return;
- }
- }
-}
-
-void mpc_decoder_setup(mpc_decoder *d, mpc_reader *r)
-{
- d->r = r;
-
- d->HuffQ[0][0] = 0;
- d->HuffQ[1][0] = 0;
- d->HuffQ[0][1] = d->HuffQ1[0];
- d->HuffQ[1][1] = d->HuffQ1[1];
- d->HuffQ[0][2] = d->HuffQ2[0];
- d->HuffQ[1][2] = d->HuffQ2[1];
- d->HuffQ[0][3] = d->HuffQ3[0];
- d->HuffQ[1][3] = d->HuffQ3[1];
- d->HuffQ[0][4] = d->HuffQ4[0];
- d->HuffQ[1][4] = d->HuffQ4[1];
- d->HuffQ[0][5] = d->HuffQ5[0];
- d->HuffQ[1][5] = d->HuffQ5[1];
- d->HuffQ[0][6] = d->HuffQ6[0];
- d->HuffQ[1][6] = d->HuffQ6[1];
- d->HuffQ[0][7] = d->HuffQ7[0];
- d->HuffQ[1][7] = d->HuffQ7[1];
-
- d->SampleHuff[0] = NULL;
- d->SampleHuff[1] = d->Entropie_1;
- d->SampleHuff[2] = d->Entropie_2;
- d->SampleHuff[3] = d->Entropie_3;
- d->SampleHuff[4] = d->Entropie_4;
- d->SampleHuff[5] = d->Entropie_5;
- d->SampleHuff[6] = d->Entropie_6;
- d->SampleHuff[7] = d->Entropie_7;
- d->SampleHuff[8] = NULL;
- d->SampleHuff[9] = NULL;
- d->SampleHuff[10] = NULL;
- d->SampleHuff[11] = NULL;
- d->SampleHuff[12] = NULL;
- d->SampleHuff[13] = NULL;
- d->SampleHuff[14] = NULL;
- d->SampleHuff[15] = NULL;
- d->SampleHuff[16] = NULL;
- d->SampleHuff[17] = NULL;
-
- d->EQ_activated = 0;
- d->MPCHeaderPos = 0;
- d->StreamVersion = 0;
- d->MS_used = 0;
- d->FwdJumpInfo = 0;
- d->ActDecodePos = 0;
- d->FrameWasValid = 0;
- d->OverallFrames = 0;
- d->DecodedFrames = 0;
- d->LastValidSamples = 0;
- d->TrueGaplessPresent = 0;
- d->WordsRead = 0;
- d->Max_Band = 0;
- d->SampleRate = 0;
-// clips = 0;
- d->__r1 = 1;
- d->__r2 = 1;
-
- d->dword = 0;
- d->pos = 0;
- d->Zaehler = 0;
- d->WordsRead = 0;
- d->Max_Band = 0;
-
- mpc_decoder_initialisiere_quantisierungstabellen(d, 1.0f);
- mpc_decoder_init_huffman_sv6(d);
- mpc_decoder_init_huffman_sv7(d);
-}
-
-static void mpc_decoder_set_streaminfo(mpc_decoder *d, mpc_streaminfo *si)
-{
- mpc_decoder_reset_synthesis(d);
- mpc_decoder_reset_globals(d);
-
- d->StreamVersion = si->stream_version;
- d->MS_used = si->ms;
- d->Max_Band = si->max_band;
- d->OverallFrames = si->frames;
- d->MPCHeaderPos = si->header_position;
- d->LastValidSamples = si->last_frame_samples;
- d->TrueGaplessPresent = si->is_true_gapless;
- d->SampleRate = (mpc_int32_t)si->sample_freq;
-
- d->samples_to_skip = MPC_DECODER_SYNTH_DELAY;
-}
-
-mpc_bool_t mpc_decoder_initialize(mpc_decoder *d, mpc_streaminfo *si)
-{
- mpc_decoder_set_streaminfo(d, si);
-
- // AB: setting position to the beginning of the data-bitstream
- switch (d->StreamVersion) {
- case 0x04: f_seek(d, 4 + d->MPCHeaderPos); d->pos = 16; break; // Geht auch über eine der Helperfunktionen
- case 0x05:
- case 0x06: f_seek(d, 8 + d->MPCHeaderPos); d->pos = 0; break;
- case 0x07:
- case 0x17: /*f_seek ( 24 + d->MPCHeaderPos );*/ d->pos = 8; break;
- default: return FALSE;
- }
-
- // AB: fill buffer and initialize decoder
- f_read_dword(d, d->Speicher, MEMSIZE );
- d->dword = d->Speicher[d->Zaehler = 0];
-
- return TRUE;
-}
-
-//---------------------------------------------------------------
-// will seek from the beginning of the file to the desired
-// position in ms (given by seek_needed)
-//---------------------------------------------------------------
-#if 0
-static void
-helper1(mpc_decoder *d, mpc_uint32_t bitpos)
-{
- f_seek(d, (bitpos >> 5) * 4 + d->MPCHeaderPos);
- f_read_dword(d, d->Speicher, 2);
- d->dword = d->Speicher[d->Zaehler = 0];
- d->pos = bitpos & 31;
-}
-#endif
-
-static void
-helper2(mpc_decoder *d, mpc_uint32_t bitpos)
-{
- f_seek(d, (bitpos>>5) * 4 + d->MPCHeaderPos);
- f_read_dword(d, d->Speicher, MEMSIZE);
- d->dword = d->Speicher[d->Zaehler = 0];
- d->pos = bitpos & 31;
-}
-
-#if 0
-static void
-helper3(mpc_decoder *d, mpc_uint32_t bitpos, mpc_uint32_t* buffoffs)
-{
- d->pos = bitpos & 31;
- bitpos >>= 5;
- if ((mpc_uint32_t)(bitpos - *buffoffs) >= MEMSIZE - 2) {
- *buffoffs = bitpos;
- f_seek(d, bitpos * 4L + d->MPCHeaderPos);
- f_read_dword(d, d->Speicher, MEMSIZE );
- }
- d->dword = d->Speicher[d->Zaehler = bitpos - *buffoffs ];
-}
-#endif
-
-static mpc_uint32_t get_initial_fpos(mpc_decoder *d, mpc_uint32_t StreamVersion)
-{
- mpc_uint32_t fpos = 0;
- switch ( d->StreamVersion ) { // setting position to the beginning of the data-bitstream
- case 0x04: fpos = 48; break;
- case 0x05:
- case 0x06: fpos = 64; break;
- case 0x07:
- case 0x17: fpos = 200; break;
- }
- return fpos;
-}
-
-mpc_bool_t mpc_decoder_seek_seconds(mpc_decoder *d, double seconds)
-{
- return mpc_decoder_seek_sample(d, (mpc_int64_t)(seconds * (double)d->SampleRate + 0.5));
-}
-
-mpc_bool_t mpc_decoder_seek_sample(mpc_decoder *d, mpc_int64_t destsample)
-{
- mpc_uint32_t fpos;
- mpc_uint32_t fwd;
-
- fwd = (mpc_uint32_t) (destsample / MPC_FRAME_LENGTH);
- d->samples_to_skip = MPC_DECODER_SYNTH_DELAY + (mpc_uint32_t)(destsample % MPC_FRAME_LENGTH);
-
- memset(d->Y_L , 0, sizeof d->Y_L );
- memset(d->Y_R , 0, sizeof d->Y_R );
- memset(d->SCF_Index_L , 0, sizeof d->SCF_Index_L );
- memset(d->SCF_Index_R , 0, sizeof d->SCF_Index_R );
- memset(d->Res_L , 0, sizeof d->Res_L );
- memset(d->Res_R , 0, sizeof d->Res_R );
- memset(d->SCFI_L , 0, sizeof d->SCFI_L );
- memset(d->SCFI_R , 0, sizeof d->SCFI_R );
- memset(d->DSCF_Flag_L , 0, sizeof d->DSCF_Flag_L );
- memset(d->DSCF_Flag_R , 0, sizeof d->DSCF_Flag_R );
- memset(d->DSCF_Reference_L, 0, sizeof d->DSCF_Reference_L );
- memset(d->DSCF_Reference_R, 0, sizeof d->DSCF_Reference_R );
- memset(d->Q , 0, sizeof d->Q );
- memset(d->MS_Flag , 0, sizeof d->MS_Flag );
-
- // resetting synthesis filter to avoid "clicks"
- mpc_decoder_reset_synthesis(d);
-
- // prevent from desired position out of allowed range
- fwd = fwd < d->OverallFrames ? fwd : d->OverallFrames;
-
- // reset number of decoded frames
- d->DecodedFrames = 0;
-
- fpos = get_initial_fpos(d, d->StreamVersion);
- if (fpos == 0) {
- return FALSE;
- }
-
- helper2(d, fpos);
-
- // read the last 32 frames before the desired position to scan the scalefactors (artifactless jumping)
- for ( ; d->DecodedFrames < fwd; d->DecodedFrames++ ) {
- mpc_uint32_t FrameBitCnt;
- mpc_uint32_t RING;
- RING = d->Zaehler;
- d->FwdJumpInfo = mpc_decoder_bitstream_read(d, 20); // read jump-info
- d->ActDecodePos = (d->Zaehler << 5) + d->pos;
- FrameBitCnt = mpc_decoder_bits_read(d); // scanning the scalefactors and check for validity of frame
- if (d->StreamVersion >= 7) {
- mpc_decoder_read_bitstream_sv7(d);
- }
- else {
- mpc_decoder_read_bitstream_sv6(d);
- }
- if (mpc_decoder_bits_read(d) - FrameBitCnt != d->FwdJumpInfo ) {
- // Box ("Bug in perform_jump");
- return FALSE;
- }
- // update buffer
- if ((RING ^ d->Zaehler) & MEMSIZE2) {
- f_read_dword(d, d->Speicher + (RING & MEMSIZE2), MEMSIZE2);
- }
- }
-
- // LastBitsRead = BitsRead ();
- // LastFrame = d->DecodedFrames;
-
- return TRUE;
-}
-
-void mpc_decoder_update_buffer(mpc_decoder *d, mpc_uint32_t RING)
-{
- if ((RING ^ d->Zaehler) & MEMSIZE2 ) {
- // update buffer
- f_read_dword(d, d->Speicher + (RING & MEMSIZE2), MEMSIZE2);
- }
-}
-
-
diff --git a/src/libmusepack/mpc_reader.c b/src/libmusepack/mpc_reader.c
deleted file mode 100644
index 5ed913698..000000000
--- a/src/libmusepack/mpc_reader.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- Copyright (c) 2004, The Musepack Development Team
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are
- met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
-
- * Neither the name of the The Musepack Development Team nor the
- names of its contributors may be used to endorse or promote
- products derived from this software without specific prior
- written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/// \file mpc_reader.c
-/// Contains implementations for simple file-based mpc_reader
-
-#include "musepack/musepack.h"
-
-/// mpc_reader callback implementations
-static mpc_int32_t
-read_impl(void *data, void *ptr, mpc_int32_t size)
-{
- mpc_reader *d = (mpc_reader *) data;
-
- return fread(ptr, 1, size, d->file);
-}
-
-static mpc_bool_t
-seek_impl(void *data, int offset)
-{
- mpc_reader *d = (mpc_reader *) data;
-
- return d->is_seekable ? !fseek(d->file, offset, SEEK_SET) : FALSE;
-}
-
-static mpc_int32_t
-tell_impl(void *data)
-{
- mpc_reader *d = (mpc_reader *) data;
-
- return ftell(d->file);
-}
-
-static mpc_int32_t
-get_size_impl(void *data)
-{
- mpc_reader *d = (mpc_reader *) data;
-
- return d->file_size;
-}
-
-static mpc_bool_t
-canseek_impl(void *data)
-{
- mpc_reader *d = (mpc_reader *) data;
-
- return d->is_seekable;
-}
-
-void
-mpc_reader_setup_file_reader(mpc_reader *reader, FILE *input)
-{
- reader->seek = seek_impl;
- reader->read = read_impl;
- reader->tell = tell_impl;
- reader->get_size = get_size_impl;
- reader->canseek = canseek_impl;
- reader->data = reader; // point back to ourselves
-
- reader->file = input;
- reader->is_seekable = TRUE;
- fseek(reader->file, 0, SEEK_END);
- reader->file_size = ftell(reader->file);
- fseek(reader->file, 0, SEEK_SET);
-}
diff --git a/src/libmusepack/musepack/Makefile.am b/src/libmusepack/musepack/Makefile.am
deleted file mode 100644
index 1d37e1d79..000000000
--- a/src/libmusepack/musepack/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-include $(top_srcdir)/misc/Makefile.common
-
-noinst_HEADERS = config_types.h decoder.h huffman.h internal.h math.h \
- musepack.h reader.h requant.h streaminfo.h
-
diff --git a/src/libmusepack/musepack/config_types.h b/src/libmusepack/musepack/config_types.h
deleted file mode 100644
index f501f5a38..000000000
--- a/src/libmusepack/musepack/config_types.h
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef __CONFIG_TYPES_H__
-#define __CONFIG_TYPES_H__
-
-#include "os_types.h"
-
-#ifdef WORDS_BIGENDIAN
- #undef MPC_LITTLE_ENDIAN
-#else
- #define MPC_LITTLE_ENDIAN
-#endif
-
-typedef unsigned char mpc_bool_t;
-#define TRUE 1
-#define FALSE 0
-
-/* these are filled in by configure */
-typedef int16_t mpc_int16_t;
-typedef uint16_t mpc_uint16_t;
-typedef int32_t mpc_int32_t;
-typedef uint32_t mpc_uint32_t;
-typedef int64_t mpc_int64_t;
-
-#endif
diff --git a/src/libmusepack/musepack/decoder.h b/src/libmusepack/musepack/decoder.h
deleted file mode 100644
index 08c316390..000000000
--- a/src/libmusepack/musepack/decoder.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/// \file decoder.h
-
-#ifndef _musepack_decoder_h_
-#define _musepack_decoder_h_
-
-#include "musepack/huffman.h"
-#include "musepack/math.h"
-#include "musepack/musepack.h"
-#include "musepack/reader.h"
-#include "musepack/streaminfo.h"
-
-enum {
- MPC_V_MEM = 2304,
- MPC_DECODER_MEMSIZE = 16384, // overall buffer size
-};
-
-typedef struct {
- mpc_int32_t L [36];
- mpc_int32_t R [36];
-} QuantTyp;
-
-typedef struct mpc_decoder_t {
- mpc_reader *r;
-
- /// @name internal state variables
- //@{
-
- mpc_uint32_t dword; /// actually decoded 32bit-word
- mpc_uint32_t pos; /// bit-position within dword
- mpc_uint32_t Speicher[MPC_DECODER_MEMSIZE]; /// read-buffer
- mpc_uint32_t Zaehler; /// actual index within read-buffer
-
- mpc_uint32_t samples_to_skip;
-
- mpc_uint32_t FwdJumpInfo;
- mpc_uint32_t ActDecodePos;
- mpc_uint32_t FrameWasValid;
-
- mpc_uint32_t DecodedFrames;
- mpc_uint32_t OverallFrames;
- mpc_int32_t SampleRate; // Sample frequency
-
- mpc_uint32_t StreamVersion; // version of bitstream
- mpc_uint32_t MS_used; // MS-coding used ?
- mpc_int32_t Max_Band;
- mpc_uint32_t MPCHeaderPos; // AB: needed to support ID3v2
- mpc_uint32_t LastValidSamples;
- mpc_uint32_t TrueGaplessPresent;
-
- mpc_uint32_t EQ_activated;
-
- mpc_uint32_t WordsRead; // counts amount of decoded dwords
-
- // randomizer state variables
- mpc_uint32_t __r1;
- mpc_uint32_t __r2;
-
- mpc_uint32_t Q_bit [32];
- mpc_uint32_t Q_res [32][16];
-
- // huffman table stuff
- HuffmanTyp HuffHdr [10];
- HuffmanTyp HuffSCFI [ 4];
- HuffmanTyp HuffDSCF [16];
- HuffmanTyp* HuffQ [2] [8];
-
- HuffmanTyp HuffQ1 [2] [3*3*3];
- HuffmanTyp HuffQ2 [2] [5*5];
- HuffmanTyp HuffQ3 [2] [ 7];
- HuffmanTyp HuffQ4 [2] [ 9];
- HuffmanTyp HuffQ5 [2] [15];
- HuffmanTyp HuffQ6 [2] [31];
- HuffmanTyp HuffQ7 [2] [63];
- const HuffmanTyp* SampleHuff [18];
- HuffmanTyp SCFI_Bundle [ 8];
- HuffmanTyp DSCF_Entropie [13];
- HuffmanTyp Region_A [16];
- HuffmanTyp Region_B [ 8];
- HuffmanTyp Region_C [ 4];
-
- HuffmanTyp Entropie_1 [ 3];
- HuffmanTyp Entropie_2 [ 5];
- HuffmanTyp Entropie_3 [ 7];
- HuffmanTyp Entropie_4 [ 9];
- HuffmanTyp Entropie_5 [15];
- HuffmanTyp Entropie_6 [31];
- HuffmanTyp Entropie_7 [63];
-
- mpc_int32_t SCF_Index_L [32] [3];
- mpc_int32_t SCF_Index_R [32] [3]; // holds scalefactor-indices
- QuantTyp Q [32]; // holds quantized samples
- mpc_int32_t Res_L [32];
- mpc_int32_t Res_R [32]; // holds the chosen quantizer for each subband
- mpc_int32_t DSCF_Flag_L [32];
- mpc_int32_t DSCF_Flag_R [32]; // differential SCF used?
- mpc_int32_t SCFI_L [32];
- mpc_int32_t SCFI_R [32]; // describes order of transmitted SCF
- mpc_int32_t DSCF_Reference_L [32];
- mpc_int32_t DSCF_Reference_R [32]; // holds last frames SCF
- mpc_int32_t MS_Flag[32]; // MS used?
-#ifdef MPC_FIXED_POINT
- unsigned char SCF_shift[256];
-#endif
-
- MPC_SAMPLE_FORMAT V_L[MPC_V_MEM + 960];
- MPC_SAMPLE_FORMAT V_R[MPC_V_MEM + 960];
- MPC_SAMPLE_FORMAT Y_L[36][32];
- MPC_SAMPLE_FORMAT Y_R[36][32];
- MPC_SAMPLE_FORMAT SCF[256]; ///< holds adapted scalefactors (for clipping prevention)
- //@}
-
-} mpc_decoder;
-
-#endif // _mpc_decoder_h
diff --git a/src/libmusepack/musepack/huffman.h b/src/libmusepack/musepack/huffman.h
deleted file mode 100644
index 7f587771f..000000000
--- a/src/libmusepack/musepack/huffman.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/// \file huffman.h
-/// Data structures and functions for huffman coding.
-
-#ifndef _musepack_huffman_h_
-#define _musepack_huffman_h_
-
-#include "musepack/config_types.h"
-#include "musepack/decoder.h"
-
-struct mpc_decoder_t; // forward declare to break circular dependencies
-
-/// Huffman table entry.
-typedef struct huffman_type_t {
- mpc_uint32_t Code;
- mpc_uint32_t Length;
- mpc_int32_t Value;
-} HuffmanTyp;
-
-//! \brief Sorts huffman-tables by codeword.
-//!
-//! offset resulting value.
-//! \param elements
-//! \param Table table to sort
-//! \param offset offset of resulting sort
-void
-mpc_decoder_resort_huff_tables(
- const mpc_uint32_t elements, HuffmanTyp *Table, const mpc_int32_t offset);
-
-/// Initializes sv6 huffman decoding structures.
-void mpc_decoder_init_huffman_sv6(struct mpc_decoder_t *d);
-
-/// Initializes sv6 huffman decoding tables.
-void mpc_decoder_init_huffman_sv6_tables(struct mpc_decoder_t *d);
-
-/// Initializes sv7 huffman decoding structures.
-void mpc_decoder_init_huffman_sv7(struct mpc_decoder_t *d);
-
-/// Initializes sv7 huffman decoding tables.
-void mpc_decoder_init_huffman_sv7_tables(struct mpc_decoder_t *d);
-
-#endif // _musepack_huffman_h_
diff --git a/src/libmusepack/musepack/internal.h b/src/libmusepack/musepack/internal.h
deleted file mode 100644
index f86b45bb3..000000000
--- a/src/libmusepack/musepack/internal.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/// \file musepack_internal.h
-/// Definitions and structures used only internally by the libmusepack.
-
-#ifndef _musepack_internal_h
-#define _musepack_internal_h
-
-enum {
- MPC_DECODER_SYNTH_DELAY = 481
-};
-
-#ifndef swap32
-/// Big/little endian 32 bit byte swapping routine.
-static inline
-mpc_uint32_t swap32(mpc_uint32_t val) {
- const unsigned char* src = (const unsigned char*)&val;
- return
- (mpc_uint32_t)src[0] |
- ((mpc_uint32_t)src[1] << 8) | ((mpc_uint32_t)src[2] << 16) | ((mpc_uint32_t)src[3] << 24);
-}
-#endif
-
-/// Searches for a ID3v2-tag and reads the length (in bytes) of it.
-/// \param reader supplying raw stream data
-/// \return size of tag, in bytes
-/// \return -1 on errors of any kind
-mpc_int32_t JumpID3v2(mpc_reader* fp);
-
-/// helper functions used by multiple files
-mpc_uint32_t random_int(mpc_decoder *d); // in synth_filter.c
-void mpc_decoder_initialisiere_quantisierungstabellen(mpc_decoder *d, double scale_factor);
-void mpc_decoder_synthese_filter_float(mpc_decoder *d, MPC_SAMPLE_FORMAT* OutData);
-
-#endif // _musepack_internal_h
-
diff --git a/src/libmusepack/musepack/math.h b/src/libmusepack/musepack/math.h
deleted file mode 100644
index f3d52c504..000000000
--- a/src/libmusepack/musepack/math.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/// \file mpc_math.h
-/// Libmusepack internal math routines.
-
-#ifndef _musepack_math_h_
-#define _musepack_math_h_
-
-//#define MPC_FIXED_POINT
-
-#define MPC_FIXED_POINT_SHIFT 16
-
-#ifdef MPC_FIXED_POINT
-
-
-#ifdef _WIN32_WCE
-
-#include <cmnintrin.h>
-
-#define MPC_HAVE_MULHIGH
-
-#endif
-
-
-#define MPC_FIXED_POINT_SCALE_SHIFT (MPC_FIXED_POINT_SHIFT + MPC_FIXED_POINT_FRACTPART)
-#define MPC_FIXED_POINT_SCALE (1 << (MPC_FIXED_POINT_SCALE_SHIFT - 1))
-
-
-//in fixedpoint mode, results in decode output buffer are in -MPC_FIXED_POINT_SCALE ... MPC_FIXED_POINT_SCALE range
-
-#define MPC_FIXED_POINT_FRACTPART 14
-typedef mpc_int32_t MPC_SAMPLE_FORMAT;
-
-typedef mpc_int64_t MPC_SAMPLE_FORMAT_MULTIPLY;
-
-#define MAKE_MPC_SAMPLE(X) (MPC_SAMPLE_FORMAT)((double)(X) * (double)(((mpc_int64_t)1)<<MPC_FIXED_POINT_FRACTPART))
-#define MAKE_MPC_SAMPLE_EX(X,Y) (MPC_SAMPLE_FORMAT)((double)(X) * (double)(((mpc_int64_t)1)<<(Y)))
-
-#define MPC_MULTIPLY_NOTRUNCATE(X,Y) \
- (((MPC_SAMPLE_FORMAT_MULTIPLY)(X) * (MPC_SAMPLE_FORMAT_MULTIPLY)(Y)) >> MPC_FIXED_POINT_FRACTPART)
-
-#define MPC_MULTIPLY_EX_NOTRUNCATE(X,Y,Z) \
- (((MPC_SAMPLE_FORMAT_MULTIPLY)(X) * (MPC_SAMPLE_FORMAT_MULTIPLY)(Y)) >> (Z))
-
-#ifdef _DEBUG
-static inline MPC_SAMPLE_FORMAT MPC_MULTIPLY(MPC_SAMPLE_FORMAT item1,MPC_SAMPLE_FORMAT item2)
-{
- MPC_SAMPLE_FORMAT_MULTIPLY temp = MPC_MULTIPLY_NOTRUNCATE(item1,item2);
- assert(temp == (MPC_SAMPLE_FORMAT_MULTIPLY)(MPC_SAMPLE_FORMAT)temp);
- return (MPC_SAMPLE_FORMAT)temp;
-}
-
-static inline MPC_SAMPLE_FORMAT MPC_MULTIPLY_EX(MPC_SAMPLE_FORMAT item1,MPC_SAMPLE_FORMAT item2,unsigned shift)
-{
- MPC_SAMPLE_FORMAT_MULTIPLY temp = MPC_MULTIPLY_EX_NOTRUNCATE(item1,item2,shift);
- assert(temp == (MPC_SAMPLE_FORMAT_MULTIPLY)(MPC_SAMPLE_FORMAT)temp);
- return (MPC_SAMPLE_FORMAT)temp;
-}
-
-#else
-
-#define MPC_MULTIPLY(X,Y) ((MPC_SAMPLE_FORMAT)MPC_MULTIPLY_NOTRUNCATE(X,Y))
-#define MPC_MULTIPLY_EX(X,Y,Z) ((MPC_SAMPLE_FORMAT)MPC_MULTIPLY_EX_NOTRUNCATE(X,Y,Z))
-
-#endif
-
-#ifdef MPC_HAVE_MULHIGH
-#define MPC_MULTIPLY_FRACT(X,Y) _MulHigh(X,Y)
-#else
-#define MPC_MULTIPLY_FRACT(X,Y) MPC_MULTIPLY_EX(X,Y,32)
-#endif
-
-#define MPC_MAKE_FRACT_CONST(X) (MPC_SAMPLE_FORMAT)((X) * (double)(((mpc_int64_t)1)<<32) )
-#define MPC_MULTIPLY_FRACT_CONST(X,Y) MPC_MULTIPLY_FRACT(X,MPC_MAKE_FRACT_CONST(Y))
-#define MPC_MULTIPLY_FRACT_CONST_FIX(X,Y,Z) ( MPC_MULTIPLY_FRACT(X,MPC_MAKE_FRACT_CONST( Y / (1<<(Z)) )) << (Z) )
-#define MPC_MULTIPLY_FRACT_CONST_SHR(X,Y,Z) MPC_MULTIPLY_FRACT(X,MPC_MAKE_FRACT_CONST( Y / (1<<(Z)) ))
-
-#define MPC_MULTIPLY_FLOAT_INT(X,Y) ((X)*(Y))
-#define MPC_SCALE_CONST(X,Y,Z) MPC_MULTIPLY_EX(X,MAKE_MPC_SAMPLE_EX(Y,Z),(Z))
-#define MPC_SCALE_CONST_SHL(X,Y,Z,S) MPC_MULTIPLY_EX(X,MAKE_MPC_SAMPLE_EX(Y,Z),(Z)-(S))
-#define MPC_SCALE_CONST_SHR(X,Y,Z,S) MPC_MULTIPLY_EX(X,MAKE_MPC_SAMPLE_EX(Y,Z),(Z)+(S))
-#define MPC_SHR(X,Y) ((X)>>(Y))
-#define MPC_SHL(X,Y) ((X)<<(Y))
-
-#else
-
-//in floating-point mode, decoded samples are in -1...1 range
-
-typedef float MPC_SAMPLE_FORMAT;
-
-#define MAKE_MPC_SAMPLE(X) ((MPC_SAMPLE_FORMAT)(X))
-#define MAKE_MPC_SAMPLE_EX(X,Y) ((MPC_SAMPLE_FORMAT)(X))
-
-#define MPC_MULTIPLY_FRACT(X,Y) ((X)*(Y))
-#define MPC_MAKE_FRACT_CONST(X) (X)
-#define MPC_MULTIPLY_FRACT_CONST(X,Y) MPC_MULTPLY_FRACT(X,MPC_MAKE_FRACT_CONST(Y))
-#define MPC_MULTIPLY_FRACT_CONST_SHR(X,Y,Z) MPC_MULTIPLY_FRACT(X,MPC_MAKE_FRACT_CONST( Y ))
-#define MPC_MULTIPLY_FRACT_CONST_FIX(X,Y,Z) MPC_MULTIPLY_FRACT(X,MPC_MAKE_FRACT_CONST( Y ))
-
-#define MPC_MULTIPLY_FLOAT_INT(X,Y) ((X)*(Y))
-#define MPC_MULTIPLY(X,Y) ((X)*(Y))
-#define MPC_MULTIPLY_EX(X,Y,Z) ((X)*(Y))
-#define MPC_SCALE_CONST(X,Y,Z) ((X)*(Y))
-#define MPC_SCALE_CONST_SHL(X,Y,Z,S) ((X)*(Y))
-#define MPC_SCALE_CONST_SHR(X,Y,Z,S) ((X)*(Y))
-#define MPC_SHR(X,Y) (X)
-#define MPC_SHL(X,Y) (X)
-
-#endif
-
-#endif // _musepack_math_h_
-
diff --git a/src/libmusepack/musepack/musepack.h b/src/libmusepack/musepack/musepack.h
deleted file mode 100644
index dfbf0a36d..000000000
--- a/src/libmusepack/musepack/musepack.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/// \file musepack.h
-/// Top level include file for libmusepack.
-
-#ifndef _musepack_h_
-#define _musepack_h_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#include "musepack/config_types.h"
-#include "musepack/decoder.h"
-#include "musepack/math.h"
-#include "musepack/reader.h"
-#include "musepack/streaminfo.h"
-
-enum {
- MPC_FRAME_LENGTH = (36 * 32), /// samples per mpc frame
- MPC_DECODER_BUFFER_LENGTH = 4 * MPC_FRAME_LENGTH /// required buffer size for decoder
-};
-
-// error codes
-#define ERROR_CODE_OK 0
-#define ERROR_CODE_FILE -1
-#define ERROR_CODE_SV7BETA 1
-#define ERROR_CODE_CBR 2
-#define ERROR_CODE_IS 3
-#define ERROR_CODE_BLOCKSIZE 4
-#define ERROR_CODE_INVALIDSV 5
-
-/// Initializes a streaminfo structure.
-/// \param si streaminfo structure to initialize
-void mpc_streaminfo_init(mpc_streaminfo *si);
-
-/// Reads streaminfo header from the mpc stream supplied by r.
-/// \param si streaminfo pointer to which info will be written
-/// \param r stream reader to supply raw data
-/// \return error code
-mpc_int32_t mpc_streaminfo_read(mpc_streaminfo *si, mpc_reader *r);
-
-/// Gets length of stream si, in seconds.
-/// \return length of stream in seconds
-double mpc_streaminfo_get_length(mpc_streaminfo *si);
-
-/// Returns length of stream si, in samples.
-/// \return length of stream in samples
-mpc_int64_t mpc_streaminfo_get_length_samples(mpc_streaminfo *si);
-
-/// Sets up decoder library.
-/// Call this first when preparing to decode an mpc stream.
-/// \param r reader that will supply raw data to the decoder
-void mpc_decoder_setup(mpc_decoder *d, mpc_reader *r);
-
-/// Initializes mpc decoder with the supplied stream info parameters.
-/// Call this next after calling mpc_decoder_setup.
-/// \param si streaminfo structure indicating format of source stream
-/// \return TRUE if decoder was initalized successfully, FALSE otherwise
-mpc_bool_t mpc_decoder_initialize(mpc_decoder *d, mpc_streaminfo *si);
-
-/// Sets decoder sample scaling factor. All decoded samples will be multiplied
-/// by this factor.
-/// \param scale_factor multiplicative scaling factor
-void mpc_decoder_scale_output(mpc_decoder *d, double scale_factor);
-
-/// Actually reads data from previously initialized stream. Call
-/// this iteratively to decode the mpc stream.
-/// \param buffer destination buffer for decoded samples
-/// \param vbr_update_acc \todo document me
-/// \param vbr_update_bits \todo document me
-/// \return -1 if an error is encountered
-/// \return 0 if the stream has been completely decoded successfully and there are no more samples
-/// \return > 0 to indicate the number of bytes that were actually read from the stream.
-mpc_uint32_t mpc_decoder_decode(
- mpc_decoder *d,
- MPC_SAMPLE_FORMAT *buffer,
- mpc_uint32_t *vbr_update_acc,
- mpc_uint32_t *vbr_update_bits);
-
-/// Seeks to the specified sample in the source stream.
-mpc_bool_t mpc_decoder_seek_sample(mpc_decoder *d, mpc_int64_t destsample);
-
-/// Seeks to specified position in seconds in the source stream.
-mpc_bool_t mpc_decoder_seek_seconds(mpc_decoder *d, double seconds);
-
-#ifdef __cplusplus
-}
-#endif // __cplusplus
-
-#endif // _musepack_h_
diff --git a/src/libmusepack/musepack/reader.h b/src/libmusepack/musepack/reader.h
deleted file mode 100644
index 2f29f97e4..000000000
--- a/src/libmusepack/musepack/reader.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/// \file reader.h
-
-#ifndef _musepack_reader_h_
-#define _musepack_reader_h_
-
-/// \brief Stream reader interface structure.
-///
-/// This is the structure you must supply to the musepack decoding library
-/// to feed it with raw data. Implement the five member functions to provide
-/// a functional reader.
-typedef struct mpc_reader_t {
- /// Reads size bytes of data into buffer at ptr.
- mpc_int32_t (*read)(void *t, void *ptr, mpc_int32_t size);
-
- /// Seeks to byte position offset.
- mpc_bool_t (*seek)(void *t, mpc_int32_t offset);
-
- /// Returns the current byte offset in the stream.
- mpc_int32_t (*tell)(void *t);
-
- /// Returns the total length of the source stream, in bytes.
- mpc_int32_t (*get_size)(void *t);
-
- /// True if the stream is a seekable stream.
- mpc_bool_t (*canseek)(void *t);
-
- /// Optional field that can be used to identify a particular instance of
- /// reader or carry along data associated with that reader.
- void *data;
-
- // These are used by provided internal standard file-based reader implementation.
- // You shouldn't touch them. They're included in the main struct to avoid
- // malloc/free.
- FILE *file;
- long file_size;
- mpc_bool_t is_seekable;
-} mpc_reader;
-
-/// Initializes reader with default stdio file reader implementation. Use
-/// this if you're just reading from a plain file.
-///
-/// \param r reader struct to initalize
-/// \param input input stream to attach to the reader
-void mpc_reader_setup_file_reader(mpc_reader *r, FILE *input);
-
-#endif // _musepack_reader_h_
diff --git a/src/libmusepack/musepack/requant.h b/src/libmusepack/musepack/requant.h
deleted file mode 100644
index dc9a5c32f..000000000
--- a/src/libmusepack/musepack/requant.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/// \file requant.h
-/// Requantization function definitions.
-
-#ifndef _musepack_requant_h
-#define _musepack_requant_h_
-
-#include "musepack/musepack.h"
-
-/* C O N S T A N T S */
-extern const mpc_uint32_t Res_bit [18]; // bits per sample for chosen quantizer
-extern const MPC_SAMPLE_FORMAT __Cc [1 + 18]; // coefficients for requantization
-extern const mpc_int32_t __Dc [1 + 18]; // offset for requantization
-
-#define Cc (__Cc + 1)
-#define Dc (__Dc + 1)
-
-#endif // _musepack_requant_h_
diff --git a/src/libmusepack/musepack/streaminfo.h b/src/libmusepack/musepack/streaminfo.h
deleted file mode 100644
index dc8e77c22..000000000
--- a/src/libmusepack/musepack/streaminfo.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/// \file streaminfo.h
-
-#ifndef _musepack_streaminfo_h_
-#define _musepack_streaminfo_h_
-
-typedef mpc_int32_t mpc_streaminfo_off_t;
-
-/// \brief mpc stream properties structure
-///
-/// Structure containing all the properties of an mpc stream. Populated
-/// by the streaminfo_read function.
-typedef struct mpc_streaminfo {
- /// @name core mpc stream properties
- //@{
- mpc_uint32_t sample_freq; ///< sample frequency of stream
- mpc_uint32_t channels; ///< number of channels in stream
- mpc_streaminfo_off_t header_position; ///< byte offset of position of header in stream
- mpc_uint32_t stream_version; ///< streamversion of stream
- mpc_uint32_t bitrate; ///< bitrate of stream file (in bps)
- double average_bitrate; ///< average bitrate of stream (in bits/sec)
- mpc_uint32_t frames; ///< number of frames in stream
- mpc_int64_t pcm_samples;
- mpc_uint32_t max_band; ///< maximum band-index used in stream (0...31)
- mpc_uint32_t is; ///< intensity stereo (0: off, 1: on)
- mpc_uint32_t ms; ///< mid/side stereo (0: off, 1: on)
- mpc_uint32_t block_size; ///< only needed for SV4...SV6 -> not supported
- mpc_uint32_t profile; ///< quality profile of stream
- const char* profile_name; ///< name of profile used by stream
- //@}
-
- /// @name replaygain related fields
- //@{
- mpc_int16_t gain_title; ///< replaygain title value
- mpc_int16_t gain_album; ///< replaygain album value
- mpc_uint16_t peak_album; ///< peak album loudness level
- mpc_uint16_t peak_title; ///< peak title loudness level
- //@}
-
- /// @name true gapless support data
- //@{
- mpc_uint32_t is_true_gapless; ///< true gapless? (0: no, 1: yes)
- mpc_uint32_t last_frame_samples; ///< number of valid samples within last frame
-
- mpc_uint32_t encoder_version; ///< version of encoder used
- char encoder[256]; ///< encoder name
-
- mpc_streaminfo_off_t tag_offset; ///< offset to file tags
- mpc_streaminfo_off_t total_file_length; ///< total length of underlying file
- //@}
-} mpc_streaminfo;
-
-#endif // _musepack_streaminfo_h_
diff --git a/src/libmusepack/requant.c b/src/libmusepack/requant.c
deleted file mode 100644
index d318d0bd0..000000000
--- a/src/libmusepack/requant.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- Copyright (c) 2004, The Musepack Development Team
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are
- met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
-
- * Neither the name of the The Musepack Development Team nor the
- names of its contributors may be used to endorse or promote
- products derived from this software without specific prior
- written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/// \file requant.c
-/// Requantization function implementations.
-/// \todo document me
-
-#include "musepack/musepack.h"
-#include "musepack/internal.h"
-
-/* C O N S T A N T S */
-// bits per sample for chosen quantizer
-const mpc_uint32_t Res_bit [18] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
-};
-
-// coefficients for requantization
-// 65536/step bzw. 65536/(2*D+1)
-
-#define _(X) MAKE_MPC_SAMPLE_EX(X,14)
-
-const MPC_SAMPLE_FORMAT __Cc [1 + 18] = {
- _(111.285962475327f), // 32768/2/255*sqrt(3)
- _(65536.000000000000f), _(21845.333333333332f), _(13107.200000000001f), _(9362.285714285713f),
- _(7281.777777777777f), _(4369.066666666666f), _(2114.064516129032f), _(1040.253968253968f),
- _(516.031496062992f), _(257.003921568627f), _(128.250489236790f), _(64.062561094819f),
- _(32.015632633121f), _(16.003907203907f), _(8.000976681723f), _(4.000244155527f),
- _(2.000061037018f), _(1.000015259021f)
-};
-
-#undef _
-
-// offset for requantization
-// 2*D+1 = steps of quantizer
-const mpc_int32_t __Dc [1 + 18] = {
- 2,
- 0, 1, 2, 3, 4, 7, 15, 31, 63,
- 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767
-};
-
-#ifdef MPC_FIXED_POINT
-static mpc_uint32_t find_shift(double fval)
-{
- mpc_int64_t val = (mpc_int64_t)fval;
- if (val<0) val = -val;
- mpc_uint32_t ptr = 0;
- while(val) {val>>=1;ptr++;}
-
- return ptr > 31 ? 0 : 31 - ptr;
-}
-#endif
-
-/* F U N C T I O N S */
-
-#define SET_SCF(N,X) d->SCF[N] = MAKE_MPC_SAMPLE_EX(X,SCF_shift[N] = (unsigned char)find_shift(X));
-
-void
-mpc_decoder_scale_output(mpc_decoder *d, double factor)
-{
- mpc_int32_t n;
- double f1;
- double f2;
-#ifndef MPC_FIXED_POINT
- factor *= 1.0 / (double)(1<<(MPC_FIXED_POINT_SHIFT-1));
-#else
- factor *= 1.0 / (double)(1<<(16 - MPC_FIXED_POINT_SHIFT));
-#endif
- f1 = f2 = factor;
-
- // handles +1.58...-98.41 dB, where's scf[n] / scf[n-1] = 1.20050805774840750476
-
- SET_SCF(1,factor);
-
- f1 *= 0.83298066476582673961;
- f2 *= 1/0.83298066476582673961;
-
- for ( n = 1; n <= 128; n++ ) {
- SET_SCF((unsigned char)(1+n),f1);
- SET_SCF((unsigned char)(1-n),f2);
- f1 *= 0.83298066476582673961;
- f2 *= 1/0.83298066476582673961;
- }
-}
-
-static void
-mpc_decoder_quantisierungsmodes(mpc_decoder *d) // conversion: index -> quantizer (bitstream reading)
-{ // conversion: quantizer -> index (bitstream writing)
- mpc_int32_t Band = 0;
- mpc_int32_t i;
-
- do {
- d->Q_bit [Band] = 4;
- for ( i = 0; i < 16-1; i++ )
- d->Q_res [Band] [i] = i;
- d->Q_res [Band][i] = 17;
- Band++;
- } while ( Band < 11 );
-
- do {
- d->Q_bit [Band] = 3;
- for ( i = 0; i < 8-1; i++ )
- d->Q_res [Band] [i] = i;
- d->Q_res [Band] [i] = 17;
- Band++;
- } while ( Band < 23 );
-
- do {
- d->Q_bit [Band] = 2;
- for ( i = 0; i < 4-1; i++ )
- d->Q_res [Band] [i] = i;
- d->Q_res [Band] [i] = 17;
- Band++;
- } while ( Band < 32 );
-}
-
-void
-mpc_decoder_initialisiere_quantisierungstabellen(mpc_decoder *d, double scale_factor)
-{
- mpc_decoder_quantisierungsmodes(d);
- mpc_decoder_scale_output(d, scale_factor);
-}
diff --git a/src/libmusepack/streaminfo.c b/src/libmusepack/streaminfo.c
deleted file mode 100644
index 2c6ff1c6f..000000000
--- a/src/libmusepack/streaminfo.c
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- Copyright (c) 2004, The Musepack Development Team
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are
- met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
-
- * Neither the name of the The Musepack Development Team nor the
- names of its contributors may be used to endorse or promote
- products derived from this software without specific prior
- written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/// \file streaminfo.c
-/// Implementation of streaminfo reading functions.
-
-#include "musepack/musepack.h"
-#include "musepack/internal.h"
-
-static const char *
-Stringify(mpc_uint32_t profile) // profile is 0...15, where 7...13 is used
-{
- static const char na[] = "n.a.";
- static const char *Names[] = {
- na, "'Unstable/Experimental'", na, na,
- na, "'quality 0'", "'quality 1'", "'Telephone'",
- "'Thumb'", "'Radio'", "'Standard'", "'Xtreme'",
- "'Insane'", "'BrainDead'", "'quality 9'", "'quality 10'"
- };
-
- return profile >= sizeof(Names) / sizeof(*Names) ? na : Names[profile];
-}
-
-void
-mpc_streaminfo_init(mpc_streaminfo * si)
-{
- memset(si, 0, sizeof(mpc_streaminfo));
-}
-
-// read information from SV8 header
-// not yet implemented
-static mpc_int32_t
-streaminfo_read_header_sv8(mpc_streaminfo * si, mpc_reader * fp)
-{
- return 0;
-}
-
-/// Reads streaminfo from SV7 header.
-static mpc_int32_t
-streaminfo_read_header_sv7(mpc_streaminfo * si, mpc_uint32_t HeaderData[8])
-{
- const mpc_int32_t samplefreqs[4] = { 44100, 48000, 37800, 32000 };
-
- //mpc_uint32_t HeaderData [8];
- mpc_uint16_t Estimatedpeak_title = 0;
-
- if (si->stream_version > 0x71) {
- // Update (si->stream_version);
- return 0;
- }
-
- /*
- if ( !fp->seek ( si->header_position ) ) // seek to header start
- return ERROR_CODE_FILE;
- if ( fp->read ( HeaderData, sizeof HeaderData) != sizeof HeaderData )
- return ERROR_CODE_FILE;
- */
-
- si->bitrate = 0;
- si->frames = HeaderData[1];
- si->is = 0;
- si->ms = (HeaderData[2] >> 30) & 0x0001;
- si->max_band = (HeaderData[2] >> 24) & 0x003F;
- si->block_size = 1;
- si->profile = (HeaderData[2] << 8) >> 28;
- si->profile_name = Stringify(si->profile);
- si->sample_freq = samplefreqs[(HeaderData[2] >> 16) & 0x0003];
- Estimatedpeak_title = (mpc_uint16_t) (HeaderData[2] & 0xFFFF); // read the ReplayGain data
- si->gain_title = (mpc_uint16_t) ((HeaderData[3] >> 16) & 0xFFFF);
- si->peak_title = (mpc_uint16_t) (HeaderData[3] & 0xFFFF);
- si->gain_album = (mpc_uint16_t) ((HeaderData[4] >> 16) & 0xFFFF);
- si->peak_album = (mpc_uint16_t) (HeaderData[4] & 0xFFFF);
- si->is_true_gapless = (HeaderData[5] >> 31) & 0x0001; // true gapless: used?
- si->last_frame_samples = (HeaderData[5] >> 20) & 0x07FF; // true gapless: valid samples for last frame
- si->encoder_version = (HeaderData[6] >> 24) & 0x00FF;
-
- if (si->encoder_version == 0) {
- sprintf(si->encoder, "Buschmann 1.7.0...9, Klemm 0.90...1.05");
- }
- else {
- switch (si->encoder_version % 10) {
- case 0:
- sprintf(si->encoder, "Release %u.%u", si->encoder_version / 100,
- si->encoder_version / 10 % 10);
- break;
- case 2:
- case 4:
- case 6:
- case 8:
- sprintf(si->encoder, "Beta %u.%02u", si->encoder_version / 100,
- si->encoder_version % 100);
- break;
- default:
- sprintf(si->encoder, "--Alpha-- %u.%02u",
- si->encoder_version / 100, si->encoder_version % 100);
- break;
- }
- }
-
- // if ( si->peak_title == 0 ) // there is no correct peak_title contained within header
- // si->peak_title = (mpc_uint16_t)(Estimatedpeak_title * 1.18);
- // if ( si->peak_album == 0 )
- // si->peak_album = si->peak_title; // no correct peak_album, use peak_title
-
- //si->sample_freq = 44100; // AB: used by all files up to SV7
- si->channels = 2;
-
- return ERROR_CODE_OK;
-}
-
-// read information from SV4-SV6 header
-static mpc_int32_t
-streaminfo_read_header_sv6(mpc_streaminfo * si, mpc_uint32_t HeaderData[8])
-{
- //mpc_uint32_t HeaderData [8];
-
- /*
- if ( !fp->seek ( si->header_position ) ) // seek to header start
- return ERROR_CODE_FILE;
- if ( fp->read ( HeaderData, sizeof HeaderData ) != sizeof HeaderData )
- return ERROR_CODE_FILE;
- */
-
- si->bitrate = (HeaderData[0] >> 23) & 0x01FF; // read the file-header (SV6 and below)
- si->is = (HeaderData[0] >> 22) & 0x0001;
- si->ms = (HeaderData[0] >> 21) & 0x0001;
- si->stream_version = (HeaderData[0] >> 11) & 0x03FF;
- si->max_band = (HeaderData[0] >> 6) & 0x001F;
- si->block_size = (HeaderData[0]) & 0x003F;
- si->profile = 0;
- si->profile_name = Stringify((mpc_uint32_t) (-1));
- if (si->stream_version >= 5)
- si->frames = HeaderData[1]; // 32 bit
- else
- si->frames = (HeaderData[1] >> 16); // 16 bit
-
- si->gain_title = 0; // not supported
- si->peak_title = 0;
- si->gain_album = 0;
- si->peak_album = 0;
-
- si->last_frame_samples = 0;
- si->is_true_gapless = 0;
-
- si->encoder_version = 0;
- si->encoder[0] = '\0';
-
- if (si->stream_version == 7)
- return ERROR_CODE_SV7BETA; // are there any unsupported parameters used?
- if (si->bitrate != 0)
- return ERROR_CODE_CBR;
- if (si->is != 0)
- return ERROR_CODE_IS;
- if (si->block_size != 1)
- return ERROR_CODE_BLOCKSIZE;
-
- if (si->stream_version < 6) // Bugfix: last frame was invalid for up to SV5
- si->frames -= 1;
-
- si->sample_freq = 44100; // AB: used by all files up to SV7
- si->channels = 2;
-
- if (si->stream_version < 4 || si->stream_version > 7)
- return ERROR_CODE_INVALIDSV;
-
- return ERROR_CODE_OK;
-}
-
-// reads file header and tags
-mpc_int32_t
-mpc_streaminfo_read(mpc_streaminfo * si, mpc_reader * r)
-{
- mpc_uint32_t HeaderData[8];
- mpc_int32_t Error = 0;
-
- // get header position
- if ((si->header_position = JumpID3v2(r)) < 0) {
- return ERROR_CODE_FILE;
- }
- // seek to first byte of mpc data
- if (!r->seek(r->data, si->header_position)) {
- return ERROR_CODE_FILE;
- }
- if (r->read(r->data, HeaderData, 8 * 4) != 8 * 4) {
- return ERROR_CODE_FILE;
- }
- if (!r->seek(r->data, si->header_position + 6 * 4)) {
- return ERROR_CODE_FILE;
- }
-
- si->total_file_length = r->get_size(r->data);
- si->tag_offset = si->total_file_length;
- if (memcmp(HeaderData, "MP+", 3) == 0) {
-#ifndef MPC_LITTLE_ENDIAN
- mpc_uint32_t ptr;
- for (ptr = 0; ptr < 8; ptr++) {
- HeaderData[ptr] = swap32(HeaderData[ptr]);
- }
-#endif
- si->stream_version = HeaderData[0] >> 24;
-
- // stream version 8
- if ((si->stream_version & 15) >= 8) {
- Error = streaminfo_read_header_sv8(si, r);
- }
- // stream version 7
- else if ((si->stream_version & 15) == 7) {
- Error = streaminfo_read_header_sv7(si, HeaderData);
- }
- }
- else {
- // stream version 4-6
- Error = streaminfo_read_header_sv6(si, HeaderData);
- }
-
- // estimation, exact value needs too much time
- si->pcm_samples = 1152 * si->frames - 576;
-
- if (si->pcm_samples > 0) {
- si->average_bitrate =
- (si->tag_offset -
- si->header_position) * 8.0 * si->sample_freq / si->pcm_samples;
- }
- else {
- si->average_bitrate = 0;
- }
-
- return Error;
-}
-
-double
-mpc_streaminfo_get_length(mpc_streaminfo * si)
-{
- return (double)mpc_streaminfo_get_length_samples(si) /
- (double)si->sample_freq;
-}
-
-mpc_int64_t
-mpc_streaminfo_get_length_samples(mpc_streaminfo * si)
-{
- mpc_int64_t samples = (mpc_int64_t) si->frames * MPC_FRAME_LENGTH;
- if (si->is_true_gapless) {
- samples -= (MPC_FRAME_LENGTH - si->last_frame_samples);
- }
- else {
- samples -= MPC_DECODER_SYNTH_DELAY;
- }
- return samples;
-}
diff --git a/src/libmusepack/synth_filter.c b/src/libmusepack/synth_filter.c
deleted file mode 100644
index dceb0a64d..000000000
--- a/src/libmusepack/synth_filter.c
+++ /dev/null
@@ -1,440 +0,0 @@
-/*
- Copyright (c) 2004, The Musepack Development Team
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are
- met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
-
- * Neither the name of the The Musepack Development Team nor the
- names of its contributors may be used to endorse or promote
- products derived from this software without specific prior
- written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/// \file synth_filter.c
-/// Synthesis functions.
-/// \todo document me
-
-#include "musepack/musepack.h"
-#include "musepack/internal.h"
-
-/* C O N S T A N T S */
-#undef _
-
-#define MPC_FIXED_POINT_SYNTH_FIX 2
-
-#ifdef MPC_FIXED_POINT
-#define _(value) MPC_MAKE_FRACT_CONST((double)value/(double)(0x40000))
-#else
-#define _(value) MAKE_MPC_SAMPLE((double)value/(double)(0x10000))
-#endif
-
-
-static const MPC_SAMPLE_FORMAT Di_opt [32] [16] = {
- { _( 0), _( -29), _( 213), _( -459), _( 2037), _(-5153), _( 6574), _(-37489), _(75038), _(37489), _(6574), _( 5153), _(2037), _( 459), _(213), _(29) },
- { _( -1), _( -31), _( 218), _( -519), _( 2000), _(-5517), _( 5959), _(-39336), _(74992), _(35640), _(7134), _( 4788), _(2063), _( 401), _(208), _(26) },
- { _( -1), _( -35), _( 222), _( -581), _( 1952), _(-5879), _( 5288), _(-41176), _(74856), _(33791), _(7640), _( 4425), _(2080), _( 347), _(202), _(24) },
- { _( -1), _( -38), _( 225), _( -645), _( 1893), _(-6237), _( 4561), _(-43006), _(74630), _(31947), _(8092), _( 4063), _(2087), _( 294), _(196), _(21) },
- { _( -1), _( -41), _( 227), _( -711), _( 1822), _(-6589), _( 3776), _(-44821), _(74313), _(30112), _(8492), _( 3705), _(2085), _( 244), _(190), _(19) },
- { _( -1), _( -45), _( 228), _( -779), _( 1739), _(-6935), _( 2935), _(-46617), _(73908), _(28289), _(8840), _( 3351), _(2075), _( 197), _(183), _(17) },
- { _( -1), _( -49), _( 228), _( -848), _( 1644), _(-7271), _( 2037), _(-48390), _(73415), _(26482), _(9139), _( 3004), _(2057), _( 153), _(176), _(16) },
- { _( -2), _( -53), _( 227), _( -919), _( 1535), _(-7597), _( 1082), _(-50137), _(72835), _(24694), _(9389), _( 2663), _(2032), _( 111), _(169), _(14) },
- { _( -2), _( -58), _( 224), _( -991), _( 1414), _(-7910), _( 70), _(-51853), _(72169), _(22929), _(9592), _( 2330), _(2001), _( 72), _(161), _(13) },
- { _( -2), _( -63), _( 221), _(-1064), _( 1280), _(-8209), _( -998), _(-53534), _(71420), _(21189), _(9750), _( 2006), _(1962), _( 36), _(154), _(11) },
- { _( -2), _( -68), _( 215), _(-1137), _( 1131), _(-8491), _( -2122), _(-55178), _(70590), _(19478), _(9863), _( 1692), _(1919), _( 2), _(147), _(10) },
- { _( -3), _( -73), _( 208), _(-1210), _( 970), _(-8755), _( -3300), _(-56778), _(69679), _(17799), _(9935), _( 1388), _(1870), _( -29), _(139), _( 9) },
- { _( -3), _( -79), _( 200), _(-1283), _( 794), _(-8998), _( -4533), _(-58333), _(68692), _(16155), _(9966), _( 1095), _(1817), _( -57), _(132), _( 8) },
- { _( -4), _( -85), _( 189), _(-1356), _( 605), _(-9219), _( -5818), _(-59838), _(67629), _(14548), _(9959), _( 814), _(1759), _( -83), _(125), _( 7) },
- { _( -4), _( -91), _( 177), _(-1428), _( 402), _(-9416), _( -7154), _(-61289), _(66494), _(12980), _(9916), _( 545), _(1698), _(-106), _(117), _( 7) },
- { _( -5), _( -97), _( 163), _(-1498), _( 185), _(-9585), _( -8540), _(-62684), _(65290), _(11455), _(9838), _( 288), _(1634), _(-127), _(111), _( 6) },
- { _( -5), _(-104), _( 146), _(-1567), _( -45), _(-9727), _( -9975), _(-64019), _(64019), _( 9975), _(9727), _( 45), _(1567), _(-146), _(104), _( 5) },
- { _( -6), _(-111), _( 127), _(-1634), _( -288), _(-9838), _(-11455), _(-65290), _(62684), _( 8540), _(9585), _( -185), _(1498), _(-163), _( 97), _( 5) },
- { _( -7), _(-117), _( 106), _(-1698), _( -545), _(-9916), _(-12980), _(-66494), _(61289), _( 7154), _(9416), _( -402), _(1428), _(-177), _( 91), _( 4) },
- { _( -7), _(-125), _( 83), _(-1759), _( -814), _(-9959), _(-14548), _(-67629), _(59838), _( 5818), _(9219), _( -605), _(1356), _(-189), _( 85), _( 4) },
- { _( -8), _(-132), _( 57), _(-1817), _(-1095), _(-9966), _(-16155), _(-68692), _(58333), _( 4533), _(8998), _( -794), _(1283), _(-200), _( 79), _( 3) },
- { _( -9), _(-139), _( 29), _(-1870), _(-1388), _(-9935), _(-17799), _(-69679), _(56778), _( 3300), _(8755), _( -970), _(1210), _(-208), _( 73), _( 3) },
- { _(-10), _(-147), _( -2), _(-1919), _(-1692), _(-9863), _(-19478), _(-70590), _(55178), _( 2122), _(8491), _(-1131), _(1137), _(-215), _( 68), _( 2) },
- { _(-11), _(-154), _( -36), _(-1962), _(-2006), _(-9750), _(-21189), _(-71420), _(53534), _( 998), _(8209), _(-1280), _(1064), _(-221), _( 63), _( 2) },
- { _(-13), _(-161), _( -72), _(-2001), _(-2330), _(-9592), _(-22929), _(-72169), _(51853), _( -70), _(7910), _(-1414), _( 991), _(-224), _( 58), _( 2) },
- { _(-14), _(-169), _(-111), _(-2032), _(-2663), _(-9389), _(-24694), _(-72835), _(50137), _(-1082), _(7597), _(-1535), _( 919), _(-227), _( 53), _( 2) },
- { _(-16), _(-176), _(-153), _(-2057), _(-3004), _(-9139), _(-26482), _(-73415), _(48390), _(-2037), _(7271), _(-1644), _( 848), _(-228), _( 49), _( 1) },
- { _(-17), _(-183), _(-197), _(-2075), _(-3351), _(-8840), _(-28289), _(-73908), _(46617), _(-2935), _(6935), _(-1739), _( 779), _(-228), _( 45), _( 1) },
- { _(-19), _(-190), _(-244), _(-2085), _(-3705), _(-8492), _(-30112), _(-74313), _(44821), _(-3776), _(6589), _(-1822), _( 711), _(-227), _( 41), _( 1) },
- { _(-21), _(-196), _(-294), _(-2087), _(-4063), _(-8092), _(-31947), _(-74630), _(43006), _(-4561), _(6237), _(-1893), _( 645), _(-225), _( 38), _( 1) },
- { _(-24), _(-202), _(-347), _(-2080), _(-4425), _(-7640), _(-33791), _(-74856), _(41176), _(-5288), _(5879), _(-1952), _( 581), _(-222), _( 35), _( 1) },
- { _(-26), _(-208), _(-401), _(-2063), _(-4788), _(-7134), _(-35640), _(-74992), _(39336), _(-5959), _(5517), _(-2000), _( 519), _(-218), _( 31), _( 1) }
-};
-
-#undef _
-
-static void Calculate_New_V ( const MPC_SAMPLE_FORMAT * Sample, MPC_SAMPLE_FORMAT * V )
-{
- // Calculating new V-buffer values for left channel
- // calculate new V-values (ISO-11172-3, p. 39)
- // based upon fast-MDCT algorithm by Byeong Gi Lee
- /*static*/ MPC_SAMPLE_FORMAT A00, A01, A02, A03, A04, A05, A06, A07, A08, A09, A10, A11, A12, A13, A14, A15;
- /*static*/ MPC_SAMPLE_FORMAT B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B11, B12, B13, B14, B15;
- MPC_SAMPLE_FORMAT tmp;
-
- A00 = Sample[ 0] + Sample[31];
- A01 = Sample[ 1] + Sample[30];
- A02 = Sample[ 2] + Sample[29];
- A03 = Sample[ 3] + Sample[28];
- A04 = Sample[ 4] + Sample[27];
- A05 = Sample[ 5] + Sample[26];
- A06 = Sample[ 6] + Sample[25];
- A07 = Sample[ 7] + Sample[24];
- A08 = Sample[ 8] + Sample[23];
- A09 = Sample[ 9] + Sample[22];
- A10 = Sample[10] + Sample[21];
- A11 = Sample[11] + Sample[20];
- A12 = Sample[12] + Sample[19];
- A13 = Sample[13] + Sample[18];
- A14 = Sample[14] + Sample[17];
- A15 = Sample[15] + Sample[16];
-
- B00 = A00 + A15;
- B01 = A01 + A14;
- B02 = A02 + A13;
- B03 = A03 + A12;
- B04 = A04 + A11;
- B05 = A05 + A10;
- B06 = A06 + A09;
- B07 = A07 + A08;;
- B08 = MPC_SCALE_CONST((A00 - A15) , 0.5024192929f , 31);
- B09 = MPC_SCALE_CONST((A01 - A14) , 0.5224986076f , 31);
- B10 = MPC_SCALE_CONST((A02 - A13) , 0.5669440627f , 31);
- B11 = MPC_SCALE_CONST((A03 - A12) , 0.6468217969f , 31);
- B12 = MPC_SCALE_CONST((A04 - A11) , 0.7881546021f , 31);
- B13 = MPC_SCALE_CONST((A05 - A10) , 1.0606776476f , 30);
- B14 = MPC_SCALE_CONST((A06 - A09) , 1.7224471569f , 30);
- B15 = MPC_SCALE_CONST((A07 - A08) , 5.1011486053f , 28);
-
- A00 = B00 + B07;
- A01 = B01 + B06;
- A02 = B02 + B05;
- A03 = B03 + B04;
- A04 = MPC_SCALE_CONST((B00 - B07) , 0.5097956061f , 31);
- A05 = MPC_SCALE_CONST((B01 - B06) , 0.6013448834f , 31);
- A06 = MPC_SCALE_CONST((B02 - B05) , 0.8999761939f , 31);
- A07 = MPC_SCALE_CONST((B03 - B04) , 2.5629155636f , 29);
- A08 = B08 + B15;
- A09 = B09 + B14;
- A10 = B10 + B13;
- A11 = B11 + B12;
- A12 = MPC_SCALE_CONST((B08 - B15) , 0.5097956061f , 31);
- A13 = MPC_SCALE_CONST((B09 - B14) , 0.6013448834f , 31);
- A14 = MPC_SCALE_CONST((B10 - B13) , 0.8999761939f , 31);
- A15 = MPC_SCALE_CONST((B11 - B12) , 2.5629155636f , 29);
-
- B00 = A00 + A03;
- B01 = A01 + A02;
- B02 = MPC_MULTIPLY_FRACT_CONST_FIX((A00 - A03) , 0.5411961079f , 1);
- B03 = MPC_MULTIPLY_FRACT_CONST_FIX((A01 - A02) , 1.3065630198f , 2);
- B04 = A04 + A07;
- B05 = A05 + A06;
- B06 = MPC_MULTIPLY_FRACT_CONST_FIX((A04 - A07) , 0.5411961079f , 1);
- B07 = MPC_MULTIPLY_FRACT_CONST_FIX((A05 - A06) , 1.3065630198f , 2);
- B08 = A08 + A11;
- B09 = A09 + A10;
- B10 = MPC_MULTIPLY_FRACT_CONST_FIX((A08 - A11) , 0.5411961079f , 1);
- B11 = MPC_MULTIPLY_FRACT_CONST_FIX((A09 - A10) , 1.3065630198f , 2);
- B12 = A12 + A15;
- B13 = A13 + A14;
- B14 = MPC_MULTIPLY_FRACT_CONST_FIX((A12 - A15) , 0.5411961079f , 1);
- B15 = MPC_MULTIPLY_FRACT_CONST_FIX((A13 - A14) , 1.3065630198f , 2);
-
- A00 = B00 + B01;
- A01 = MPC_MULTIPLY_FRACT_CONST_FIX((B00 - B01) , 0.7071067691f , 1);
- A02 = B02 + B03;
- A03 = MPC_MULTIPLY_FRACT_CONST_FIX((B02 - B03) , 0.7071067691f , 1);
- A04 = B04 + B05;
- A05 = MPC_MULTIPLY_FRACT_CONST_FIX((B04 - B05) , 0.7071067691f , 1);
- A06 = B06 + B07;
- A07 = MPC_MULTIPLY_FRACT_CONST_FIX((B06 - B07) , 0.7071067691f , 1);
- A08 = B08 + B09;
- A09 = MPC_MULTIPLY_FRACT_CONST_FIX((B08 - B09) , 0.7071067691f , 1);
- A10 = B10 + B11;
- A11 = MPC_MULTIPLY_FRACT_CONST_FIX((B10 - B11) , 0.7071067691f , 1);
- A12 = B12 + B13;
- A13 = MPC_MULTIPLY_FRACT_CONST_FIX((B12 - B13) , 0.7071067691f , 1);
- A14 = B14 + B15;
- A15 = MPC_MULTIPLY_FRACT_CONST_FIX((B14 - B15) , 0.7071067691f , 1);
-
- V[48] = -A00;
- V[ 0] = A01;
- V[40] = -A02 - (V[ 8] = A03);
- V[36] = -((V[ 4] = A05 + (V[12] = A07)) + A06);
- V[44] = - A04 - A06 - A07;
- V[ 6] = (V[10] = A11 + (V[14] = A15)) + A13;
- V[38] = (V[34] = -(V[ 2] = A09 + A13 + A15) - A14) + A09 - A10 - A11;
- V[46] = (tmp = -(A12 + A14 + A15)) - A08;
- V[42] = tmp - A10 - A11;
-
- A00 = MPC_MULTIPLY_FRACT_CONST_SHR((Sample[ 0] - Sample[31]) , 0.5006030202f , MPC_FIXED_POINT_SYNTH_FIX);
- A01 = MPC_MULTIPLY_FRACT_CONST_SHR((Sample[ 1] - Sample[30]) , 0.5054709315f , MPC_FIXED_POINT_SYNTH_FIX);
- A02 = MPC_MULTIPLY_FRACT_CONST_SHR((Sample[ 2] - Sample[29]) , 0.5154473186f , MPC_FIXED_POINT_SYNTH_FIX);
- A03 = MPC_MULTIPLY_FRACT_CONST_SHR((Sample[ 3] - Sample[28]) , 0.5310425758f , MPC_FIXED_POINT_SYNTH_FIX);
- A04 = MPC_MULTIPLY_FRACT_CONST_SHR((Sample[ 4] - Sample[27]) , 0.5531039238f , MPC_FIXED_POINT_SYNTH_FIX);
- A05 = MPC_MULTIPLY_FRACT_CONST_SHR((Sample[ 5] - Sample[26]) , 0.5829349756f , MPC_FIXED_POINT_SYNTH_FIX);
- A06 = MPC_MULTIPLY_FRACT_CONST_SHR((Sample[ 6] - Sample[25]) , 0.6225041151f , MPC_FIXED_POINT_SYNTH_FIX);
- A07 = MPC_MULTIPLY_FRACT_CONST_SHR((Sample[ 7] - Sample[24]) , 0.6748083234f , MPC_FIXED_POINT_SYNTH_FIX);
- A08 = MPC_MULTIPLY_FRACT_CONST_SHR((Sample[ 8] - Sample[23]) , 0.7445362806f , MPC_FIXED_POINT_SYNTH_FIX);
- A09 = MPC_MULTIPLY_FRACT_CONST_SHR((Sample[ 9] - Sample[22]) , 0.8393496275f , MPC_FIXED_POINT_SYNTH_FIX);
- A10 = MPC_MULTIPLY_FRACT_CONST_SHR((Sample[10] - Sample[21]) , 0.9725682139f , MPC_FIXED_POINT_SYNTH_FIX);
-#if MPC_FIXED_POINT_SYNTH_FIX>=2
- A11 = MPC_MULTIPLY_FRACT_CONST_SHR((Sample[11] - Sample[20]) , 1.1694399118f , MPC_FIXED_POINT_SYNTH_FIX);
- A12 = MPC_MULTIPLY_FRACT_CONST_SHR((Sample[12] - Sample[19]) , 1.4841645956f , MPC_FIXED_POINT_SYNTH_FIX);
-#else
- A11 = MPC_SCALE_CONST_SHR ((Sample[11] - Sample[20]) , 1.1694399118f , 30, MPC_FIXED_POINT_SYNTH_FIX);
- A12 = MPC_SCALE_CONST_SHR ((Sample[12] - Sample[19]) , 1.4841645956f , 30, MPC_FIXED_POINT_SYNTH_FIX);
-#endif
- A13 = MPC_SCALE_CONST_SHR ((Sample[13] - Sample[18]) , 2.0577809811f , 29, MPC_FIXED_POINT_SYNTH_FIX);
- A14 = MPC_SCALE_CONST_SHR ((Sample[14] - Sample[17]) , 3.4076085091f , 29, MPC_FIXED_POINT_SYNTH_FIX);
- A15 = MPC_SCALE_CONST_SHR ((Sample[15] - Sample[16]) , 10.1900081635f, 27 ,MPC_FIXED_POINT_SYNTH_FIX);
-
- B00 = A00 + A15;
- B01 = A01 + A14;
- B02 = A02 + A13;
- B03 = A03 + A12;
- B04 = A04 + A11;
- B05 = A05 + A10;
- B06 = A06 + A09;
- B07 = A07 + A08;
- B08 = MPC_SCALE_CONST((A00 - A15) , 0.5024192929f , 31);
- B09 = MPC_SCALE_CONST((A01 - A14) , 0.5224986076f , 31);
- B10 = MPC_SCALE_CONST((A02 - A13) , 0.5669440627f , 31);
- B11 = MPC_SCALE_CONST((A03 - A12) , 0.6468217969f , 31);
- B12 = MPC_SCALE_CONST((A04 - A11) , 0.7881546021f , 31);
- B13 = MPC_SCALE_CONST((A05 - A10) , 1.0606776476f , 30);
- B14 = MPC_SCALE_CONST((A06 - A09) , 1.7224471569f , 30);
- B15 = MPC_SCALE_CONST((A07 - A08) , 5.1011486053f , 28);
-
- A00 = B00 + B07;
- A01 = B01 + B06;
- A02 = B02 + B05;
- A03 = B03 + B04;
- A04 = MPC_SCALE_CONST((B00 - B07) , 0.5097956061f , 31);
- A05 = MPC_SCALE_CONST((B01 - B06) , 0.6013448834f , 31);
- A06 = MPC_SCALE_CONST((B02 - B05) , 0.8999761939f , 31);
- A07 = MPC_SCALE_CONST((B03 - B04) , 2.5629155636f , 29);
- A08 = B08 + B15;
- A09 = B09 + B14;
- A10 = B10 + B13;
- A11 = B11 + B12;
- A12 = MPC_SCALE_CONST((B08 - B15) , 0.5097956061f , 31);
- A13 = MPC_SCALE_CONST((B09 - B14) , 0.6013448834f , 31);
- A14 = MPC_SCALE_CONST((B10 - B13) , 0.8999761939f , 31);
- A15 = MPC_SCALE_CONST((B11 - B12) , 2.5629155636f , 29);
-
- B00 = A00 + A03;
- B01 = A01 + A02;
- B02 = MPC_SCALE_CONST((A00 - A03) , 0.5411961079f , 31);
- B03 = MPC_SCALE_CONST((A01 - A02) , 1.3065630198f , 30);
- B04 = A04 + A07;
- B05 = A05 + A06;
- B06 = MPC_SCALE_CONST((A04 - A07) , 0.5411961079f , 31);
- B07 = MPC_SCALE_CONST((A05 - A06) , 1.3065630198f , 30);
- B08 = A08 + A11;
- B09 = A09 + A10;
- B10 = MPC_SCALE_CONST((A08 - A11) , 0.5411961079f , 31);
- B11 = MPC_SCALE_CONST((A09 - A10) , 1.3065630198f , 30);
- B12 = A12 + A15;
- B13 = A13 + A14;
- B14 = MPC_SCALE_CONST((A12 - A15) , 0.5411961079f , 31);
- B15 = MPC_SCALE_CONST((A13 - A14) , 1.3065630198f , 30);
-
- A00 = MPC_SHL(B00 + B01, MPC_FIXED_POINT_SYNTH_FIX);
- A01 = MPC_SCALE_CONST_SHL((B00 - B01) , 0.7071067691f , 31, MPC_FIXED_POINT_SYNTH_FIX);
- A02 = MPC_SHL(B02 + B03, MPC_FIXED_POINT_SYNTH_FIX);
- A03 = MPC_SCALE_CONST_SHL((B02 - B03) , 0.7071067691f , 31, MPC_FIXED_POINT_SYNTH_FIX);
- A04 = MPC_SHL(B04 + B05, MPC_FIXED_POINT_SYNTH_FIX);
- A05 = MPC_SCALE_CONST_SHL((B04 - B05) , 0.7071067691f , 31, MPC_FIXED_POINT_SYNTH_FIX);
- A06 = MPC_SHL(B06 + B07, MPC_FIXED_POINT_SYNTH_FIX);
- A07 = MPC_SCALE_CONST_SHL((B06 - B07) , 0.7071067691f , 31, MPC_FIXED_POINT_SYNTH_FIX);
- A08 = MPC_SHL(B08 + B09, MPC_FIXED_POINT_SYNTH_FIX);
- A09 = MPC_SCALE_CONST_SHL((B08 - B09) , 0.7071067691f , 31, MPC_FIXED_POINT_SYNTH_FIX);
- A10 = MPC_SHL(B10 + B11, MPC_FIXED_POINT_SYNTH_FIX);
- A11 = MPC_SCALE_CONST_SHL((B10 - B11) , 0.7071067691f , 31, MPC_FIXED_POINT_SYNTH_FIX);
- A12 = MPC_SHL(B12 + B13, MPC_FIXED_POINT_SYNTH_FIX);
- A13 = MPC_SCALE_CONST_SHL((B12 - B13) , 0.7071067691f , 31, MPC_FIXED_POINT_SYNTH_FIX);
- A14 = MPC_SHL(B14 + B15, MPC_FIXED_POINT_SYNTH_FIX);
- A15 = MPC_SCALE_CONST_SHL((B14 - B15) , 0.7071067691f , 31, MPC_FIXED_POINT_SYNTH_FIX);
-
- // mehrfach verwendete Ausdrücke: A04+A06+A07, A09+A13+A15
- V[ 5] = (V[11] = (V[13] = A07 + (V[15] = A15)) + A11) + A05 + A13;
- V[ 7] = (V[ 9] = A03 + A11 + A15) + A13;
- V[33] = -(V[ 1] = A01 + A09 + A13 + A15) - A14;
- V[35] = -(V[ 3] = A05 + A07 + A09 + A13 + A15) - A06 - A14;
- V[37] = (tmp = -(A10 + A11 + A13 + A14 + A15)) - A05 - A06 - A07;
- V[39] = tmp - A02 - A03; // abhängig vom Befehl drüber
- V[41] = (tmp += A13 - A12) - A02 - A03; // abhängig vom Befehl 2 drüber
- V[43] = tmp - A04 - A06 - A07; // abhängig von Befehlen 1 und 3 drüber
- V[47] = (tmp = -(A08 + A12 + A14 + A15)) - A00;
- V[45] = tmp - A04 - A06 - A07; // abhängig vom Befehl drüber
-
- V[32] = -V[ 0];
- V[31] = -V[ 1];
- V[30] = -V[ 2];
- V[29] = -V[ 3];
- V[28] = -V[ 4];
- V[27] = -V[ 5];
- V[26] = -V[ 6];
- V[25] = -V[ 7];
- V[24] = -V[ 8];
- V[23] = -V[ 9];
- V[22] = -V[10];
- V[21] = -V[11];
- V[20] = -V[12];
- V[19] = -V[13];
- V[18] = -V[14];
- V[17] = -V[15];
-
- V[63] = V[33];
- V[62] = V[34];
- V[61] = V[35];
- V[60] = V[36];
- V[59] = V[37];
- V[58] = V[38];
- V[57] = V[39];
- V[56] = V[40];
- V[55] = V[41];
- V[54] = V[42];
- V[53] = V[43];
- V[52] = V[44];
- V[51] = V[45];
- V[50] = V[46];
- V[49] = V[47];
-}
-
-static void Synthese_Filter_float_internal(MPC_SAMPLE_FORMAT * OutData,MPC_SAMPLE_FORMAT * V,const MPC_SAMPLE_FORMAT * Y)
-{
- mpc_uint32_t n;
- for ( n = 0; n < 36; n++, Y += 32 ) {
- V -= 64;
- Calculate_New_V ( Y, V );
- {
- MPC_SAMPLE_FORMAT * Data = OutData;
- const MPC_SAMPLE_FORMAT * D = (const MPC_SAMPLE_FORMAT *) &Di_opt;
- mpc_int32_t k;
- //mpc_int32_t tmp;
-
-
-
- for ( k = 0; k < 32; k++, D += 16, V++ ) {
- *Data = MPC_SHL(
- MPC_MULTIPLY_FRACT(V[ 0],D[ 0]) + MPC_MULTIPLY_FRACT(V[ 96],D[ 1]) + MPC_MULTIPLY_FRACT(V[128],D[ 2]) + MPC_MULTIPLY_FRACT(V[224],D[ 3])
- + MPC_MULTIPLY_FRACT(V[256],D[ 4]) + MPC_MULTIPLY_FRACT(V[352],D[ 5]) + MPC_MULTIPLY_FRACT(V[384],D[ 6]) + MPC_MULTIPLY_FRACT(V[480],D[ 7])
- + MPC_MULTIPLY_FRACT(V[512],D[ 8]) + MPC_MULTIPLY_FRACT(V[608],D[ 9]) + MPC_MULTIPLY_FRACT(V[640],D[10]) + MPC_MULTIPLY_FRACT(V[736],D[11])
- + MPC_MULTIPLY_FRACT(V[768],D[12]) + MPC_MULTIPLY_FRACT(V[864],D[13]) + MPC_MULTIPLY_FRACT(V[896],D[14]) + MPC_MULTIPLY_FRACT(V[992],D[15])
- , 2);
-
- Data += 2;
- }
- V -= 32;//bleh
- OutData+=64;
- }
- }
-}
-
-void
-mpc_decoder_synthese_filter_float(mpc_decoder *d, MPC_SAMPLE_FORMAT* OutData)
-{
- /********* left channel ********/
- memmove(d->V_L + MPC_V_MEM, d->V_L, 960 * sizeof(MPC_SAMPLE_FORMAT) );
-
- Synthese_Filter_float_internal(
- OutData,
- (MPC_SAMPLE_FORMAT *)(d->V_L + MPC_V_MEM),
- (MPC_SAMPLE_FORMAT *)(d->Y_L [0]));
-
- /******** right channel ********/
- memmove(d->V_R + MPC_V_MEM, d->V_R, 960 * sizeof(MPC_SAMPLE_FORMAT) );
-
- Synthese_Filter_float_internal(
- OutData + 1,
- (MPC_SAMPLE_FORMAT *)(d->V_R + MPC_V_MEM),
- (MPC_SAMPLE_FORMAT *)(d->Y_R [0]));
-}
-
-/*******************************************/
-/* */
-/* dithered synthesis */
-/* */
-/*******************************************/
-
-static const unsigned char Parity [256] = { // parity
- 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,
- 1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,
- 1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,
- 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,
- 1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,
- 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,
- 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,
- 1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0
-};
-
-/*
- * This is a simple random number generator with good quality for audio purposes.
- * It consists of two polycounters with opposite rotation direction and different
- * periods. The periods are coprime, so the total period is the product of both.
- *
- * -------------------------------------------------------------------------------------------------
- * +-> |31:30:29:28:27:26:25:24:23:22:21:20:19:18:17:16:15:14:13:12:11:10: 9: 8: 7: 6: 5: 4: 3: 2: 1: 0|
- * | -------------------------------------------------------------------------------------------------
- * | | | | | | |
- * | +--+--+--+-XOR-+--------+
- * | |
- * +--------------------------------------------------------------------------------------+
- *
- * -------------------------------------------------------------------------------------------------
- * |31:30:29:28:27:26:25:24:23:22:21:20:19:18:17:16:15:14:13:12:11:10: 9: 8: 7: 6: 5: 4: 3: 2: 1: 0| <-+
- * ------------------------------------------------------------------------------------------------- |
- * | | | | |
- * +--+----XOR----+--+ |
- * | |
- * +----------------------------------------------------------------------------------------+
- *
- *
- * The first has an period of 3*5*17*257*65537, the second of 7*47*73*178481,
- * which gives a period of 18.410.713.077.675.721.215. The result is the
- * XORed values of both generators.
- */
-mpc_uint32_t
-random_int(mpc_decoder *d)
-{
-#if 1
- mpc_uint32_t t1, t2, t3, t4;
-
- t3 = t1 = d->__r1; t4 = t2 = d->__r2; // Parity calculation is done via table lookup, this is also available
- t1 &= 0xF5; t2 >>= 25; // on CPUs without parity, can be implemented in C and avoid unpredictable
- t1 = Parity [t1]; t2 &= 0x63; // jumps and slow rotate through the carry flag operations.
- t1 <<= 31; t2 = Parity [t2];
-
- return (d->__r1 = (t3 >> 1) | t1 ) ^ (d->__r2 = (t4 + t4) | t2 );
-#else
- return (d->__r1 = (d->__r1 >> 1) | ((mpc_uint32_t)Parity [d->__r1 & 0xF5] << 31) ) ^
- (d->__r2 = (d->__r2 << 1) | (mpc_uint32_t)Parity [(d->__r2 >> 25) & 0x63] );
-#endif
-}
diff --git a/src/libmusepack/xine_musepack_decoder.c b/src/libmusepack/xine_musepack_decoder.c
deleted file mode 100644
index 52973c751..000000000
--- a/src/libmusepack/xine_musepack_decoder.c
+++ /dev/null
@@ -1,547 +0,0 @@
-/*
- * Copyright (C) 2005 the xine project
- *
- * This file is part of xine, a free video player.
- *
- * xine is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * xine 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- * xine interface to libmusepack by James Stembridge <jstembridge@gmail.com>
- *
- * TODO:
- * 32bit float output
- * Seeking??
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-#define LOG_MODULE "mpc_decoder"
-#define LOG_VERBOSE
-/*
-#define LOG
-*/
-
-#include "xine_internal.h"
-#include "audio_out.h"
-#include "buffer.h"
-#include "xineutils.h"
-
-#ifdef HAVE_MPCDEC_MPCDEC_H
-# include <mpcdec/mpcdec.h>
-#elif defined(HAVE_MPC_MPCDEC_H)
-# include <mpc/mpcdec.h>
-#else
-# include "musepack/musepack.h"
-#endif
-
-#define MPC_DECODER_MEMSIZE 65536
-#define MPC_DECODER_MEMSIZE2 (MPC_DECODER_MEMSIZE/2)
-
-#define INIT_BUFSIZE (MPC_DECODER_MEMSIZE*2)
-
-typedef struct {
- audio_decoder_class_t decoder_class;
-} mpc_class_t;
-
-typedef struct mpc_decoder_s {
- audio_decoder_t audio_decoder;
-
- xine_stream_t *stream;
-
- int sample_rate; /* audio sample rate */
- int bits_per_sample; /* bits/sample, usually 8 or 16 */
- int channels; /* 1 or 2, usually */
-
- int output_open; /* flag to indicate audio is ready */
-
- unsigned char *buf; /* data accumulation buffer */
- unsigned int buf_max; /* maximum size of buf */
- unsigned int read; /* size of accum. data already read */
- unsigned int size; /* size of accumulated data in buf */
-
- mpc_reader reader;
- mpc_streaminfo streaminfo;
-#ifndef HAVE_MPC_MPCDEC_H
- mpc_decoder decoder;
-#else
- mpc_demux *decoder;
-#endif
-
- int decoder_ok;
- unsigned int current_frame;
-
- int32_t file_size;
-
-} mpc_decoder_t;
-
-
-/**************************************************************************
- * musepack specific functions
- *************************************************************************/
-
-/* Reads size bytes of data into buffer at ptr. */
-#ifndef HAVE_MPC_MPCDEC_H
-static int32_t mpc_reader_read(void *data, void *ptr, int size) {
- mpc_decoder_t *this = (mpc_decoder_t *) data;
-#else
-static int32_t mpc_reader_read(mpc_reader *data, void *ptr, int size) {
- mpc_decoder_t *this = (mpc_decoder_t *) data->data;
-#endif
-
- lprintf("mpc_reader_read: size=%d\n", size);
-
- /* Don't try to read more data than we have */
- if (size > (this->size - this->read))
- size = this->size - this->read;
-
- /* Copy the data */
- xine_fast_memcpy(ptr, &this->buf[this->read], size);
-
- /* Update our position in the data buffer */
- this->read += size;
-
- return size;
-}
-
-/* Seeks to byte position offset. */
-#ifndef HAVE_MPC_MPCDEC_H
-static mpc_bool_t mpc_reader_seek(void *data, int32_t offset) {
- mpc_decoder_t *this = (mpc_decoder_t *) data;
-#else
-static mpc_bool_t mpc_reader_seek(mpc_reader *data, int32_t offset) {
- mpc_decoder_t *this = (mpc_decoder_t *) data->data;
-#endif
-
- lprintf("mpc_reader_seek: offset=%d\n", offset);
-
- /* seek is only called when reading the header so we can assume
- * that the buffer starts at the start of the file */
- this->read = offset;
-
-#ifndef HAVE_MPC_MPCDEC_H
- return TRUE;
-#else
- return MPC_TRUE;
-#endif
-}
-
-/* Returns the current byte offset in the stream. */
-#ifndef HAVE_MPC_MPCDEC_H
-static int32_t mpc_reader_tell(void *data) {
-#else
-static int32_t mpc_reader_tell(mpc_reader *data) {
-#endif
- lprintf("mpc_reader_tell\n");
-
- /* Tell isn't used so just return 0 */
- return 0;
-}
-
-/* Returns the total length of the source stream, in bytes. */
-#ifndef HAVE_MPC_MPCDEC_H
-static int32_t mpc_reader_get_size(void *data) {
- mpc_decoder_t *this = (mpc_decoder_t *) data;
-#else
-static int32_t mpc_reader_get_size(mpc_reader *data) {
- mpc_decoder_t *this = (mpc_decoder_t *) data->data;
-#endif
-
- lprintf("mpc_reader_get_size\n");
-
- return this->file_size;
-}
-
-/* True if the stream is a seekable stream. */
-#ifndef HAVE_MPC_MPCDEC_H
-static mpc_bool_t mpc_reader_canseek(void *data) {
- lprintf("mpc_reader_canseek\n");
-
- return TRUE;
-#else
-static mpc_bool_t mpc_reader_canseek(mpc_reader *data) {
-
- lprintf("mpc_reader_canseek\n");
- return MPC_TRUE;
-#endif
-}
-
-/* Convert 32bit float samples into 16bit int samples */
-static inline void float_to_int(float *_f, int16_t *s16, int samples) {
- int i;
- float f;
- for (i = 0; i < samples; i++) {
- f = _f[i] * 32767;
- if (f > INT16_MAX) f = INT16_MAX;
- if (f < INT16_MIN) f = INT16_MIN;
- s16[i] = f;
- /* printf("samples[%d] = %f, %d\n", i, _f[i], s16[num_channels*i]); */
- }
-}
-
-/* Decode a musepack frame */
-static int mpc_decode_frame (mpc_decoder_t *this) {
- float buffer[MPC_DECODER_BUFFER_LENGTH];
- uint32_t frames;
-#ifdef HAVE_MPC_MPCDEC_H
- mpc_frame_info frame;
-#endif
-
- lprintf("mpd_decode_frame\n");
-
-#ifndef HAVE_MPC_MPCDEC_H
- frames = mpc_decoder_decode(&this->decoder, buffer, 0, 0);
-#else
- frame.buffer = buffer;
- mpc_demux_decode(this->decoder, &frame);
- frames = frame.samples;
-#endif
-
- if (frames > 0) {
- audio_buffer_t *audio_buffer;
- int16_t *int_samples;
-
- lprintf("got %d samples\n", frames);
-
- /* Get audio buffer */
- audio_buffer = this->stream->audio_out->get_buffer (this->stream->audio_out);
- audio_buffer->vpts = 0;
- audio_buffer->num_frames = frames;
-
- /* Convert samples */
- int_samples = (int16_t *) audio_buffer->mem;
- float_to_int(buffer, int_samples, frames*this->channels);
-
- /* Output converted samples */
- this->stream->audio_out->put_buffer (this->stream->audio_out, audio_buffer, this->stream);
- }
-
- return frames;
-}
-
-/**************************************************************************
- * xine audio plugin functions
- *************************************************************************/
-
-static void mpc_decode_data (audio_decoder_t *this_gen, buf_element_t *buf) {
- mpc_decoder_t *this = (mpc_decoder_t *) this_gen;
- int err;
-
- lprintf("mpc_decode_data\n");
-
- if (!_x_stream_info_get(this->stream, XINE_STREAM_INFO_AUDIO_HANDLED))
- return;
-
- /* We don't handle special buffers */
- if (buf->decoder_flags & BUF_FLAG_SPECIAL)
- return;
-
- /* Read header */
- if (buf->decoder_flags & BUF_FLAG_HEADER) {
-
- lprintf("header\n");
-
- /* File size is in decoder_info[0] */
- this->file_size = buf->decoder_info[0];
-
- /* Initialise the data accumulation buffer */
- this->buf = calloc(1, INIT_BUFSIZE);
- this->buf_max = INIT_BUFSIZE;
- this->read = 0;
- this->size = 0;
-
- /* Initialise the reader */
- this->reader.read = mpc_reader_read;
- this->reader.seek = mpc_reader_seek;
- this->reader.tell = mpc_reader_tell;
- this->reader.get_size = mpc_reader_get_size;
- this->reader.canseek = mpc_reader_canseek;
- this->reader.data = this;
-
- /* Copy header to buffer */
- xine_fast_memcpy(this->buf, buf->content, buf->size);
- this->size = buf->size;
-
-#ifdef HAVE_MPC_MPCDEC_H
- this->decoder = mpc_demux_init(&this->reader);
- if (!this->decoder) {
- xprintf(this->stream->xine, XINE_VERBOSITY_LOG,
- _("libmusepack: mpc_demux_init failed.\n"));
- _x_stream_info_set(this->stream, XINE_STREAM_INFO_AUDIO_HANDLED, 0);
- return;
- }
- mpc_demux_get_info(this->decoder, &this->streaminfo);
-#else
- /* Initialise and read stream info */
- mpc_streaminfo_init(&this->streaminfo);
-
- if ((err = mpc_streaminfo_read(&this->streaminfo, &this->reader))) {
- xprintf(this->stream->xine, XINE_VERBOSITY_LOG,
- _("libmusepack: mpc_streaminfo_read failed: %d\n"), err);
-
- _x_stream_info_set(this->stream, XINE_STREAM_INFO_AUDIO_HANDLED, 0);
- return;
- }
-#endif
-
- this->sample_rate = this->streaminfo.sample_freq;
- this->channels = this->streaminfo.channels;
- this->bits_per_sample = 16;
-
- /* After the header the demuxer starts sending data from an offset
- * of 28 bytes */
- this->size = 28;
-
- /* We need to keep track of the current frame so we now when we've
- * reached the end of the stream */
- this->current_frame = 0;
-
- /* Setup the decoder */
-#ifndef HAVE_MPC_MPCDEC_H
- mpc_decoder_setup(&this->decoder, &this->reader);
-#endif
- this->decoder_ok = 0;
-
- /* Take this opportunity to initialize stream/meta information */
- _x_meta_info_set_utf8(this->stream, XINE_META_INFO_AUDIOCODEC,
- "Musepack (libmusepack)");
- _x_stream_info_set(this->stream, XINE_STREAM_INFO_AUDIO_BITRATE,
- (int) this->streaminfo.average_bitrate);
-
- return;
- }
-
- lprintf("data: %u size=%u read=%u\n", buf->size, this->size, this->read);
-
- /* if the audio output is not open yet, open the audio output */
- if (!this->output_open) {
- this->output_open = (this->stream->audio_out->open) (
- this->stream->audio_out,
- this->stream,
- this->bits_per_sample,
- this->sample_rate,
- _x_ao_channels2mode(this->channels));
-
- /* if the audio still isn't open, do not go any further with the decode */
- if (!this->output_open)
- return;
- }
-
- /* If we run out of space in our internal buffer we discard what's
- * already been read */
- if (((this->size + buf->size) > this->buf_max) && this->read) {
- lprintf("discarding read data\n");
- this->size -= this->read;
- memmove(this->buf, &this->buf[this->read], this->size);
- this->read = 0;
- }
-
- /* If there still isn't space we have to increase the size of the
- * internal buffer */
- if ((this->size + buf->size) > this->buf_max) {
- xprintf(this->stream->xine, XINE_VERBOSITY_DEBUG,
- "libmusepack: increasing internal buffer size\n");
- this->buf_max += 2*buf->size;
- this->buf = realloc(this->buf, this->buf_max);
- }
-
- /* Copy data */
- xine_fast_memcpy(&this->buf[this->size], buf->content, buf->size);
- this->size += buf->size;
-
- /* Time to decode */
- if (buf->decoder_flags & BUF_FLAG_FRAME_END) {
- /* Increment frame count */
-#ifndef HAVE_MPC_MPCDEC_H
- if (this->current_frame++ == this->streaminfo.frames) {
-#else
- if (this->current_frame++ == this->streaminfo.samples) {
-#endif
- xprintf(this->stream->xine, XINE_VERBOSITY_LOG,
- _("libmusepack: data after last frame ignored\n"));
- return;
- }
-
- if (!this->decoder_ok) {
- /* We require MPC_DECODER_MEMSIZE bytes to initialise the decoder */
- if ((this->size - this->read) >= MPC_DECODER_MEMSIZE) {
- lprintf("initialise");
-
-#ifndef HAVE_MPC_MPCDEC_H
- if (!mpc_decoder_initialize(&this->decoder, &this->streaminfo)) {
-#else
- if (!this->decoder) {
-#endif
- xprintf(this->stream->xine, XINE_VERBOSITY_LOG,
- _("libmusepack: mpc_decoder_initialise failed\n"));
-
- _x_stream_info_set(this->stream, XINE_STREAM_INFO_AUDIO_HANDLED, 0);
- return;
- }
-
- this->decoder_ok = 1;
- } else {
- /* Not enough data yet */
- return;
- }
- }
-
- /* mpc_decoder_decode may cause a read of MPC_DECODER_MEMSIZE/2 bytes so
- * make sure we have enough data available */
- if ((this->size - this->read) >= MPC_DECODER_MEMSIZE2) {
- lprintf("decoding\n");
-
- if ((err = mpc_decode_frame(this)) < 0) {
- xprintf(this->stream->xine, XINE_VERBOSITY_LOG,
- _("libmusepack: mpc_decoder_decode failed: %d\n"), err);
-
- _x_stream_info_set(this->stream, XINE_STREAM_INFO_AUDIO_HANDLED, 0);
- return;
- }
- }
-
- /* If we are at the end of the stream we decode the remaining frames as we
- * know we'll have enough data */
-#ifndef HAVE_MPC_MPCDEC_H
- if (this->current_frame == this->streaminfo.frames) {
-#else
- if (this->current_frame == this->streaminfo.samples) {
-#endif
- lprintf("flushing buffers\n");
-
- do {
- if ((err = mpc_decode_frame(this)) < 0) {
- xprintf(this->stream->xine, XINE_VERBOSITY_LOG,
- _("libmusepack: mpc_decoder_decode failed: %d\n"), err);
- }
- } while (err > 0);
-
- lprintf("buffers flushed\n");
- }
- }
-}
-
-static void mpc_reset (audio_decoder_t *this_gen) {
- mpc_decoder_t *this = (mpc_decoder_t *) this_gen;
-
- this->size = 0;
- this->read = 0;
-}
-
-static void mpc_discontinuity (audio_decoder_t *this_gen) {
- /* mpc_decoder_t *this = (mpc_decoder_t *) this_gen; */
-}
-
-static void mpc_dispose (audio_decoder_t *this_gen) {
-
- mpc_decoder_t *this = (mpc_decoder_t *) this_gen;
-
- /* close the audio output */
- if (this->output_open)
- this->stream->audio_out->close (this->stream->audio_out, this->stream);
- this->output_open = 0;
-
- /* free anything that was allocated during operation */
- if (this->buf)
- free(this->buf);
-#ifdef HAVE_MPC_MPCDEC_H
- if (this->decoder)
- mpc_demux_exit(this->decoder);
-#endif
-
- free(this);
-}
-
-static audio_decoder_t *open_plugin (audio_decoder_class_t *class_gen, xine_stream_t *stream) {
-
- mpc_decoder_t *this ;
-
- this = (mpc_decoder_t *) calloc(1, sizeof(mpc_decoder_t));
-
- /* connect the member functions */
- this->audio_decoder.decode_data = mpc_decode_data;
- this->audio_decoder.reset = mpc_reset;
- this->audio_decoder.discontinuity = mpc_discontinuity;
- this->audio_decoder.dispose = mpc_dispose;
-
- /* connect the stream */
- this->stream = stream;
-
- /* audio output is not open at the start */
- this->output_open = 0;
-
- /* no buffer yet */
- this->buf = NULL;
-
- /* initialize the basic audio parameters */
- this->channels = 0;
- this->sample_rate = 0;
- this->bits_per_sample = 0;
-
- /* return the newly-initialized audio decoder */
- return &this->audio_decoder;
-}
-
-static char *get_identifier (audio_decoder_class_t *this) {
- return "mpc";
-}
-
-static char *get_description (audio_decoder_class_t *this) {
- return "mpc: musepack audio decoder plugin";
-}
-
-static void dispose_class (audio_decoder_class_t *this_gen) {
-
- mpc_class_t *this = (mpc_class_t *)this_gen;
-
- free (this);
-}
-
-static void *init_plugin (xine_t *xine, void *data) {
-
- mpc_class_t *this ;
-
- this = (mpc_class_t *) calloc(1, sizeof(mpc_class_t));
-
- this->decoder_class.open_plugin = open_plugin;
- this->decoder_class.get_identifier = get_identifier;
- this->decoder_class.get_description = get_description;
- this->decoder_class.dispose = dispose_class;
-
- return this;
-}
-
-static uint32_t audio_types[] = {
- BUF_AUDIO_MPC,
- 0
-};
-
-static const decoder_info_t dec_info_audio = {
- audio_types, /* supported types */
- 5 /* priority */
-};
-
-const plugin_info_t xine_plugin_info[] EXPORTED = {
- /* { type, API version, "name", version, special_info, init_function }, */
- { PLUGIN_AUDIO_DECODER, 15, "mpc", XINE_VERSION_CODE, &dec_info_audio, &init_plugin },
- { PLUGIN_NONE, 0, "", 0, NULL, NULL }
-};
-