[prev in list] [next in list] [prev in thread] [next in thread]
List: xine-cvslog
Subject: [xine-cvs] HG: xine-lib-1.2-plugin-loader: [31/35] Merge from 1.2
From: Darren Salt <linux () youmustbejoking ! demon ! co ! uk>
Date: 2007-06-21 22:31:50
Message-ID: 3e9d711a77870cbbca8d.1182464857:31 () hg ! debian ! org
[Download RAW message or body]
# [node df73844e8a47005bef76ffe6cd9323d8e6a1c218 part 31]
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libfaad/syntax.h
--- a/src/libfaad/syntax.h Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,124 +0,0 @@
-/*
-** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
-**
-** This program 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.
-**
-** This program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-**
-** Any non-GPL usage of this software or parts of this software is strictly
-** forbidden.
-**
-** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
-**
-** $Id: syntax.h,v 1.10 2005/10/29 23:57:07 tmmm Exp $
-**/
-
-#ifndef __SYNTAX_H__
-#define __SYNTAX_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "decoder.h"
-#include "bits.h"
-
-#define MAIN 1
-#define LC 2
-#define SSR 3
-#define LTP 4
-#define HE_AAC 5
-#define LD 23
-#define ER_LC 17
-#define ER_LTP 19
-#define DRM_ER_LC 27 /* special object type for DRM */
-
-/* header types */
-#define RAW 0
-#define ADIF 1
-#define ADTS 2
-
-/* SBR signalling */
-#define NO_SBR 0
-#define SBR_UPSAMPLED 1
-#define SBR_DOWNSAMPLED 2
-#define NO_SBR_UPSAMPLED 3
-
-/* DRM channel definitions */
-#define DRMCH_MONO 1
-#define DRMCH_STEREO 2
-#define DRMCH_SBR_MONO 3
-#define DRMCH_SBR_STEREO 4
-#define DRMCH_SBR_PS_STEREO 5
-
-
-/* First object type that has ER */
-#define ER_OBJECT_START 17
-
-
-/* Bitstream */
-#define LEN_SE_ID 3
-#define LEN_TAG 4
-#define LEN_BYTE 8
-
-#define EXT_FIL 0
-#define EXT_FILL_DATA 1
-#define EXT_DATA_ELEMENT 2
-#define EXT_DYNAMIC_RANGE 11
-#define ANC_DATA 0
-
-/* Syntax elements */
-#define ID_SCE 0x0
-#define ID_CPE 0x1
-#define ID_CCE 0x2
-#define ID_LFE 0x3
-#define ID_DSE 0x4
-#define ID_PCE 0x5
-#define ID_FIL 0x6
-#define ID_END 0x7
-
-#define ONLY_LONG_SEQUENCE 0x0
-#define LONG_START_SEQUENCE 0x1
-#define EIGHT_SHORT_SEQUENCE 0x2
-#define LONG_STOP_SEQUENCE 0x3
-
-#define ZERO_HCB 0
-#define FIRST_PAIR_HCB 5
-#define ESC_HCB 11
-#define QUAD_LEN 4
-#define PAIR_LEN 2
-#define NOISE_HCB 13
-#define INTENSITY_HCB2 14
-#define INTENSITY_HCB 15
-
-#define INVALID_SBR_ELEMENT 255
-
-int8_t GASpecificConfig(bitfile *ld, mp4AudioSpecificConfig *mp4ASC,
- program_config *pce);
-
-uint8_t adts_frame(adts_header *adts, bitfile *ld);
-void get_adif_header(adif_header *adif, bitfile *ld);
-void raw_data_block(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hInfo,
- bitfile *ld, program_config *pce, drc_info *drc);
-uint8_t reordered_spectral_data(NeAACDecHandle hDecoder, ic_stream *ics, bitfile \
*ld,
- int16_t *spectral_data);
-void aac_scalable_main_element(NeAACDecHandle hDecoder, NeAACDecFrameInfo *hInfo,
- bitfile *ld, program_config *pce, drc_info *drc);
-
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libfaad/tns.c
--- a/src/libfaad/tns.c Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,306 +0,0 @@
-/*
-** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
-**
-** This program 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.
-**
-** This program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-**
-** Any non-GPL usage of this software or parts of this software is strictly
-** forbidden.
-**
-** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
-**
-** $Id: tns.c,v 1.8 2005/10/29 23:57:07 tmmm Exp $
-**/
-
-#include "common.h"
-#include "structs.h"
-
-#include "syntax.h"
-#include "tns.h"
-
-
-/* static function declarations */
-static void tns_decode_coef(uint8_t order, uint8_t coef_res_bits, uint8_t \
coef_compress,
- uint8_t *coef, real_t *a);
-static void tns_ar_filter(real_t *spectrum, uint16_t size, int8_t inc, real_t *lpc,
- uint8_t order);
-static void tns_ma_filter(real_t *spectrum, uint16_t size, int8_t inc, real_t *lpc,
- uint8_t order);
-
-
-#ifdef _MSC_VER
-#pragma warning(disable:4305)
-#pragma warning(disable:4244)
-#endif
-static real_t tns_coef_0_3[] =
-{
- COEF_CONST(0.0), COEF_CONST(0.4338837391), COEF_CONST(0.7818314825), \
COEF_CONST(0.9749279122),
- COEF_CONST(-0.9848077530), COEF_CONST(-0.8660254038), COEF_CONST(-0.6427876097), \
COEF_CONST(-0.3420201433),
- COEF_CONST(-0.4338837391), COEF_CONST(-0.7818314825), COEF_CONST(-0.9749279122), \
COEF_CONST(-0.9749279122),
- COEF_CONST(-0.9848077530), COEF_CONST(-0.8660254038), COEF_CONST(-0.6427876097), \
COEF_CONST(-0.3420201433)
-};
-static real_t tns_coef_0_4[] =
-{
- COEF_CONST(0.0), COEF_CONST(0.2079116908), COEF_CONST(0.4067366431), \
COEF_CONST(0.5877852523),
- COEF_CONST(0.7431448255), COEF_CONST(0.8660254038), COEF_CONST(0.9510565163), \
COEF_CONST(0.9945218954),
- COEF_CONST(-0.9957341763), COEF_CONST(-0.9618256432), COEF_CONST(-0.8951632914), \
COEF_CONST(-0.7980172273),
- COEF_CONST(-0.6736956436), COEF_CONST(-0.5264321629), COEF_CONST(-0.3612416662), \
COEF_CONST(-0.1837495178)
-};
-static real_t tns_coef_1_3[] =
-{
- COEF_CONST(0.0), COEF_CONST(0.4338837391), COEF_CONST(-0.6427876097), \
COEF_CONST(-0.3420201433),
- COEF_CONST(0.9749279122), COEF_CONST(0.7818314825), COEF_CONST(-0.6427876097), \
COEF_CONST(-0.3420201433),
- COEF_CONST(-0.4338837391), COEF_CONST(-0.7818314825), COEF_CONST(-0.6427876097), \
COEF_CONST(-0.3420201433),
- COEF_CONST(-0.7818314825), COEF_CONST(-0.4338837391), COEF_CONST(-0.6427876097), \
COEF_CONST(-0.3420201433)
-};
-static real_t tns_coef_1_4[] =
-{
- COEF_CONST(0.0), COEF_CONST(0.2079116908), COEF_CONST(0.4067366431), \
COEF_CONST(0.5877852523),
- COEF_CONST(-0.6736956436), COEF_CONST(-0.5264321629), COEF_CONST(-0.3612416662), \
COEF_CONST(-0.1837495178),
- COEF_CONST(0.9945218954), COEF_CONST(0.9510565163), COEF_CONST(0.8660254038), \
COEF_CONST(0.7431448255),
- COEF_CONST(-0.6736956436), COEF_CONST(-0.5264321629), COEF_CONST(-0.3612416662), \
COEF_CONST(-0.1837495178)
-};
-
-
-/* TNS decoding for one channel and frame */
-void tns_decode_frame(ic_stream *ics, tns_info *tns, uint8_t sr_index,
- uint8_t object_type, real_t *spec, uint16_t frame_len)
-{
- uint8_t w, f, tns_order;
- int8_t inc;
- int16_t size;
- uint16_t bottom, top, start, end;
- uint16_t nshort = frame_len/8;
- real_t lpc[TNS_MAX_ORDER+1];
-
- if (!ics->tns_data_present)
- return;
-
- for (w = 0; w < ics->num_windows; w++)
- {
- bottom = ics->num_swb;
-
- for (f = 0; f < tns->n_filt[w]; f++)
- {
- top = bottom;
- bottom = max(top - tns->length[w][f], 0);
- tns_order = min(tns->order[w][f], TNS_MAX_ORDER);
- if (!tns_order)
- continue;
-
- tns_decode_coef(tns_order, tns->coef_res[w]+3,
- tns->coef_compress[w][f], tns->coef[w][f], lpc);
-
- start = min(bottom, max_tns_sfb(sr_index, object_type, \
(ics->window_sequence == EIGHT_SHORT_SEQUENCE)));
- start = min(start, ics->max_sfb);
- start = ics->swb_offset[start];
-
- end = min(top, max_tns_sfb(sr_index, object_type, (ics->window_sequence \
== EIGHT_SHORT_SEQUENCE)));
- end = min(end, ics->max_sfb);
- end = ics->swb_offset[end];
-
- size = end - start;
- if (size <= 0)
- continue;
-
- if (tns->direction[w][f])
- {
- inc = -1;
- start = end - 1;
- } else {
- inc = 1;
[... 54 lines omitted ...]
- }
-
- tns_ma_filter(&spec[(w*nshort)+start], size, inc, lpc, tns_order);
- }
- }
-}
-
-/* Decoder transmitted coefficients for one TNS filter */
-static void tns_decode_coef(uint8_t order, uint8_t coef_res_bits, uint8_t \
coef_compress,
- uint8_t *coef, real_t *a)
-{
- uint8_t i, m;
- real_t tmp2[TNS_MAX_ORDER+1], b[TNS_MAX_ORDER+1];
-
- /* Conversion to signed integer */
- for (i = 0; i < order; i++)
- {
- if (coef_compress == 0)
- {
- if (coef_res_bits == 3)
- {
- tmp2[i] = tns_coef_0_3[coef[i]];
- } else {
- tmp2[i] = tns_coef_0_4[coef[i]];
- }
- } else {
- if (coef_res_bits == 3)
- {
- tmp2[i] = tns_coef_1_3[coef[i]];
- } else {
- tmp2[i] = tns_coef_1_4[coef[i]];
- }
- }
- }
-
- /* Conversion to LPC coefficients */
- a[0] = COEF_CONST(1.0);
- for (m = 1; m <= order; m++)
- {
- for (i = 1; i < m; i++) /* loop only while i<m */
- b[i] = a[i] + MUL_C(tmp2[m-1], a[m-i]);
-
- for (i = 1; i < m; i++) /* loop only while i<m */
- a[i] = b[i];
-
- a[m] = tmp2[m-1]; /* changed */
- }
-}
-
-static void tns_ar_filter(real_t *spectrum, uint16_t size, int8_t inc, real_t *lpc,
- uint8_t order)
-{
- /*
- - Simple all-pole filter of order "order" defined by
- y(n) = x(n) - lpc[1]*y(n-1) - ... - lpc[order]*y(n-order)
- - The state variables of the filter are initialized to zero every time
- - The output data is written over the input data ("in-place operation")
- - An input vector of "size" samples is processed and the index increment
- to the next data sample is given by "inc"
- */
-
- uint8_t j;
- uint16_t i;
- real_t y;
- /* state is stored as a double ringbuffer */
- real_t state[2*TNS_MAX_ORDER] = {0};
- int8_t state_index = 0;
-
- for (i = 0; i < size; i++)
- {
- y = *spectrum;
-
- for (j = 0; j < order; j++)
- y -= MUL_C(state[state_index+j], lpc[j+1]);
-
- /* double ringbuffer state */
- state_index--;
- if (state_index < 0)
- state_index = order-1;
- state[state_index] = state[state_index + order] = y;
-
- *spectrum = y;
- spectrum += inc;
-
-//#define TNS_PRINT
-#ifdef TNS_PRINT
- //printf("%d\n", y);
- printf("0x%.8X\n", y);
-#endif
- }
-}
-
-static void tns_ma_filter(real_t *spectrum, uint16_t size, int8_t inc, real_t *lpc,
- uint8_t order)
-{
- /*
- - Simple all-zero filter of order "order" defined by
- y(n) = x(n) + a(2)*x(n-1) + ... + a(order+1)*x(n-order)
- - The state variables of the filter are initialized to zero every time
- - The output data is written over the input data ("in-place operation")
- - An input vector of "size" samples is processed and the index increment
- to the next data sample is given by "inc"
- */
-
- uint8_t j;
- uint16_t i;
- real_t y;
- /* state is stored as a double ringbuffer */
- real_t state[2*TNS_MAX_ORDER] = {0};
- int8_t state_index = 0;
-
- for (i = 0; i < size; i++)
- {
- y = *spectrum;
-
- for (j = 0; j < order; j++)
- y += MUL_C(state[j], lpc[j+1]);
-
- /* double ringbuffer state */
- state_index--;
- if (state_index < 0)
- state_index = order-1;
- state[state_index] = state[state_index + order] = *spectrum;
-
- *spectrum = y;
- spectrum += inc;
- }
-}
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libfaad/tns.h
--- a/src/libfaad/tns.h Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/*
-** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
-**
-** This program 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.
-**
-** This program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-**
-** Any non-GPL usage of this software or parts of this software is strictly
-** forbidden.
-**
-** Commercial non-GPL licensing of this software is possible.
-** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
-**
-** $Id: tns.h,v 1.8 2005/10/29 23:57:07 tmmm Exp $
-**/
-
-#ifndef __TNS_H__
-#define __TNS_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-#define TNS_MAX_ORDER 20
-
-
-void tns_decode_frame(ic_stream *ics, tns_info *tns, uint8_t sr_index,
- uint8_t object_type, real_t *spec, uint16_t frame_len);
-void tns_encode_frame(ic_stream *ics, tns_info *tns, uint8_t sr_index,
- uint8_t object_type, real_t *spec, uint16_t frame_len);
-
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 \
src/libfaad/xine_faad_decoder.c
--- a/src/libfaad/xine_faad_decoder.c Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,485 +0,0 @@
-/*
- * Copyright (C) 2000-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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * $Id: xine_decoder.c,v 1.49 2007/02/20 00:34:57 dgp85 Exp $
- *
- */
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#define LOG_MODULE "libfaad"
-#define LOG_VERBOSE
-/*
-#define LOG
-*/
-
-#include "xine_internal.h"
-#include "audio_out.h"
-#include "buffer.h"
-#include "xineutils.h"
-#include "common.h"
-#include "structs.h"
-#include "decoder.h"
-#include "syntax.h"
-
-#define FAAD_MIN_STREAMSIZE 768 /* 6144 bits/channel */
-
-typedef struct {
- audio_decoder_class_t decoder_class;
-} faad_class_t;
-
-typedef struct faad_decoder_s {
- audio_decoder_t audio_decoder;
-
- xine_stream_t *stream;
-
- /* faad2 stuff */
- NeAACDecHandle faac_dec;
- NeAACDecConfigurationPtr faac_cfg;
- NeAACDecFrameInfo faac_finfo;
- int faac_failed;
-
- int raw_mode;
-
- unsigned char *buf;
- int size;
- int rec_audio_src_size;
- int max_audio_src_size;
- int pts;
-
- unsigned char *dec_config;
- int dec_config_size;
-
- uint32_t rate;
- int bits_per_sample;
- unsigned char num_channels;
- int sbr;
- uint32_t ao_cap_mode;
-
- int output_open;
-
- unsigned long total_time;
- unsigned long total_data;
-} faad_decoder_t;
-
-
-static void faad_reset (audio_decoder_t *this_gen) {
-
- faad_decoder_t *this = (faad_decoder_t *) this_gen;
- this->size = 0;
-}
-
-static void faad_meta_info_set ( faad_decoder_t *this ) {
- switch (this->num_channels) {
- case 1:
- if (this->faac_finfo.sbr == SBR_UPSAMPLED)
- _x_meta_info_set_utf8(this->stream, XINE_META_INFO_AUDIOCODEC,
- "HE-AAC 1.0 (libfaad)");
- else
- _x_meta_info_set_utf8(this->stream, XINE_META_INFO_AUDIOCODEC,
- "AAC 1.0 (libfaad)");
- break;
- case 2:
- /* check if this is downmixed 5.1 */
- if (!this->faac_cfg || !this->faac_cfg->downMatrix) {
- if (this->faac_finfo.sbr == SBR_UPSAMPLED)
- _x_meta_info_set_utf8(this->stream, XINE_META_INFO_AUDIOCODEC,
- "HE-AAC 2.0 (libfaad)");
- else
- _x_meta_info_set_utf8(this->stream, XINE_META_INFO_AUDIOCODEC,
- "AAC 2.0 (libfaad)");
- break;
- }
- case 6:
- if (this->faac_finfo.sbr == SBR_UPSAMPLED)
- _x_meta_info_set_utf8(this->stream, XINE_META_INFO_AUDIOCODEC,
- "HE-AAC 5.1 (libfaad)");
- else
- _x_meta_info_set_utf8(this->stream, XINE_META_INFO_AUDIOCODEC,
- "AAC 5.1 (libfaad)");
- break;
- }
-}
-
[... 233 lines omitted ...]
- lprintf ("decoding %d data bytes...\n", buf->size);
-
- if( (int)buf->size <= 0 || this->faac_failed )
- return;
-
- if( !this->size )
- this->pts = buf->pts;
-
- if( this->size + buf->size > this->max_audio_src_size ) {
- this->max_audio_src_size = this->size + 2 * buf->size;
- this->buf = realloc( this->buf, this->max_audio_src_size );
- }
-
- memcpy (&this->buf[this->size], buf->content, buf->size);
- this->size += buf->size;
-
- if( !this->faac_dec && faad_open_dec(this) )
- return;
-
- /* open audio device as needed */
- if (!this->output_open) {
- faad_open_output( this );
- }
-
- faad_decode_audio(this, buf->decoder_flags & BUF_FLAG_FRAME_END );
- }
-}
-
-static void faad_discontinuity (audio_decoder_t *this_gen) {
-}
-
-static void faad_dispose (audio_decoder_t *this_gen) {
-
- faad_decoder_t *this = (faad_decoder_t *) this_gen;
-
- if (this->output_open)
- this->stream->audio_out->close (this->stream->audio_out, this->stream);
- this->output_open = 0;
-
- if( this->buf )
- free(this->buf);
- this->buf = NULL;
- this->size = 0;
- this->max_audio_src_size = 0;
-
- if( this->dec_config )
- free(this->dec_config);
- this->dec_config = NULL;
- this->dec_config_size = 0;
-
- if( this->faac_dec )
- NeAACDecClose(this->faac_dec);
- this->faac_dec = NULL;
- this->faac_failed = 0;
-
- free (this);
-}
-
-
-static audio_decoder_t *open_plugin (audio_decoder_class_t *class_gen, xine_stream_t \
*stream) {
-
- faad_decoder_t *this ;
-
- this = (faad_decoder_t *) xine_xmalloc (sizeof (faad_decoder_t));
-
- this->audio_decoder.decode_data = faad_decode_data;
- this->audio_decoder.reset = faad_reset;
- this->audio_decoder.discontinuity = faad_discontinuity;
- this->audio_decoder.dispose = faad_dispose;
-
- this->stream = stream;
- this->output_open = 0;
- this->raw_mode = 1;
- this->faac_dec = NULL;
- this->faac_failed = 0;
- this->buf = NULL;
- this->size = 0;
- this->max_audio_src_size = 0;
- this->dec_config = NULL;
- this->dec_config_size = 0;
- this->total_time = 0;
- this->total_data = 0;
-
- this->rate = 0;
-
- return &this->audio_decoder;
-}
-
-static char *get_identifier (audio_decoder_class_t *this) {
- return "FAAD";
-}
-
-static char *get_description (audio_decoder_class_t *this) {
- return "Freeware Advanced Audio Decoder";
-}
-
-static void dispose_class (audio_decoder_class_t *this) {
- free (this);
-}
-
-static void *init_plugin (xine_t *xine, void *data) {
-
- faad_class_t *this ;
-
- this = (faad_class_t *) xine_xmalloc (sizeof (faad_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_AAC, 0
- };
-
-static const decoder_info_t dec_info_audio = {
- audio_types, /* supported types */
- 1 /* priority */
-};
-
-const plugin_info_t xine_plugin_info[] EXPORTED = {
- /* type, API, "name", version, special_info, init_function */
- { PLUGIN_AUDIO_DECODER, 15, "faad", XINE_VERSION_CODE, &dec_info_audio, \
init_plugin },
- { PLUGIN_NONE, 0, "", 0, NULL, NULL }
-};
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libmad/D.dat
--- a/src/libmad/D.dat Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,607 +0,0 @@
-/*
- * libmad - MPEG audio decoder library
- * Copyright (C) 2000-2004 Underbit Technologies, Inc.
- *
- * This program 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.
- *
- * This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: D.dat,v 1.3 2004/04/22 00:22:33 miguelfreitas Exp $
- */
-
-/*
- * These are the coefficients for the subband synthesis window. This is a
- * reordered version of Table B.3 from ISO/IEC 11172-3.
- *
- * Every value is parameterized so that shift optimizations can be made at
- * compile-time. For example, every value can be right-shifted 12 bits to
- * minimize multiply instruction times without any loss of accuracy.
- */
-
- { PRESHIFT(0x00000000) /* 0.000000000 */, /* 0 */
- -PRESHIFT(0x0001d000) /* -0.000442505 */,
- PRESHIFT(0x000d5000) /* 0.003250122 */,
- -PRESHIFT(0x001cb000) /* -0.007003784 */,
- PRESHIFT(0x007f5000) /* 0.031082153 */,
- -PRESHIFT(0x01421000) /* -0.078628540 */,
- PRESHIFT(0x019ae000) /* 0.100311279 */,
- -PRESHIFT(0x09271000) /* -0.572036743 */,
- PRESHIFT(0x1251e000) /* 1.144989014 */,
- PRESHIFT(0x09271000) /* 0.572036743 */,
- PRESHIFT(0x019ae000) /* 0.100311279 */,
- PRESHIFT(0x01421000) /* 0.078628540 */,
- PRESHIFT(0x007f5000) /* 0.031082153 */,
- PRESHIFT(0x001cb000) /* 0.007003784 */,
- PRESHIFT(0x000d5000) /* 0.003250122 */,
- PRESHIFT(0x0001d000) /* 0.000442505 */,
-
- PRESHIFT(0x00000000) /* 0.000000000 */,
- -PRESHIFT(0x0001d000) /* -0.000442505 */,
- PRESHIFT(0x000d5000) /* 0.003250122 */,
- -PRESHIFT(0x001cb000) /* -0.007003784 */,
- PRESHIFT(0x007f5000) /* 0.031082153 */,
- -PRESHIFT(0x01421000) /* -0.078628540 */,
- PRESHIFT(0x019ae000) /* 0.100311279 */,
- -PRESHIFT(0x09271000) /* -0.572036743 */,
- PRESHIFT(0x1251e000) /* 1.144989014 */,
- PRESHIFT(0x09271000) /* 0.572036743 */,
- PRESHIFT(0x019ae000) /* 0.100311279 */,
- PRESHIFT(0x01421000) /* 0.078628540 */,
- PRESHIFT(0x007f5000) /* 0.031082153 */,
- PRESHIFT(0x001cb000) /* 0.007003784 */,
- PRESHIFT(0x000d5000) /* 0.003250122 */,
- PRESHIFT(0x0001d000) /* 0.000442505 */ },
-
- { -PRESHIFT(0x00001000) /* -0.000015259 */, /* 1 */
- -PRESHIFT(0x0001f000) /* -0.000473022 */,
- PRESHIFT(0x000da000) /* 0.003326416 */,
- -PRESHIFT(0x00207000) /* -0.007919312 */,
- PRESHIFT(0x007d0000) /* 0.030517578 */,
- -PRESHIFT(0x0158d000) /* -0.084182739 */,
- PRESHIFT(0x01747000) /* 0.090927124 */,
- -PRESHIFT(0x099a8000) /* -0.600219727 */,
- PRESHIFT(0x124f0000) /* 1.144287109 */,
- PRESHIFT(0x08b38000) /* 0.543823242 */,
- PRESHIFT(0x01bde000) /* 0.108856201 */,
- PRESHIFT(0x012b4000) /* 0.073059082 */,
- PRESHIFT(0x0080f000) /* 0.031478882 */,
- PRESHIFT(0x00191000) /* 0.006118774 */,
- PRESHIFT(0x000d0000) /* 0.003173828 */,
- PRESHIFT(0x0001a000) /* 0.000396729 */,
-
- -PRESHIFT(0x00001000) /* -0.000015259 */,
- -PRESHIFT(0x0001f000) /* -0.000473022 */,
- PRESHIFT(0x000da000) /* 0.003326416 */,
- -PRESHIFT(0x00207000) /* -0.007919312 */,
- PRESHIFT(0x007d0000) /* 0.030517578 */,
- -PRESHIFT(0x0158d000) /* -0.084182739 */,
- PRESHIFT(0x01747000) /* 0.090927124 */,
- -PRESHIFT(0x099a8000) /* -0.600219727 */,
- PRESHIFT(0x124f0000) /* 1.144287109 */,
- PRESHIFT(0x08b38000) /* 0.543823242 */,
- PRESHIFT(0x01bde000) /* 0.108856201 */,
- PRESHIFT(0x012b4000) /* 0.073059082 */,
- PRESHIFT(0x0080f000) /* 0.031478882 */,
- PRESHIFT(0x00191000) /* 0.006118774 */,
- PRESHIFT(0x000d0000) /* 0.003173828 */,
- PRESHIFT(0x0001a000) /* 0.000396729 */ },
-
- { -PRESHIFT(0x00001000) /* -0.000015259 */, /* 2 */
- -PRESHIFT(0x00023000) /* -0.000534058 */,
- PRESHIFT(0x000de000) /* 0.003387451 */,
- -PRESHIFT(0x00245000) /* -0.008865356 */,
- PRESHIFT(0x007a0000) /* 0.029785156 */,
- -PRESHIFT(0x016f7000) /* -0.089706421 */,
- PRESHIFT(0x014a8000) /* 0.080688477 */,
- -PRESHIFT(0x0a0d8000) /* -0.628295898 */,
- PRESHIFT(0x12468000) /* 1.142211914 */,
- PRESHIFT(0x083ff000) /* 0.515609741 */,
- PRESHIFT(0x01dd8000) /* 0.116577148 */,
- PRESHIFT(0x01149000) /* 0.067520142 */,
- PRESHIFT(0x00820000) /* 0.031738281 */,
- PRESHIFT(0x0015b000) /* 0.005294800 */,
- PRESHIFT(0x000ca000) /* 0.003082275 */,
- PRESHIFT(0x00018000) /* 0.000366211 */,
-
- -PRESHIFT(0x00001000) /* -0.000015259 */,
- -PRESHIFT(0x00023000) /* -0.000534058 */,
- PRESHIFT(0x000de000) /* 0.003387451 */,
- -PRESHIFT(0x00245000) /* -0.008865356 */,
- PRESHIFT(0x007a0000) /* 0.029785156 */,
- -PRESHIFT(0x016f7000) /* -0.089706421 */,
- PRESHIFT(0x014a8000) /* 0.080688477 */,
- -PRESHIFT(0x0a0d8000) /* -0.628295898 */,
- PRESHIFT(0x12468000) /* 1.142211914 */,
[... 355 lines omitted ...]
- -PRESHIFT(0x0e9be000) /* -0.913055420 */,
- PRESHIFT(0x1082d000) /* 1.031936646 */,
- PRESHIFT(0x038d4000) /* 0.221984863 */,
- PRESHIFT(0x026e7000) /* 0.151962280 */,
- PRESHIFT(0x0032e000) /* 0.012420654 */,
- PRESHIFT(0x006df000) /* 0.026840210 */,
- -PRESHIFT(0x00053000) /* -0.001266479 */,
- PRESHIFT(0x0007d000) /* 0.001907349 */,
- PRESHIFT(0x00007000) /* 0.000106812 */,
-
- -PRESHIFT(0x00004000) /* -0.000061035 */,
- -PRESHIFT(0x00055000) /* -0.001296997 */,
- PRESHIFT(0x000bd000) /* 0.002883911 */,
- -PRESHIFT(0x0054c000) /* -0.020690918 */,
- PRESHIFT(0x0025d000) /* 0.009231567 */,
- -PRESHIFT(0x02403000) /* -0.140670776 */,
- -PRESHIFT(0x016ba000) /* -0.088775635 */,
- -PRESHIFT(0x0e9be000) /* -0.913055420 */,
- PRESHIFT(0x1082d000) /* 1.031936646 */,
- PRESHIFT(0x038d4000) /* 0.221984863 */,
- PRESHIFT(0x026e7000) /* 0.151962280 */,
- PRESHIFT(0x0032e000) /* 0.012420654 */,
- PRESHIFT(0x006df000) /* 0.026840210 */,
- -PRESHIFT(0x00053000) /* -0.001266479 */,
- PRESHIFT(0x0007d000) /* 0.001907349 */,
- PRESHIFT(0x00007000) /* 0.000106812 */ },
-
- { -PRESHIFT(0x00004000) /* -0.000061035 */, /* 14 */
- -PRESHIFT(0x0005b000) /* -0.001388550 */,
- PRESHIFT(0x000b1000) /* 0.002700806 */,
- -PRESHIFT(0x00594000) /* -0.021789551 */,
- PRESHIFT(0x00192000) /* 0.006134033 */,
- -PRESHIFT(0x024c8000) /* -0.143676758 */,
- -PRESHIFT(0x01bf2000) /* -0.109161377 */,
- -PRESHIFT(0x0ef69000) /* -0.935195923 */,
- PRESHIFT(0x103be000) /* 1.014617920 */,
- PRESHIFT(0x032b4000) /* 0.198059082 */,
- PRESHIFT(0x026bc000) /* 0.151306152 */,
- PRESHIFT(0x00221000) /* 0.008316040 */,
- PRESHIFT(0x006a2000) /* 0.025909424 */,
- -PRESHIFT(0x0006a000) /* -0.001617432 */,
- PRESHIFT(0x00075000) /* 0.001785278 */,
- PRESHIFT(0x00007000) /* 0.000106812 */,
-
- -PRESHIFT(0x00004000) /* -0.000061035 */,
- -PRESHIFT(0x0005b000) /* -0.001388550 */,
- PRESHIFT(0x000b1000) /* 0.002700806 */,
- -PRESHIFT(0x00594000) /* -0.021789551 */,
- PRESHIFT(0x00192000) /* 0.006134033 */,
- -PRESHIFT(0x024c8000) /* -0.143676758 */,
- -PRESHIFT(0x01bf2000) /* -0.109161377 */,
- -PRESHIFT(0x0ef69000) /* -0.935195923 */,
- PRESHIFT(0x103be000) /* 1.014617920 */,
- PRESHIFT(0x032b4000) /* 0.198059082 */,
- PRESHIFT(0x026bc000) /* 0.151306152 */,
- PRESHIFT(0x00221000) /* 0.008316040 */,
- PRESHIFT(0x006a2000) /* 0.025909424 */,
- -PRESHIFT(0x0006a000) /* -0.001617432 */,
- PRESHIFT(0x00075000) /* 0.001785278 */,
- PRESHIFT(0x00007000) /* 0.000106812 */ },
-
- { -PRESHIFT(0x00005000) /* -0.000076294 */, /* 15 */
- -PRESHIFT(0x00061000) /* -0.001480103 */,
- PRESHIFT(0x000a3000) /* 0.002487183 */,
- -PRESHIFT(0x005da000) /* -0.022857666 */,
- PRESHIFT(0x000b9000) /* 0.002822876 */,
- -PRESHIFT(0x02571000) /* -0.146255493 */,
- -PRESHIFT(0x0215c000) /* -0.130310059 */,
- -PRESHIFT(0x0f4dc000) /* -0.956481934 */,
- PRESHIFT(0x0ff0a000) /* 0.996246338 */,
- PRESHIFT(0x02cbf000) /* 0.174789429 */,
- PRESHIFT(0x0266e000) /* 0.150115967 */,
- PRESHIFT(0x00120000) /* 0.004394531 */,
- PRESHIFT(0x00662000) /* 0.024932861 */,
- -PRESHIFT(0x0007f000) /* -0.001937866 */,
- PRESHIFT(0x0006f000) /* 0.001693726 */,
- PRESHIFT(0x00006000) /* 0.000091553 */,
-
- -PRESHIFT(0x00005000) /* -0.000076294 */,
- -PRESHIFT(0x00061000) /* -0.001480103 */,
- PRESHIFT(0x000a3000) /* 0.002487183 */,
- -PRESHIFT(0x005da000) /* -0.022857666 */,
- PRESHIFT(0x000b9000) /* 0.002822876 */,
- -PRESHIFT(0x02571000) /* -0.146255493 */,
- -PRESHIFT(0x0215c000) /* -0.130310059 */,
- -PRESHIFT(0x0f4dc000) /* -0.956481934 */,
- PRESHIFT(0x0ff0a000) /* 0.996246338 */,
- PRESHIFT(0x02cbf000) /* 0.174789429 */,
- PRESHIFT(0x0266e000) /* 0.150115967 */,
- PRESHIFT(0x00120000) /* 0.004394531 */,
- PRESHIFT(0x00662000) /* 0.024932861 */,
- -PRESHIFT(0x0007f000) /* -0.001937866 */,
- PRESHIFT(0x0006f000) /* 0.001693726 */,
- PRESHIFT(0x00006000) /* 0.000091553 */ },
-
- { -PRESHIFT(0x00005000) /* -0.000076294 */, /* 16 */
- -PRESHIFT(0x00068000) /* -0.001586914 */,
- PRESHIFT(0x00092000) /* 0.002227783 */,
- -PRESHIFT(0x0061f000) /* -0.023910522 */,
- -PRESHIFT(0x0002d000) /* -0.000686646 */,
- -PRESHIFT(0x025ff000) /* -0.148422241 */,
- -PRESHIFT(0x026f7000) /* -0.152206421 */,
- -PRESHIFT(0x0fa13000) /* -0.976852417 */,
- PRESHIFT(0x0fa13000) /* 0.976852417 */,
- PRESHIFT(0x026f7000) /* 0.152206421 */,
- PRESHIFT(0x025ff000) /* 0.148422241 */,
- PRESHIFT(0x0002d000) /* 0.000686646 */,
- PRESHIFT(0x0061f000) /* 0.023910522 */,
- -PRESHIFT(0x00092000) /* -0.002227783 */,
- PRESHIFT(0x00068000) /* 0.001586914 */,
- PRESHIFT(0x00005000) /* 0.000076294 */,
-
- -PRESHIFT(0x00005000) /* -0.000076294 */,
- -PRESHIFT(0x00068000) /* -0.001586914 */,
- PRESHIFT(0x00092000) /* 0.002227783 */,
- -PRESHIFT(0x0061f000) /* -0.023910522 */,
- -PRESHIFT(0x0002d000) /* -0.000686646 */,
- -PRESHIFT(0x025ff000) /* -0.148422241 */,
- -PRESHIFT(0x026f7000) /* -0.152206421 */,
- -PRESHIFT(0x0fa13000) /* -0.976852417 */,
- PRESHIFT(0x0fa13000) /* 0.976852417 */,
- PRESHIFT(0x026f7000) /* 0.152206421 */,
- PRESHIFT(0x025ff000) /* 0.148422241 */,
- PRESHIFT(0x0002d000) /* 0.000686646 */,
- PRESHIFT(0x0061f000) /* 0.023910522 */,
- -PRESHIFT(0x00092000) /* -0.002227783 */,
- PRESHIFT(0x00068000) /* 0.001586914 */,
- PRESHIFT(0x00005000) /* 0.000076294 */ }
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libmad/Makefile.am
--- a/src/libmad/Makefile.am Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-include $(top_srcdir)/misc/Makefile.common
-
-AM_CFLAGS = -DOPT_SPEED
-
-EXTRA_DIST = imdct_l_arm.S
-
-if MAD
-mad_module = xineplug_decode_mad.la
-endif
-
-xineplug_LTLIBRARIES = $(mad_module)
-
-if EXTERNAL_LIBMAD
-internal_sources =
-else
-internal_sources = \
- bit.c \
- fixed.c \
- frame.c \
- huffman.c \
- layer12.c \
- layer3.c \
- stream.c \
- synth.c \
- timer.c \
- version.c
-endif
-
-xineplug_decode_mad_la_SOURCES = \
- xine_mad_decoder.c \
- $(internal_sources)
-
-if EXTERNAL_LIBMAD
-xineplug_decode_mad_la_LIBADD = $(XINE_LIB) $(LIBMAD_LIBS)
-else
-xineplug_decode_mad_la_LIBADD = $(XINE_LIB)
-endif
-xineplug_decode_mad_la_CFLAGS = $(LIBMAD_CFLAGS) $(VISIBILITY_FLAG)
-xineplug_decode_mad_la_LDFLAGS = $(xineplug_ldflags)
-
-noinst_HEADERS = \
- D.dat \
- imdct_s.dat \
- qc_table.dat \
- rq_table.dat \
- sf_table.dat \
- bit.h \
- fixed.h \
- frame.h \
- global.h \
- huffman.h \
- layer12.h \
- layer3.h \
- stream.h \
- synth.h \
- timer.h \
- version.h
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libmad/bit.c
--- a/src/libmad/bit.c Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,237 +0,0 @@
-/*
- * libmad - MPEG audio decoder library
- * Copyright (C) 2000-2004 Underbit Technologies, Inc.
- *
- * This program 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.
- *
- * This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: bit.c,v 1.3 2004/04/22 00:22:35 miguelfreitas Exp $
- */
-
-# ifdef HAVE_CONFIG_H
-# include "config.h"
-# endif
-
-# include "global.h"
-
-# ifdef HAVE_LIMITS_H
-# include <limits.h>
-# else
-# define CHAR_BIT 8
-# endif
-
-# include "bit.h"
-
-/*
- * This is the lookup table for computing the CRC-check word.
- * As described in section 2.4.3.1 and depicted in Figure A.9
- * of ISO/IEC 11172-3, the generator polynomial is:
- *
- * G(X) = X^16 + X^15 + X^2 + 1
- */
-static
-unsigned short const crc_table[256] = {
- 0x0000, 0x8005, 0x800f, 0x000a, 0x801b, 0x001e, 0x0014, 0x8011,
- 0x8033, 0x0036, 0x003c, 0x8039, 0x0028, 0x802d, 0x8027, 0x0022,
- 0x8063, 0x0066, 0x006c, 0x8069, 0x0078, 0x807d, 0x8077, 0x0072,
- 0x0050, 0x8055, 0x805f, 0x005a, 0x804b, 0x004e, 0x0044, 0x8041,
- 0x80c3, 0x00c6, 0x00cc, 0x80c9, 0x00d8, 0x80dd, 0x80d7, 0x00d2,
- 0x00f0, 0x80f5, 0x80ff, 0x00fa, 0x80eb, 0x00ee, 0x00e4, 0x80e1,
- 0x00a0, 0x80a5, 0x80af, 0x00aa, 0x80bb, 0x00be, 0x00b4, 0x80b1,
- 0x8093, 0x0096, 0x009c, 0x8099, 0x0088, 0x808d, 0x8087, 0x0082,
-
- 0x8183, 0x0186, 0x018c, 0x8189, 0x0198, 0x819d, 0x8197, 0x0192,
- 0x01b0, 0x81b5, 0x81bf, 0x01ba, 0x81ab, 0x01ae, 0x01a4, 0x81a1,
- 0x01e0, 0x81e5, 0x81ef, 0x01ea, 0x81fb, 0x01fe, 0x01f4, 0x81f1,
- 0x81d3, 0x01d6, 0x01dc, 0x81d9, 0x01c8, 0x81cd, 0x81c7, 0x01c2,
- 0x0140, 0x8145, 0x814f, 0x014a, 0x815b, 0x015e, 0x0154, 0x8151,
- 0x8173, 0x0176, 0x017c, 0x8179, 0x0168, 0x816d, 0x8167, 0x0162,
- 0x8123, 0x0126, 0x012c, 0x8129, 0x0138, 0x813d, 0x8137, 0x0132,
- 0x0110, 0x8115, 0x811f, 0x011a, 0x810b, 0x010e, 0x0104, 0x8101,
-
- 0x8303, 0x0306, 0x030c, 0x8309, 0x0318, 0x831d, 0x8317, 0x0312,
- 0x0330, 0x8335, 0x833f, 0x033a, 0x832b, 0x032e, 0x0324, 0x8321,
- 0x0360, 0x8365, 0x836f, 0x036a, 0x837b, 0x037e, 0x0374, 0x8371,
- 0x8353, 0x0356, 0x035c, 0x8359, 0x0348, 0x834d, 0x8347, 0x0342,
- 0x03c0, 0x83c5, 0x83cf, 0x03ca, 0x83db, 0x03de, 0x03d4, 0x83d1,
- 0x83f3, 0x03f6, 0x03fc, 0x83f9, 0x03e8, 0x83ed, 0x83e7, 0x03e2,
- 0x83a3, 0x03a6, 0x03ac, 0x83a9, 0x03b8, 0x83bd, 0x83b7, 0x03b2,
- 0x0390, 0x8395, 0x839f, 0x039a, 0x838b, 0x038e, 0x0384, 0x8381,
-
- 0x0280, 0x8285, 0x828f, 0x028a, 0x829b, 0x029e, 0x0294, 0x8291,
- 0x82b3, 0x02b6, 0x02bc, 0x82b9, 0x02a8, 0x82ad, 0x82a7, 0x02a2,
- 0x82e3, 0x02e6, 0x02ec, 0x82e9, 0x02f8, 0x82fd, 0x82f7, 0x02f2,
- 0x02d0, 0x82d5, 0x82df, 0x02da, 0x82cb, 0x02ce, 0x02c4, 0x82c1,
- 0x8243, 0x0246, 0x024c, 0x8249, 0x0258, 0x825d, 0x8257, 0x0252,
- 0x0270, 0x8275, 0x827f, 0x027a, 0x826b, 0x026e, 0x0264, 0x8261,
- 0x0220, 0x8225, 0x822f, 0x022a, 0x823b, 0x023e, 0x0234, 0x8231,
- 0x8213, 0x0216, 0x021c, 0x8219, 0x0208, 0x820d, 0x8207, 0x0202
-};
-
-# define CRC_POLY 0x8005
-
-/*
- * NAME: bit->init()
- * DESCRIPTION: initialize bit pointer struct
- */
-void mad_bit_init(struct mad_bitptr *bitptr, unsigned char const *byte)
-{
- bitptr->byte = byte;
- bitptr->cache = 0;
- bitptr->left = CHAR_BIT;
-}
-
-/*
- * NAME: bit->length()
- * DESCRIPTION: return number of bits between start and end points
- */
-unsigned int mad_bit_length(struct mad_bitptr const *begin,
- struct mad_bitptr const *end)
-{
- return begin->left +
- CHAR_BIT * (end->byte - (begin->byte + 1)) + (CHAR_BIT - end->left);
-}
-
-/*
- * NAME: bit->nextbyte()
- * DESCRIPTION: return pointer to next unprocessed byte
- */
-unsigned char const *mad_bit_nextbyte(struct mad_bitptr const *bitptr)
-{
- return bitptr->left == CHAR_BIT ? bitptr->byte : bitptr->byte + 1;
-}
-
-/*
- * NAME: bit->skip()
- * DESCRIPTION: advance bit pointer
- */
-void mad_bit_skip(struct mad_bitptr *bitptr, unsigned int len)
-{
- bitptr->byte += len / CHAR_BIT;
- bitptr->left -= len % CHAR_BIT;
-
- if (bitptr->left > CHAR_BIT) {
- bitptr->byte++;
- bitptr->left += CHAR_BIT;
- }
-
- if (bitptr->left < CHAR_BIT)
- bitptr->cache = *bitptr->byte;
-}
-
-/*
- * NAME: bit->read()
- * DESCRIPTION: read an arbitrary number of bits and return their UIMSBF value
- */
-unsigned long mad_bit_read(struct mad_bitptr *bitptr, unsigned int len)
-{
- register unsigned long value;
-
- if (bitptr->left == CHAR_BIT)
- bitptr->cache = *bitptr->byte;
-
- if (len < bitptr->left) {
- value = (bitptr->cache & ((1 << bitptr->left) - 1)) >>
- (bitptr->left - len);
- bitptr->left -= len;
-
- return value;
- }
-
- /* remaining bits in current byte */
-
- value = bitptr->cache & ((1 << bitptr->left) - 1);
- len -= bitptr->left;
-
- bitptr->byte++;
- bitptr->left = CHAR_BIT;
-
- /* more bytes */
-
- while (len >= CHAR_BIT) {
- value = (value << CHAR_BIT) | *bitptr->byte++;
- len -= CHAR_BIT;
- }
-
- if (len > 0) {
- bitptr->cache = *bitptr->byte;
-
- value = (value << len) | (bitptr->cache >> (CHAR_BIT - len));
- bitptr->left -= len;
- }
-
- return value;
-}
-
-# if 0
-/*
- * NAME: bit->write()
- * DESCRIPTION: write an arbitrary number of bits
- */
-void mad_bit_write(struct mad_bitptr *bitptr, unsigned int len,
- unsigned long value)
-{
- unsigned char *ptr;
-
- ptr = (unsigned char *) bitptr->byte;
-
- /* ... */
-}
-# endif
-
-/*
- * NAME: bit->crc()
- * DESCRIPTION: compute CRC-check word
- */
-unsigned short mad_bit_crc(struct mad_bitptr bitptr, unsigned int len,
- unsigned short init)
-{
- register unsigned int crc;
-
- for (crc = init; len >= 32; len -= 32) {
- register unsigned long data;
-
- data = mad_bit_read(&bitptr, 32);
-
- crc = (crc << 8) ^ crc_table[((crc >> 8) ^ (data >> 24)) & 0xff];
- crc = (crc << 8) ^ crc_table[((crc >> 8) ^ (data >> 16)) & 0xff];
- crc = (crc << 8) ^ crc_table[((crc >> 8) ^ (data >> 8)) & 0xff];
- crc = (crc << 8) ^ crc_table[((crc >> 8) ^ (data >> 0)) & 0xff];
- }
-
- switch (len / 8) {
- case 3: crc = (crc << 8) ^
- crc_table[((crc >> 8) ^ mad_bit_read(&bitptr, 8)) & 0xff];
- case 2: crc = (crc << 8) ^
- crc_table[((crc >> 8) ^ mad_bit_read(&bitptr, 8)) & 0xff];
- case 1: crc = (crc << 8) ^
- crc_table[((crc >> 8) ^ mad_bit_read(&bitptr, 8)) & 0xff];
-
- len %= 8;
-
- case 0: break;
- }
-
- while (len--) {
- register unsigned int msb;
-
- msb = mad_bit_read(&bitptr, 1) ^ (crc >> 15);
-
- crc <<= 1;
- if (msb & 1)
- crc ^= CRC_POLY;
- }
-
- return crc & 0xffff;
-}
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libmad/bit.h
--- a/src/libmad/bit.h Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-/*
- * libmad - MPEG audio decoder library
- * Copyright (C) 2000-2004 Underbit Technologies, Inc.
- *
- * This program 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.
- *
- * This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: bit.h,v 1.3 2004/04/22 00:22:36 miguelfreitas Exp $
- */
-
-# ifndef LIBMAD_BIT_H
-# define LIBMAD_BIT_H
-
-struct mad_bitptr {
- unsigned char const *byte;
- unsigned short cache;
- unsigned short left;
-};
-
-void mad_bit_init(struct mad_bitptr *, unsigned char const *);
-
-# define mad_bit_finish(bitptr) /* nothing */
-
-unsigned int mad_bit_length(struct mad_bitptr const *,
- struct mad_bitptr const *);
-
-# define mad_bit_bitsleft(bitptr) ((bitptr)->left)
-unsigned char const *mad_bit_nextbyte(struct mad_bitptr const *);
-
-void mad_bit_skip(struct mad_bitptr *, unsigned int);
-unsigned long mad_bit_read(struct mad_bitptr *, unsigned int);
-void mad_bit_write(struct mad_bitptr *, unsigned int, unsigned long);
-
-unsigned short mad_bit_crc(struct mad_bitptr, unsigned int, unsigned short);
-
-# endif
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libmad/fixed.c
--- a/src/libmad/fixed.c Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-/*
- * libmad - MPEG audio decoder library
- * Copyright (C) 2000-2004 Underbit Technologies, Inc.
- *
- * This program 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.
- *
- * This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: fixed.c,v 1.3 2004/04/22 00:22:36 miguelfreitas Exp $
- */
-
-# ifdef HAVE_CONFIG_H
-# include "config.h"
-# endif
-
-# include "global.h"
-
-# include "fixed.h"
-
-/*
- * NAME: fixed->abs()
- * DESCRIPTION: return absolute value of a fixed-point number
- */
-mad_fixed_t mad_f_abs(mad_fixed_t x)
-{
- return x < 0 ? -x : x;
-}
-
-/*
- * NAME: fixed->div()
- * DESCRIPTION: perform division using fixed-point math
- */
-mad_fixed_t mad_f_div(mad_fixed_t x, mad_fixed_t y)
-{
- mad_fixed_t q, r;
- unsigned int bits;
-
- q = mad_f_abs(x / y);
-
- if (x < 0) {
- x = -x;
- y = -y;
- }
-
- r = x % y;
-
- if (y < 0) {
- x = -x;
- y = -y;
- }
-
- if (q > mad_f_intpart(MAD_F_MAX) &&
- !(q == -mad_f_intpart(MAD_F_MIN) && r == 0 && (x < 0) != (y < 0)))
- return 0;
-
- for (bits = MAD_F_FRACBITS; bits && r; --bits) {
- q <<= 1, r <<= 1;
- if (r >= y)
- r -= y, ++q;
- }
-
- /* round */
- if (2 * r >= y)
- ++q;
-
- /* fix sign */
- if ((x < 0) != (y < 0))
- q = -q;
-
- return q << bits;
-}
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libmad/fixed.h
--- a/src/libmad/fixed.h Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,499 +0,0 @@
-/*
- * libmad - MPEG audio decoder library
- * Copyright (C) 2000-2004 Underbit Technologies, Inc.
- *
- * This program 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.
- *
- * This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: fixed.h,v 1.3 2004/04/28 19:57:40 mroi Exp $
- */
-
-# ifndef LIBMAD_FIXED_H
-# define LIBMAD_FIXED_H
-
-# if SIZEOF_INT >= 4
-typedef signed int mad_fixed_t;
-
-typedef signed int mad_fixed64hi_t;
-typedef unsigned int mad_fixed64lo_t;
-# else
-typedef signed long mad_fixed_t;
-
-typedef signed long mad_fixed64hi_t;
-typedef unsigned long mad_fixed64lo_t;
-# endif
-
-# if defined(_MSC_VER)
-# define mad_fixed64_t signed __int64
-# elif 1 || defined(__GNUC__)
-# define mad_fixed64_t signed long long
-# endif
-
-# if defined(FPM_FLOAT)
-typedef double mad_sample_t;
-# else
-typedef mad_fixed_t mad_sample_t;
-# endif
-
-/*
- * Fixed-point format: 0xABBBBBBB
- * A == whole part (sign + 3 bits)
- * B == fractional part (28 bits)
- *
- * Values are signed two's complement, so the effective range is:
- * 0x80000000 to 0x7fffffff
- * -8.0 to +7.9999999962747097015380859375
- *
- * The smallest representable value is:
- * 0x00000001 == 0.0000000037252902984619140625 (i.e. about 3.725e-9)
- *
- * 28 bits of fractional accuracy represent about
- * 8.6 digits of decimal accuracy.
- *
- * Fixed-point numbers can be added or subtracted as normal
- * integers, but multiplication requires shifting the 64-bit result
- * from 56 fractional bits back to 28 (and rounding.)
- *
- * Changing the definition of MAD_F_FRACBITS is only partially
- * supported, and must be done with care.
- */
-
-# define MAD_F_FRACBITS 28
-
-# if MAD_F_FRACBITS == 28
-# define MAD_F(x) ((mad_fixed_t) (x##L))
-# else
-# if MAD_F_FRACBITS < 28
-# warning "MAD_F_FRACBITS < 28"
-# define MAD_F(x) ((mad_fixed_t) \
- (((x##L) + \
- (1L << (28 - MAD_F_FRACBITS - 1))) >> \
- (28 - MAD_F_FRACBITS)))
-# elif MAD_F_FRACBITS > 28
-# error "MAD_F_FRACBITS > 28 not currently supported"
-# define MAD_F(x) ((mad_fixed_t) \
- ((x##L) << (MAD_F_FRACBITS - 28)))
-# endif
-# endif
-
-# define MAD_F_MIN ((mad_fixed_t) -0x80000000L)
-# define MAD_F_MAX ((mad_fixed_t) +0x7fffffffL)
-
-# define MAD_F_ONE MAD_F(0x10000000)
-
-# define mad_f_tofixed(x) ((mad_fixed_t) \
- ((x) * (double) (1L << MAD_F_FRACBITS) + 0.5))
-# define mad_f_todouble(x) ((double) \
- ((x) / (double) (1L << MAD_F_FRACBITS)))
-
-# define mad_f_intpart(x) ((x) >> MAD_F_FRACBITS)
-# define mad_f_fracpart(x) ((x) & ((1L << MAD_F_FRACBITS) - 1))
- /* (x should be positive) */
-
-# define mad_f_fromint(x) ((x) << MAD_F_FRACBITS)
-
-# define mad_f_add(x, y) ((x) + (y))
-# define mad_f_sub(x, y) ((x) - (y))
-
-# if defined(FPM_FLOAT)
-# error "FPM_FLOAT not yet supported"
-
-# undef MAD_F
-# define MAD_F(x) mad_f_todouble(x)
-
-# define mad_f_mul(x, y) ((x) * (y))
-# define mad_f_scale64
-
-# undef ASO_ZEROCHECK
-
-# elif defined(FPM_64BIT)
-
-/*
- * This version should be the most accurate if 64-bit types are supported by
- * the compiler, although it may not be the most efficient.
[... 247 lines omitted ...]
-/*
- * This gives best accuracy but is not very fast.
- */
-# define MAD_F_MLA(hi, lo, x, y) \
- ({ mad_fixed64hi_t __hi; \
- mad_fixed64lo_t __lo; \
- MAD_F_MLX(__hi, __lo, (x), (y)); \
- asm ("addc %0,%2,%3\n\t" \
- "adde %1,%4,%5" \
- : "=r" (lo), "=r" (hi) \
- : "%r" (lo), "r" (__lo), \
- "%r" (hi), "r" (__hi) \
- : "xer"); \
- })
-# endif
-
-# if defined(OPT_ACCURACY)
-/*
- * This is slower than the truncating version below it.
- */
-# define mad_f_scale64(hi, lo) \
- ({ mad_fixed_t __result, __round; \
- asm ("rotrwi %0,%1,%2" \
- : "=r" (__result) \
- : "r" (lo), "i" (MAD_F_SCALEBITS)); \
- asm ("extrwi %0,%1,1,0" \
- : "=r" (__round) \
- : "r" (__result)); \
- asm ("insrwi %0,%1,%2,0" \
- : "+r" (__result) \
- : "r" (hi), "i" (MAD_F_SCALEBITS)); \
- asm ("add %0,%1,%2" \
- : "=r" (__result) \
- : "%r" (__result), "r" (__round)); \
- __result; \
- })
-# else
-# define mad_f_scale64(hi, lo) \
- ({ mad_fixed_t __result; \
- asm ("rotrwi %0,%1,%2" \
- : "=r" (__result) \
- : "r" (lo), "i" (MAD_F_SCALEBITS)); \
- asm ("insrwi %0,%1,%2,0" \
- : "+r" (__result) \
- : "r" (hi), "i" (MAD_F_SCALEBITS)); \
- __result; \
- })
-# endif
-
-# define MAD_F_SCALEBITS MAD_F_FRACBITS
-
-/* --- Default ------------------------------------------------------------- */
-
-# elif defined(FPM_DEFAULT)
-
-/*
- * This version is the most portable but it loses significant accuracy.
- * Furthermore, accuracy is biased against the second argument, so care
- * should be taken when ordering operands.
- *
- * The scale factors are constant as this is not used with SSO.
- *
- * Pre-rounding is required to stay within the limits of compliance.
- */
-# if defined(OPT_SPEED)
-# define mad_f_mul(x, y) (((x) >> 12) * ((y) >> 16))
-# else
-# define mad_f_mul(x, y) ((((x) + (1L << 11)) >> 12) * \
- (((y) + (1L << 15)) >> 16))
-# endif
-
-/* ------------------------------------------------------------------------- */
-
-# else
-# error "no FPM selected"
-# endif
-
-/* default implementations */
-
-# if !defined(mad_f_mul)
-# define mad_f_mul(x, y) \
- ({ register mad_fixed64hi_t __hi; \
- register mad_fixed64lo_t __lo; \
- MAD_F_MLX(__hi, __lo, (x), (y)); \
- mad_f_scale64(__hi, __lo); \
- })
-# endif
-
-# if !defined(MAD_F_MLA)
-# define MAD_F_ML0(hi, lo, x, y) ((lo) = mad_f_mul((x), (y)))
-# define MAD_F_MLA(hi, lo, x, y) ((lo) += mad_f_mul((x), (y)))
-# define MAD_F_MLN(hi, lo) ((lo) = -(lo))
-# define MAD_F_MLZ(hi, lo) ((void) (hi), (mad_fixed_t) (lo))
-# endif
-
-# if !defined(MAD_F_ML0)
-# define MAD_F_ML0(hi, lo, x, y) MAD_F_MLX((hi), (lo), (x), (y))
-# endif
-
-# if !defined(MAD_F_MLN)
-# define MAD_F_MLN(hi, lo) ((hi) = ((lo) = -(lo)) ? ~(hi) : -(hi))
-# endif
-
-# if !defined(MAD_F_MLZ)
-# define MAD_F_MLZ(hi, lo) mad_f_scale64((hi), (lo))
-# endif
-
-# if !defined(mad_f_scale64)
-# if defined(OPT_ACCURACY)
-# define mad_f_scale64(hi, lo) \
- ((((mad_fixed_t) \
- (((hi) << (32 - (MAD_F_SCALEBITS - 1))) | \
- ((lo) >> (MAD_F_SCALEBITS - 1)))) + 1) >> 1)
-# else
-# define mad_f_scale64(hi, lo) \
- ((mad_fixed_t) \
- (((hi) << (32 - MAD_F_SCALEBITS)) | \
- ((lo) >> MAD_F_SCALEBITS)))
-# endif
-# define MAD_F_SCALEBITS MAD_F_FRACBITS
-# endif
-
-/* C routines */
-
-mad_fixed_t mad_f_abs(mad_fixed_t);
-mad_fixed_t mad_f_div(mad_fixed_t, mad_fixed_t);
-
-# endif
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libmad/frame.c
--- a/src/libmad/frame.c Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,503 +0,0 @@
-/*
- * libmad - MPEG audio decoder library
- * Copyright (C) 2000-2004 Underbit Technologies, Inc.
- *
- * This program 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.
- *
- * This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: frame.c,v 1.3 2004/04/22 00:22:36 miguelfreitas Exp $
- */
-
-# ifdef HAVE_CONFIG_H
-# include "config.h"
-# endif
-
-# include "global.h"
-
-# include <stdlib.h>
-
-# include "bit.h"
-# include "stream.h"
-# include "frame.h"
-# include "timer.h"
-# include "layer12.h"
-# include "layer3.h"
-
-static
-unsigned long const bitrate_table[5][15] = {
- /* MPEG-1 */
- { 0, 32000, 64000, 96000, 128000, 160000, 192000, 224000, /* Layer I */
- 256000, 288000, 320000, 352000, 384000, 416000, 448000 },
- { 0, 32000, 48000, 56000, 64000, 80000, 96000, 112000, /* Layer II */
- 128000, 160000, 192000, 224000, 256000, 320000, 384000 },
- { 0, 32000, 40000, 48000, 56000, 64000, 80000, 96000, /* Layer III */
- 112000, 128000, 160000, 192000, 224000, 256000, 320000 },
-
- /* MPEG-2 LSF */
- { 0, 32000, 48000, 56000, 64000, 80000, 96000, 112000, /* Layer I */
- 128000, 144000, 160000, 176000, 192000, 224000, 256000 },
- { 0, 8000, 16000, 24000, 32000, 40000, 48000, 56000, /* Layers */
- 64000, 80000, 96000, 112000, 128000, 144000, 160000 } /* II & III */
-};
-
-static
-unsigned int const samplerate_table[3] = { 44100, 48000, 32000 };
-
-static
-int (*const decoder_table[3])(struct mad_stream *, struct mad_frame *) = {
- mad_layer_I,
- mad_layer_II,
- mad_layer_III
-};
-
-/*
- * NAME: header->init()
- * DESCRIPTION: initialize header struct
- */
-void mad_header_init(struct mad_header *header)
-{
- header->layer = 0;
- header->mode = 0;
- header->mode_extension = 0;
- header->emphasis = 0;
-
- header->bitrate = 0;
- header->samplerate = 0;
-
- header->crc_check = 0;
- header->crc_target = 0;
-
- header->flags = 0;
- header->private_bits = 0;
-
- header->duration = mad_timer_zero;
-}
-
-/*
- * NAME: frame->init()
- * DESCRIPTION: initialize frame struct
- */
-void mad_frame_init(struct mad_frame *frame)
-{
- mad_header_init(&frame->header);
-
- frame->options = 0;
-
- frame->overlap = 0;
- mad_frame_mute(frame);
-}
-
-/*
- * NAME: frame->finish()
- * DESCRIPTION: deallocate any dynamic memory associated with frame
- */
-void mad_frame_finish(struct mad_frame *frame)
-{
- mad_header_finish(&frame->header);
-
- if (frame->overlap) {
- free(frame->overlap);
- frame->overlap = 0;
- }
-}
-
-/*
- * NAME: decode_header()
- * DESCRIPTION: read header data and following CRC word
- */
-static
-int decode_header(struct mad_header *header, struct mad_stream *stream)
-{
- unsigned int index;
-
- header->flags = 0;
[... 251 lines omitted ...]
-
- /* calculate free bit rate */
- if (header->bitrate == 0) {
- if ((stream->freerate == 0 || !stream->sync ||
- (header->layer == MAD_LAYER_III && stream->freerate > 640000)) &&
- free_bitrate(stream, header) == -1)
- goto fail;
-
- header->bitrate = stream->freerate;
- header->flags |= MAD_FLAG_FREEFORMAT;
- }
-
- /* calculate beginning of next frame */
- pad_slot = (header->flags & MAD_FLAG_PADDING) ? 1 : 0;
-
- if (header->layer == MAD_LAYER_I)
- N = ((12 * header->bitrate / header->samplerate) + pad_slot) * 4;
- else {
- unsigned int slots_per_frame;
-
- slots_per_frame = (header->layer == MAD_LAYER_III &&
- (header->flags & MAD_FLAG_LSF_EXT)) ? 72 : 144;
-
- N = (slots_per_frame * header->bitrate / header->samplerate) + pad_slot;
- }
-
- /* verify there is enough data left in buffer to decode this frame */
- if (N + MAD_BUFFER_GUARD > end - stream->this_frame) {
- stream->next_frame = stream->this_frame;
-
- stream->error = MAD_ERROR_BUFLEN;
- goto fail;
- }
-
- stream->next_frame = stream->this_frame + N;
-
- if (!stream->sync) {
- /* check that a valid frame header follows this frame */
-
- ptr = stream->next_frame;
- if (!(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0)) {
- ptr = stream->next_frame = stream->this_frame + 1;
- goto sync;
- }
-
- stream->sync = 1;
- }
-
- header->flags |= MAD_FLAG_INCOMPLETE;
-
- return 0;
-
- fail:
- stream->sync = 0;
-
- return -1;
-}
-
-/*
- * NAME: frame->decode()
- * DESCRIPTION: decode a single frame from a bitstream
- */
-int mad_frame_decode(struct mad_frame *frame, struct mad_stream *stream)
-{
- frame->options = stream->options;
-
- /* header() */
- /* error_check() */
-
- if (!(frame->header.flags & MAD_FLAG_INCOMPLETE) &&
- mad_header_decode(&frame->header, stream) == -1)
- goto fail;
-
- /* audio_data() */
-
- frame->header.flags &= ~MAD_FLAG_INCOMPLETE;
-
- if (decoder_table[frame->header.layer - 1](stream, frame) == -1) {
- if (!MAD_RECOVERABLE(stream->error))
- stream->next_frame = stream->this_frame;
-
- goto fail;
- }
-
- /* ancillary_data() */
-
- if (frame->header.layer != MAD_LAYER_III) {
- struct mad_bitptr next_frame;
-
- mad_bit_init(&next_frame, stream->next_frame);
-
- stream->anc_ptr = stream->ptr;
- stream->anc_bitlen = mad_bit_length(&stream->ptr, &next_frame);
-
- mad_bit_finish(&next_frame);
- }
-
- return 0;
-
- fail:
- stream->anc_bitlen = 0;
- return -1;
-}
-
-/*
- * NAME: frame->mute()
- * DESCRIPTION: zero all subband values so the frame becomes silent
- */
-void mad_frame_mute(struct mad_frame *frame)
-{
- unsigned int s, sb;
-
- for (s = 0; s < 36; ++s) {
- for (sb = 0; sb < 32; ++sb) {
- frame->sbsample[0][s][sb] =
- frame->sbsample[1][s][sb] = 0;
- }
- }
-
- if (frame->overlap) {
- for (s = 0; s < 18; ++s) {
- for (sb = 0; sb < 32; ++sb) {
- (*frame->overlap)[0][sb][s] =
- (*frame->overlap)[1][sb][s] = 0;
- }
- }
- }
-}
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libmad/frame.h
--- a/src/libmad/frame.h Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,118 +0,0 @@
-/*
- * libmad - MPEG audio decoder library
- * Copyright (C) 2000-2004 Underbit Technologies, Inc.
- *
- * This program 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.
- *
- * This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: frame.h,v 1.3 2004/04/22 00:22:36 miguelfreitas Exp $
- */
-
-# ifndef LIBMAD_FRAME_H
-# define LIBMAD_FRAME_H
-
-# include "fixed.h"
-# include "timer.h"
-# include "stream.h"
-
-enum mad_layer {
- MAD_LAYER_I = 1, /* Layer I */
- MAD_LAYER_II = 2, /* Layer II */
- MAD_LAYER_III = 3 /* Layer III */
-};
-
-enum mad_mode {
- MAD_MODE_SINGLE_CHANNEL = 0, /* single channel */
- MAD_MODE_DUAL_CHANNEL = 1, /* dual channel */
- MAD_MODE_JOINT_STEREO = 2, /* joint (MS/intensity) stereo */
- MAD_MODE_STEREO = 3 /* normal LR stereo */
-};
-
-enum mad_emphasis {
- MAD_EMPHASIS_NONE = 0, /* no emphasis */
- MAD_EMPHASIS_50_15_US = 1, /* 50/15 microseconds emphasis */
- MAD_EMPHASIS_CCITT_J_17 = 3, /* CCITT J.17 emphasis */
- MAD_EMPHASIS_RESERVED = 2 /* unknown emphasis */
-};
-
-struct mad_header {
- enum mad_layer layer; /* audio layer (1, 2, or 3) */
- enum mad_mode mode; /* channel mode (see above) */
- int mode_extension; /* additional mode info */
- enum mad_emphasis emphasis; /* de-emphasis to use (see above) */
-
- unsigned long bitrate; /* stream bitrate (bps) */
- unsigned int samplerate; /* sampling frequency (Hz) */
-
- unsigned short crc_check; /* frame CRC accumulator */
- unsigned short crc_target; /* final target CRC checksum */
-
- int flags; /* flags (see below) */
- int private_bits; /* private bits (see below) */
-
- mad_timer_t duration; /* audio playing time of frame */
-};
-
-struct mad_frame {
- struct mad_header header; /* MPEG audio header */
-
- int options; /* decoding options (from stream) */
-
- mad_fixed_t sbsample[2][36][32]; /* synthesis subband filter samples */
- mad_fixed_t (*overlap)[2][32][18]; /* Layer III block overlap data */
-};
-
-# define MAD_NCHANNELS(header) ((header)->mode ? 2 : 1)
-# define MAD_NSBSAMPLES(header) \
- ((header)->layer == MAD_LAYER_I ? 12 : \
- (((header)->layer == MAD_LAYER_III && \
- ((header)->flags & MAD_FLAG_LSF_EXT)) ? 18 : 36))
-
-enum {
- MAD_FLAG_NPRIVATE_III = 0x0007, /* number of Layer III private bits */
- MAD_FLAG_INCOMPLETE = 0x0008, /* header but not data is decoded */
-
- MAD_FLAG_PROTECTION = 0x0010, /* frame has CRC protection */
- MAD_FLAG_COPYRIGHT = 0x0020, /* frame is copyright */
- MAD_FLAG_ORIGINAL = 0x0040, /* frame is original (else copy) */
- MAD_FLAG_PADDING = 0x0080, /* frame has additional slot */
-
- MAD_FLAG_I_STEREO = 0x0100, /* uses intensity joint stereo */
- MAD_FLAG_MS_STEREO = 0x0200, /* uses middle/side joint stereo */
- MAD_FLAG_FREEFORMAT = 0x0400, /* uses free format bitrate */
-
- MAD_FLAG_LSF_EXT = 0x1000, /* lower sampling freq. extension */
- MAD_FLAG_MC_EXT = 0x2000, /* multichannel audio extension */
- MAD_FLAG_MPEG_2_5_EXT = 0x4000 /* MPEG 2.5 (unofficial) extension */
-};
-
-enum {
- MAD_PRIVATE_HEADER = 0x0100, /* header private bit */
- MAD_PRIVATE_III = 0x001f /* Layer III private bits (up to 5) */
-};
-
-void mad_header_init(struct mad_header *);
-
-# define mad_header_finish(header) /* nothing */
-
-int mad_header_decode(struct mad_header *, struct mad_stream *);
-
-void mad_frame_init(struct mad_frame *);
-void mad_frame_finish(struct mad_frame *);
-
-int mad_frame_decode(struct mad_frame *, struct mad_stream *);
-
-void mad_frame_mute(struct mad_frame *);
-
-# endif
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libmad/global.h
--- a/src/libmad/global.h Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-/*
- * libmad - MPEG audio decoder library
- * Copyright (C) 2000-2004 Underbit Technologies, Inc.
- *
- * This program 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.
- *
- * This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: global.h,v 1.4 2004/04/22 00:22:36 miguelfreitas Exp $
- */
-
-# ifndef LIBMAD_GLOBAL_H
-# define LIBMAD_GLOBAL_H
-
-/* conditional debugging */
-
-# if defined(DEBUG) && defined(NDEBUG)
-# error "cannot define both DEBUG and NDEBUG"
-# endif
-
-# if defined(DEBUG)
-# include <stdio.h>
-# endif
-
-/* conditional features */
-
-# if defined(OPT_SPEED) && defined(OPT_ACCURACY)
-# error "cannot optimize for both speed and accuracy"
-# endif
-
-# if defined(OPT_SPEED) && !defined(OPT_SSO)
-# define OPT_SSO
-# endif
-
-# if defined(HAVE_UNISTD_H) && defined(HAVE_WAITPID) && \
- defined(HAVE_FCNTL) && defined(HAVE_PIPE) && defined(HAVE_FORK)
-# define USE_ASYNC
-# endif
-
-# if !defined(HAVE_ASSERT_H)
-# if defined(NDEBUG)
-# define assert(x) /* nothing */
-# else
-# define assert(x) do { if (!(x)) abort(); } while (0)
-# endif
-# endif
-
-# endif
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libmad/huffman.c
--- a/src/libmad/huffman.c Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3109 +0,0 @@
-/*
- * libmad - MPEG audio decoder library
- * Copyright (C) 2000-2004 Underbit Technologies, Inc.
- *
- * This program 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.
- *
- * This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: huffman.c,v 1.4 2004/04/22 00:22:36 miguelfreitas Exp $
- */
-
-# ifdef HAVE_CONFIG_H
-# include "config.h"
-# endif
-
-# include "global.h"
-
-# include "huffman.h"
-
-/*
- * These are the Huffman code words for Layer III.
- * The data for these tables are derived from Table B.7 of ISO/IEC 11172-3.
- *
- * These tables support decoding up to 4 Huffman code bits at a time.
- */
-
-# if defined(__GNUC__) || \
- (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901)
-# define PTR(offs, bits) { .ptr = { 0, bits, offs } }
-# define V(v, w, x, y, hlen) { .value = { 1, hlen, v, w, x, y } }
-# else
-# define PTR(offs, bits) { { 0, bits, offs } }
-# if defined(WORDS_BIGENDIAN)
-# define V(v, w, x, y, hlen) { { 1, hlen, (v << 11) | (w << 10) | \
- (x << 9) | (y << 8) } }
-# else
-# define V(v, w, x, y, hlen) { { 1, hlen, (v << 0) | (w << 1) | \
- (x << 2) | (y << 3) } }
-# endif
-# endif
-
-static
-union huffquad const hufftabA[] = {
- /* 0000 */ PTR(16, 2),
- /* 0001 */ PTR(20, 2),
- /* 0010 */ PTR(24, 1),
- /* 0011 */ PTR(26, 1),
- /* 0100 */ V(0, 0, 1, 0, 4),
- /* 0101 */ V(0, 0, 0, 1, 4),
- /* 0110 */ V(0, 1, 0, 0, 4),
- /* 0111 */ V(1, 0, 0, 0, 4),
- /* 1000 */ V(0, 0, 0, 0, 1),
- /* 1001 */ V(0, 0, 0, 0, 1),
- /* 1010 */ V(0, 0, 0, 0, 1),
- /* 1011 */ V(0, 0, 0, 0, 1),
- /* 1100 */ V(0, 0, 0, 0, 1),
- /* 1101 */ V(0, 0, 0, 0, 1),
- /* 1110 */ V(0, 0, 0, 0, 1),
- /* 1111 */ V(0, 0, 0, 0, 1),
-
- /* 0000 ... */
- /* 00 */ V(1, 0, 1, 1, 2), /* 16 */
- /* 01 */ V(1, 1, 1, 1, 2),
- /* 10 */ V(1, 1, 0, 1, 2),
- /* 11 */ V(1, 1, 1, 0, 2),
-
- /* 0001 ... */
- /* 00 */ V(0, 1, 1, 1, 2), /* 20 */
- /* 01 */ V(0, 1, 0, 1, 2),
- /* 10 */ V(1, 0, 0, 1, 1),
- /* 11 */ V(1, 0, 0, 1, 1),
-
- /* 0010 ... */
- /* 0 */ V(0, 1, 1, 0, 1), /* 24 */
- /* 1 */ V(0, 0, 1, 1, 1),
-
- /* 0011 ... */
- /* 0 */ V(1, 0, 1, 0, 1), /* 26 */
- /* 1 */ V(1, 1, 0, 0, 1)
-};
-
-static
-union huffquad const hufftabB[] = {
- /* 0000 */ V(1, 1, 1, 1, 4),
- /* 0001 */ V(1, 1, 1, 0, 4),
- /* 0010 */ V(1, 1, 0, 1, 4),
- /* 0011 */ V(1, 1, 0, 0, 4),
- /* 0100 */ V(1, 0, 1, 1, 4),
- /* 0101 */ V(1, 0, 1, 0, 4),
- /* 0110 */ V(1, 0, 0, 1, 4),
- /* 0111 */ V(1, 0, 0, 0, 4),
- /* 1000 */ V(0, 1, 1, 1, 4),
- /* 1001 */ V(0, 1, 1, 0, 4),
- /* 1010 */ V(0, 1, 0, 1, 4),
- /* 1011 */ V(0, 1, 0, 0, 4),
- /* 1100 */ V(0, 0, 1, 1, 4),
- /* 1101 */ V(0, 0, 1, 0, 4),
- /* 1110 */ V(0, 0, 0, 1, 4),
- /* 1111 */ V(0, 0, 0, 0, 4)
-};
-
-# undef V
-# undef PTR
-
-# if defined(__GNUC__) || \
- (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901)
-# define PTR(offs, bits) { .ptr = { 0, bits, offs } }
-# define V(x, y, hlen) { .value = { 1, hlen, x, y } }
-# else
-# define PTR(offs, bits) { { 0, bits, offs } }
-# if defined(WORDS_BIGENDIAN)
-# define V(x, y, hlen) { { 1, hlen, (x << 8) | (y << 4) } }
-# else
-# define V(x, y, hlen) { { 1, hlen, (x << 0) | (y << 4) } }
[... 2857 lines omitted ...]
- /* 1 */ V(10, 2, 1),
-
- /* 0101 1100 ... */
- /* 0 */ V(10, 1, 1), /* 342 */
- /* 1 */ V(6, 8, 1),
-
- /* 0101 1101 ... */
- /* 0 */ V(8, 6, 1), /* 344 */
- /* 1 */ V(7, 7, 1),
-
- /* 0101 1110 ... */
- /* 0 */ V(4, 9, 1), /* 346 */
- /* 1 */ V(9, 4, 1),
-
- /* 0101 1111 ... */
- /* 0 */ V(3, 9, 1), /* 348 */
- /* 1 */ V(9, 3, 1),
-
- /* 0110 0000 ... */
- /* 0 */ V(5, 8, 1), /* 350 */
- /* 1 */ V(8, 5, 1),
-
- /* 0110 0001 ... */
- /* 0 */ V(2, 9, 1), /* 352 */
- /* 1 */ V(6, 7, 1),
-
- /* 0110 0010 ... */
- /* 0 */ V(7, 6, 1), /* 354 */
- /* 1 */ V(9, 2, 1),
-
- /* 0110 0011 ... */
- /* 0 */ V(1, 9, 1), /* 356 */
- /* 1 */ V(9, 1, 1),
-
- /* 0110 0100 ... */
- /* 0 */ V(4, 8, 1), /* 358 */
- /* 1 */ V(8, 4, 1),
-
- /* 0110 0101 ... */
- /* 0 */ V(5, 7, 1), /* 360 */
- /* 1 */ V(7, 5, 1),
-
- /* 0110 0110 ... */
- /* 0 */ V(3, 8, 1), /* 362 */
- /* 1 */ V(8, 3, 1),
-
- /* 0110 0111 ... */
- /* 0 */ V(6, 6, 1), /* 364 */
- /* 1 */ V(2, 8, 1),
-
- /* 0110 1000 ... */
- /* 0 */ V(8, 2, 1), /* 366 */
- /* 1 */ V(1, 8, 1),
-
- /* 0110 1001 ... */
- /* 0 */ V(4, 7, 1), /* 368 */
- /* 1 */ V(7, 4, 1),
-
- /* 0110 1010 ... */
- /* 00 */ V(8, 1, 1), /* 370 */
- /* 01 */ V(8, 1, 1),
- /* 10 */ V(0, 8, 2),
- /* 11 */ V(8, 0, 2),
-
- /* 0110 1011 ... */
- /* 0 */ V(5, 6, 1), /* 374 */
- /* 1 */ V(6, 5, 1),
-
- /* 0110 1100 ... */
- /* 00 */ V(1, 7, 1), /* 376 */
- /* 01 */ V(1, 7, 1),
- /* 10 */ V(0, 7, 2),
- /* 11 */ V(7, 0, 2),
-
- /* 0110 1110 ... */
- /* 0 */ V(3, 7, 1), /* 380 */
- /* 1 */ V(2, 7, 1),
-
- /* 0111 1100 ... */
- /* 0 */ V(0, 6, 1), /* 382 */
- /* 1 */ V(6, 0, 1),
-
- /* 1000 0011 ... */
- /* 0 */ V(0, 5, 1), /* 384 */
- /* 1 */ V(5, 0, 1)
-};
-
-# undef V
-# undef PTR
-
-/* external tables */
-
-union huffquad const *const mad_huff_quad_table[2] = { hufftabA, hufftabB };
-
-struct hufftable const mad_huff_pair_table[32] = {
- /* 0 */ { hufftab0, 0, 0 },
- /* 1 */ { hufftab1, 0, 3 },
- /* 2 */ { hufftab2, 0, 3 },
- /* 3 */ { hufftab3, 0, 3 },
- /* 4 */ { 0 /* not used */ },
- /* 5 */ { hufftab5, 0, 3 },
- /* 6 */ { hufftab6, 0, 4 },
- /* 7 */ { hufftab7, 0, 4 },
- /* 8 */ { hufftab8, 0, 4 },
- /* 9 */ { hufftab9, 0, 4 },
- /* 10 */ { hufftab10, 0, 4 },
- /* 11 */ { hufftab11, 0, 4 },
- /* 12 */ { hufftab12, 0, 4 },
- /* 13 */ { hufftab13, 0, 4 },
- /* 14 */ { 0 /* not used */ },
- /* 15 */ { hufftab15, 0, 4 },
- /* 16 */ { hufftab16, 1, 4 },
- /* 17 */ { hufftab16, 2, 4 },
- /* 18 */ { hufftab16, 3, 4 },
- /* 19 */ { hufftab16, 4, 4 },
- /* 20 */ { hufftab16, 6, 4 },
- /* 21 */ { hufftab16, 8, 4 },
- /* 22 */ { hufftab16, 10, 4 },
- /* 23 */ { hufftab16, 13, 4 },
- /* 24 */ { hufftab24, 4, 4 },
- /* 25 */ { hufftab24, 5, 4 },
- /* 26 */ { hufftab24, 6, 4 },
- /* 27 */ { hufftab24, 7, 4 },
- /* 28 */ { hufftab24, 8, 4 },
- /* 29 */ { hufftab24, 9, 4 },
- /* 30 */ { hufftab24, 11, 4 },
- /* 31 */ { hufftab24, 13, 4 }
-};
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libmad/huffman.h
--- a/src/libmad/huffman.h Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-/*
- * libmad - MPEG audio decoder library
- * Copyright (C) 2000-2004 Underbit Technologies, Inc.
- *
- * This program 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.
- *
- * This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: huffman.h,v 1.4 2004/04/22 00:22:41 miguelfreitas Exp $
- */
-
-# ifndef LIBMAD_HUFFMAN_H
-# define LIBMAD_HUFFMAN_H
-
-union huffquad {
- struct {
- unsigned short final : 1;
- unsigned short bits : 3;
- unsigned short offset : 12;
- } ptr;
- struct {
- unsigned short final : 1;
- unsigned short hlen : 3;
- unsigned short v : 1;
- unsigned short w : 1;
- unsigned short x : 1;
- unsigned short y : 1;
- } value;
- unsigned short final : 1;
-};
-
-union huffpair {
- struct {
- unsigned short final : 1;
- unsigned short bits : 3;
- unsigned short offset : 12;
- } ptr;
- struct {
- unsigned short final : 1;
- unsigned short hlen : 3;
- unsigned short x : 4;
- unsigned short y : 4;
- } value;
- unsigned short final : 1;
-};
-
-struct hufftable {
- union huffpair const *table;
- unsigned short linbits;
- unsigned short startbits;
-};
-
-extern union huffquad const *const mad_huff_quad_table[2];
-extern struct hufftable const mad_huff_pair_table[32];
-
-# endif
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libmad/imdct_l_arm.S
--- a/src/libmad/imdct_l_arm.S Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1000 +0,0 @@
-/*****************************************************************************
-* Copyright (C) 2000-2001 Andre McCurdy <armccurdy@yahoo.co.uk>
-*
-* This program 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.
-*
-* This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*
-*****************************************************************************
-*
-* Notes:
-*
-*
-*****************************************************************************
-*
-* $Id: imdct_l_arm.S,v 1.1 2002/04/30 18:46:58 miguelfreitas Exp $
-*
-* 2001/03/24: Andre McCurdy <armccurdy@yahoo.co.uk>
-* - Corrected PIC unsafe loading of address of 'imdct36_long_karray'
-*
-* 2000/09/20: Robert Leslie <rob@mars.org>
-* - Added a global symbol with leading underscore per suggestion of
-* Simon Burge to support linking with the a.out format.
-*
-* 2000/09/15: Robert Leslie <rob@mars.org>
-* - Fixed a small bug where flags were changed before a conditional branch.
-*
-* 2000/09/15: Andre McCurdy <armccurdy@yahoo.co.uk>
-* - Applied Nicolas Pitre's rounding optimisation in all remaining places.
-*
-* 2000/09/09: Nicolas Pitre <nico@cam.org>
-* - Optimized rounding + scaling operations.
-*
-* 2000/08/09: Andre McCurdy <armccurdy@yahoo.co.uk>
-* - Original created.
-*
-****************************************************************************/
-
-
-/*
- On entry:
-
- r0 = pointer to 18 element input array
- r1 = pointer to 36 element output array
- r2 = windowing block type
-
-
- Stack frame created during execution of the function:
-
- Initial Holds:
- Stack
- pointer
- minus:
-
- 0
- 4 lr
- 8 r11
- 12 r10
- 16 r9
- 20 r8
- 24 r7
- 28 r6
- 32 r5
- 36 r4
-
- 40 r2 : windowing block type
-
- 44 ct00 high
- 48 ct00 low
- 52 ct01 high
- 56 ct01 low
- 60 ct04 high
- 64 ct04 low
- 68 ct06 high
- 72 ct06 low
- 76 ct05 high
- 80 ct05 low
- 84 ct03 high
- 88 ct03 low
- 92 -ct05 high
- 96 -ct05 low
- 100 -ct07 high
- 104 -ct07 low
- 108 ct07 high
- 112 ct07 low
- 116 ct02 high
- 120 ct02 low
-*/
-
-#define BLOCK_MODE_NORMAL 0
-#define BLOCK_MODE_START 1
-#define BLOCK_MODE_STOP 3
-
-
-#define X0 0x00
-#define X1 0x04
-#define X2 0x08
-#define X3 0x0C
-#define X4 0x10
-#define X5 0x14
-#define X6 0x18
-#define X7 0x1c
-#define X8 0x20
-#define X9 0x24
-#define X10 0x28
-#define X11 0x2c
-#define X12 0x30
-#define X13 0x34
-#define X14 0x38
-#define X15 0x3c
-#define X16 0x40
-#define X17 0x44
-
-#define x0 0x00
-#define x1 0x04
[... 748 lines omitted ...]
- @ r10 = -x8
- @ r11 = window mode: (0 == normal), (1 == start block), (3 == stop block)
- @ r12 = -x7
- @ lr = -x6
-
- smull r5, r6, r0, r7 @ r5..r6 = (window_l[1] * x[6])
- ldr r2, =WL4 @ r2 = window_l[4] == window_s[1]
- movs r5, r5, lsr #28
- adc r7, r5, r6, lsl #4 @ r7 = bits[59..28] of windowed x6
-
- smull r5, r6, r2, r8 @ r5..r6 = (window_l[4] * x[7])
- ldr r3, =WL7 @ r3 = window_l[7] == window_s[2]
- movs r5, r5, lsr #28
- adc r8, r5, r6, lsl #4 @ r8 = bits[59..28] of windowed x7
-
- smull r5, r6, r3, r9 @ r5..r6 = (window_l[7] * x[8])
- ldr r4, =WL10 @ r4 = window_l[10] == window_s[3]
- movs r5, r5, lsr #28
- adc r9, r5, r6, lsl #4 @ r9 = bits[59..28] of windowed x8
-
- smull r5, r6, r4, r10 @ r5..r6 = (window_l[10] * (x[9] == -x[8]))
- ldr r0, =WL13 @ r0 = window_l[13] == window_s[4]
- movs r5, r5, lsr #28
- adc r10, r5, r6, lsl #4 @ r10 = bits[59..28] of windowed x9
-
- smull r5, r6, r0, r12 @ r5..r6 = (window_l[13] * (x[10] == -x[7]))
- ldr r2, =WL16 @ r2 = window_l[16] == window_s[5]
- movs r5, r5, lsr #28
- adc r12, r5, r6, lsl #4 @ r10 = bits[59..28] of windowed x9
-
- smull r5, r6, r2, lr @ r5..r6 = (window_l[16] * (x[11] == -x[6]))
-
- ldr r0, =0x00
-
- movs r5, r5, lsr #28
- adc lr, r5, r6, lsl #4 @ r10 = bits[59..28] of windowed x9
-
- stmdb r1!, { r7 - r10, r12, lr } @ store windowed x[6] .. x[11]
-
- ldr r5, =0x00
- ldr r6, =0x00
- ldr r2, =0x00
- ldr r3, =0x00
- ldr r4, =0x00
-
- stmdb r1!, { r0, r2 - r6 } @ store windowed x[0] .. x[5]
-
- b normal_block_x18_to_x35
-
-
- @----
-
-
-start_block_x18_to_x35:
-
- ldr r4, =WL1 @ r0 = window_l[1] == window_s[0]
-
- add r1, r1, #(24*4) @ r1 = &x[24]
-
- ldmia r1, { r0, r2, r3 } @ load 3 words from x24, dont update pointer
-
- @ r0 = x24
- @ r1 = &x[24]
- @ r2 = x25
- @ r3 = x26
- @ r4 = WL1
- @ r5 = WL4
- @ r6 = WL7
- @ r7 = WL10
- @ r8 = WL13
- @ r9 = WL16
- @ r10 = .
- @ r11 = .
- @ r12 = .
- @ lr = .
-
- ldr r5, =WL4 @ r5 = window_l[4] == window_s[1]
-
- smull r10, r11, r4, r0 @ r10..r11 = (window_l[1] * (x[24] == \
x[29]))
- ldr r6, =WL7 @ r6 = window_l[7] == window_s[2]
- movs r10, r10, lsr #28
- adc lr, r10, r11, lsl #4 @ lr = bits[59..28] of windowed x29
-
- smull r10, r11, r5, r2 @ r10..r11 = (window_l[4] * (x[25] == \
x[28]))
- ldr r7, =WL10 @ r7 = window_l[10] == window_s[3]
- movs r10, r10, lsr #28
- adc r12, r10, r11, lsl #4 @ r12 = bits[59..28] of windowed x28
-
- smull r10, r11, r6, r3 @ r10..r11 = (window_l[7] * (x[26] == \
x[27]))
- ldr r8, =WL13 @ r8 = window_l[13] == window_s[4]
- movs r10, r10, lsr #28
- adc r4, r10, r11, lsl #4 @ r4 = bits[59..28] of windowed x27
-
- smull r10, r11, r7, r3 @ r10..r11 = (window_l[10] * x[26])
- ldr r9, =WL16 @ r9 = window_l[16] == window_s[5]
- movs r10, r10, lsr #28
- adc r3, r10, r11, lsl #4 @ r3 = bits[59..28] of windowed x26
-
- smull r10, r11, r8, r2 @ r10..r11 = (window_l[13] * x[25])
- ldr r5, =0x00
- movs r10, r10, lsr #28
- adc r2, r10, r11, lsl #4 @ r2 = bits[59..28] of windowed x25
-
- smull r10, r11, r9, r0 @ r10..r11 = (window_l[16] * x[24])
- ldr r6, =0x00
- movs r10, r10, lsr #28
- adc r0, r10, r11, lsl #4 @ r0 = bits[59..28] of windowed x24
-
- stmia r1!, { r0, r2, r3, r4, r12, lr } @ store windowed x[24] .. x[29]
-
- ldr r7, =0x00
- ldr r8, =0x00
- ldr r9, =0x00
- ldr r10, =0x00
-
- stmia r1!, { r5 - r10 } @ store windowed x[30] .. x[35]
-
- @----
- @ NB there are 2 possible exits from this function - this is only one of them
- @----
-
- add sp, sp, #(21*4) @ return stack frame
- ldmia sp!, { r4 - r11, pc } @ restore callee saved regs, and return
-
- @----
- @END
- @----
-
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libmad/imdct_s.dat
--- a/src/libmad/imdct_s.dat Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-/*
- * libmad - MPEG audio decoder library
- * Copyright (C) 2000-2004 Underbit Technologies, Inc.
- *
- * This program 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.
- *
- * This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: imdct_s.dat,v 1.3 2004/04/22 00:22:41 miguelfreitas Exp $
- */
-
- /* 0 */ { MAD_F(0x09bd7ca0) /* 0.608761429 */,
- -MAD_F(0x0ec835e8) /* -0.923879533 */,
- -MAD_F(0x0216a2a2) /* -0.130526192 */,
- MAD_F(0x0fdcf549) /* 0.991444861 */,
- -MAD_F(0x061f78aa) /* -0.382683432 */,
- -MAD_F(0x0cb19346) /* -0.793353340 */ },
-
- /* 6 */ { -MAD_F(0x0cb19346) /* -0.793353340 */,
- MAD_F(0x061f78aa) /* 0.382683432 */,
- MAD_F(0x0fdcf549) /* 0.991444861 */,
- MAD_F(0x0216a2a2) /* 0.130526192 */,
- -MAD_F(0x0ec835e8) /* -0.923879533 */,
- -MAD_F(0x09bd7ca0) /* -0.608761429 */ },
-
- /* 1 */ { MAD_F(0x061f78aa) /* 0.382683432 */,
- -MAD_F(0x0ec835e8) /* -0.923879533 */,
- MAD_F(0x0ec835e8) /* 0.923879533 */,
- -MAD_F(0x061f78aa) /* -0.382683432 */,
- -MAD_F(0x061f78aa) /* -0.382683432 */,
- MAD_F(0x0ec835e8) /* 0.923879533 */ },
-
- /* 7 */ { -MAD_F(0x0ec835e8) /* -0.923879533 */,
- -MAD_F(0x061f78aa) /* -0.382683432 */,
- MAD_F(0x061f78aa) /* 0.382683432 */,
- MAD_F(0x0ec835e8) /* 0.923879533 */,
- MAD_F(0x0ec835e8) /* 0.923879533 */,
- MAD_F(0x061f78aa) /* 0.382683432 */ },
-
- /* 2 */ { MAD_F(0x0216a2a2) /* 0.130526192 */,
- -MAD_F(0x061f78aa) /* -0.382683432 */,
- MAD_F(0x09bd7ca0) /* 0.608761429 */,
- -MAD_F(0x0cb19346) /* -0.793353340 */,
- MAD_F(0x0ec835e8) /* 0.923879533 */,
- -MAD_F(0x0fdcf549) /* -0.991444861 */ },
-
- /* 8 */ { -MAD_F(0x0fdcf549) /* -0.991444861 */,
- -MAD_F(0x0ec835e8) /* -0.923879533 */,
- -MAD_F(0x0cb19346) /* -0.793353340 */,
- -MAD_F(0x09bd7ca0) /* -0.608761429 */,
- -MAD_F(0x061f78aa) /* -0.382683432 */,
- -MAD_F(0x0216a2a2) /* -0.130526192 */ }
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libmad/layer12.c
--- a/src/libmad/layer12.c Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,534 +0,0 @@
-/*
- * libmad - MPEG audio decoder library
- * Copyright (C) 2000-2004 Underbit Technologies, Inc.
- *
- * This program 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.
- *
- * This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: layer12.c,v 1.3 2004/04/22 00:22:41 miguelfreitas Exp $
- */
-
-# ifdef HAVE_CONFIG_H
-# include "config.h"
-# endif
-
-# include "global.h"
-
-# ifdef HAVE_LIMITS_H
-# include <limits.h>
-# else
-# define CHAR_BIT 8
-# endif
-
-# include "fixed.h"
-# include "bit.h"
-# include "stream.h"
-# include "frame.h"
-# include "layer12.h"
-
-/*
- * scalefactor table
- * used in both Layer I and Layer II decoding
- */
-static
-mad_fixed_t const sf_table[64] = {
-# include "sf_table.dat"
-};
-
-/* --- Layer I ------------------------------------------------------------- */
-
-/* linear scaling table */
-static
-mad_fixed_t const linear_table[14] = {
- MAD_F(0x15555555), /* 2^2 / (2^2 - 1) == 1.33333333333333 */
- MAD_F(0x12492492), /* 2^3 / (2^3 - 1) == 1.14285714285714 */
- MAD_F(0x11111111), /* 2^4 / (2^4 - 1) == 1.06666666666667 */
- MAD_F(0x10842108), /* 2^5 / (2^5 - 1) == 1.03225806451613 */
- MAD_F(0x10410410), /* 2^6 / (2^6 - 1) == 1.01587301587302 */
- MAD_F(0x10204081), /* 2^7 / (2^7 - 1) == 1.00787401574803 */
- MAD_F(0x10101010), /* 2^8 / (2^8 - 1) == 1.00392156862745 */
- MAD_F(0x10080402), /* 2^9 / (2^9 - 1) == 1.00195694716243 */
- MAD_F(0x10040100), /* 2^10 / (2^10 - 1) == 1.00097751710655 */
- MAD_F(0x10020040), /* 2^11 / (2^11 - 1) == 1.00048851978505 */
- MAD_F(0x10010010), /* 2^12 / (2^12 - 1) == 1.00024420024420 */
- MAD_F(0x10008004), /* 2^13 / (2^13 - 1) == 1.00012208521548 */
- MAD_F(0x10004001), /* 2^14 / (2^14 - 1) == 1.00006103888177 */
- MAD_F(0x10002000) /* 2^15 / (2^15 - 1) == 1.00003051850948 */
-};
-
-/*
- * NAME: I_sample()
- * DESCRIPTION: decode one requantized Layer I sample from a bitstream
- */
-static
-mad_fixed_t I_sample(struct mad_bitptr *ptr, unsigned int nb)
-{
- mad_fixed_t sample;
-
- sample = mad_bit_read(ptr, nb);
-
- /* invert most significant bit, extend sign, then scale to fixed format */
-
- sample ^= 1 << (nb - 1);
- sample |= -(sample & (1 << (nb - 1)));
-
- sample <<= MAD_F_FRACBITS - (nb - 1);
-
- /* requantize the sample */
-
- /* s'' = (2^nb / (2^nb - 1)) * (s''' + 2^(-nb + 1)) */
-
- sample += MAD_F_ONE >> (nb - 1);
-
- return mad_f_mul(sample, linear_table[nb - 2]);
-
- /* s' = factor * s'' */
- /* (to be performed by caller) */
-}
-
-/*
- * NAME: layer->I()
- * DESCRIPTION: decode a single Layer I frame
- */
-int mad_layer_I(struct mad_stream *stream, struct mad_frame *frame)
-{
- struct mad_header *header = &frame->header;
- unsigned int nch, bound, ch, s, sb, nb;
- unsigned char allocation[2][32], scalefactor[2][32];
-
- nch = MAD_NCHANNELS(header);
-
- bound = 32;
- if (header->mode == MAD_MODE_JOINT_STEREO) {
- header->flags |= MAD_FLAG_I_STEREO;
- bound = 4 + header->mode_extension * 4;
- }
-
- /* check CRC word */
-
- if (header->flags & MAD_FLAG_PROTECTION) {
- header->crc_check =
- mad_bit_crc(stream->ptr, 4 * (bound * nch + (32 - bound)),
- header->crc_check);
-
[... 282 lines omitted ...]
- }
-
- for (sb = bound; sb < sblimit; ++sb) {
- nbal = bitalloc_table[offsets[sb]].nbal;
-
- allocation[0][sb] =
- allocation[1][sb] = mad_bit_read(&stream->ptr, nbal);
- }
-
- /* decode scalefactor selection info */
-
- for (sb = 0; sb < sblimit; ++sb) {
- for (ch = 0; ch < nch; ++ch) {
- if (allocation[ch][sb])
- scfsi[ch][sb] = mad_bit_read(&stream->ptr, 2);
- }
- }
-
- /* check CRC word */
-
- if (header->flags & MAD_FLAG_PROTECTION) {
- header->crc_check =
- mad_bit_crc(start, mad_bit_length(&start, &stream->ptr),
- header->crc_check);
-
- if (header->crc_check != header->crc_target &&
- !(frame->options & MAD_OPTION_IGNORECRC)) {
- stream->error = MAD_ERROR_BADCRC;
- return -1;
- }
- }
-
- /* decode scalefactors */
-
- for (sb = 0; sb < sblimit; ++sb) {
- for (ch = 0; ch < nch; ++ch) {
- if (allocation[ch][sb]) {
- scalefactor[ch][sb][0] = mad_bit_read(&stream->ptr, 6);
-
- switch (scfsi[ch][sb]) {
- case 2:
- scalefactor[ch][sb][2] =
- scalefactor[ch][sb][1] =
- scalefactor[ch][sb][0];
- break;
-
- case 0:
- scalefactor[ch][sb][1] = mad_bit_read(&stream->ptr, 6);
- /* fall through */
-
- case 1:
- case 3:
- scalefactor[ch][sb][2] = mad_bit_read(&stream->ptr, 6);
- }
-
- if (scfsi[ch][sb] & 1)
- scalefactor[ch][sb][1] = scalefactor[ch][sb][scfsi[ch][sb] - 1];
-
-# if defined(OPT_STRICT)
- /*
- * Scalefactor index 63 does not appear in Table B.1 of
- * ISO/IEC 11172-3. Nonetheless, other implementations accept it,
- * so we only reject it if OPT_STRICT is defined.
- */
- if (scalefactor[ch][sb][0] == 63 ||
- scalefactor[ch][sb][1] == 63 ||
- scalefactor[ch][sb][2] == 63) {
- stream->error = MAD_ERROR_BADSCALEFACTOR;
- return -1;
- }
-# endif
- }
- }
- }
-
- /* decode samples */
-
- for (gr = 0; gr < 12; ++gr) {
- for (sb = 0; sb < bound; ++sb) {
- for (ch = 0; ch < nch; ++ch) {
- if ((index = allocation[ch][sb])) {
- index = offset_table[bitalloc_table[offsets[sb]].offset][index - 1];
-
- II_samples(&stream->ptr, &qc_table[index], samples);
-
- for (s = 0; s < 3; ++s) {
- frame->sbsample[ch][3 * gr + s][sb] =
- mad_f_mul(samples[s], sf_table[scalefactor[ch][sb][gr / 4]]);
- }
- }
- else {
- for (s = 0; s < 3; ++s)
- frame->sbsample[ch][3 * gr + s][sb] = 0;
- }
- }
- }
-
- for (sb = bound; sb < sblimit; ++sb) {
- if ((index = allocation[0][sb])) {
- index = offset_table[bitalloc_table[offsets[sb]].offset][index - 1];
-
- II_samples(&stream->ptr, &qc_table[index], samples);
-
- for (ch = 0; ch < nch; ++ch) {
- for (s = 0; s < 3; ++s) {
- frame->sbsample[ch][3 * gr + s][sb] =
- mad_f_mul(samples[s], sf_table[scalefactor[ch][sb][gr / 4]]);
- }
- }
- }
- else {
- for (ch = 0; ch < nch; ++ch) {
- for (s = 0; s < 3; ++s)
- frame->sbsample[ch][3 * gr + s][sb] = 0;
- }
- }
- }
-
- for (ch = 0; ch < nch; ++ch) {
- for (s = 0; s < 3; ++s) {
- for (sb = sblimit; sb < 32; ++sb)
- frame->sbsample[ch][3 * gr + s][sb] = 0;
- }
- }
- }
-
- return 0;
-}
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libmad/layer12.h
--- a/src/libmad/layer12.h Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-/*
- * libmad - MPEG audio decoder library
- * Copyright (C) 2000-2004 Underbit Technologies, Inc.
- *
- * This program 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.
- *
- * This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: layer12.h,v 1.3 2004/04/22 00:22:49 miguelfreitas Exp $
- */
-
-# ifndef LIBMAD_LAYER12_H
-# define LIBMAD_LAYER12_H
-
-# include "stream.h"
-# include "frame.h"
-
-int mad_layer_I(struct mad_stream *, struct mad_frame *);
-int mad_layer_II(struct mad_stream *, struct mad_frame *);
-
-# endif
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libmad/layer3.c
--- a/src/libmad/layer3.c Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2698 +0,0 @@
-/*
- * libmad - MPEG audio decoder library
- * Copyright (C) 2000-2004 Underbit Technologies, Inc.
- *
- * This program 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.
- *
- * This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: layer3.c,v 1.7 2006/09/26 00:12:20 dgp85 Exp $
- */
-
-# ifdef HAVE_CONFIG_H
-# include "config.h"
-# endif
-
-# include "global.h"
-
-# include <stdlib.h>
-# include <string.h>
-
-# ifdef HAVE_ASSERT_H
-# include <assert.h>
-# endif
-
-# ifdef HAVE_LIMITS_H
-# include <limits.h>
-# else
-# define CHAR_BIT 8
-# endif
-
-# include "fixed.h"
-# include "bit.h"
-# include "stream.h"
-# include "frame.h"
-# include "huffman.h"
-# include "layer3.h"
-
-/* --- Layer III ----------------------------------------------------------- */
-
-enum {
- count1table_select = 0x01,
- scalefac_scale = 0x02,
- preflag = 0x04,
- mixed_block_flag = 0x08
-};
-
-enum {
- I_STEREO = 0x1,
- MS_STEREO = 0x2
-};
-
-struct sideinfo {
- unsigned int main_data_begin;
- unsigned int private_bits;
-
- unsigned char scfsi[2];
-
- struct granule {
- struct channel {
- /* from side info */
- unsigned short part2_3_length;
- unsigned short big_values;
- unsigned short global_gain;
- unsigned short scalefac_compress;
-
- unsigned char flags;
- unsigned char block_type;
- unsigned char table_select[3];
- unsigned char subblock_gain[3];
- unsigned char region0_count;
- unsigned char region1_count;
-
- /* from main_data */
- unsigned char scalefac[39]; /* scalefac_l and/or scalefac_s */
- } ch[2];
- } gr[2];
-};
-
-/*
- * scalefactor bit lengths
- * derived from section 2.4.2.7 of ISO/IEC 11172-3
- */
-static
-struct {
- unsigned char slen1;
- unsigned char slen2;
-} const sflen_table[16] = {
- { 0, 0 }, { 0, 1 }, { 0, 2 }, { 0, 3 },
- { 3, 0 }, { 1, 1 }, { 1, 2 }, { 1, 3 },
- { 2, 1 }, { 2, 2 }, { 2, 3 }, { 3, 1 },
- { 3, 2 }, { 3, 3 }, { 4, 2 }, { 4, 3 }
-};
-
-/*
- * number of LSF scalefactor band values
- * derived from section 2.4.3.2 of ISO/IEC 13818-3
- */
-static
-unsigned char const nsfb_table[6][3][4] = {
- { { 6, 5, 5, 5 },
- { 9, 9, 9, 9 },
- { 6, 9, 9, 9 } },
-
- { { 6, 5, 7, 3 },
- { 9, 9, 12, 6 },
- { 6, 9, 12, 6 } },
-
- { { 11, 10, 0, 0 },
- { 18, 18, 0, 0 },
- { 15, 18, 0, 0 } },
-
- { { 7, 7, 7, 0 },
- { 12, 12, 12, 0 },
- { 6, 15, 12, 0 } },
[... 2446 lines omitted ...]
- /* decode frame side information */
-
- error = III_sideinfo(&stream->ptr, nch, header->flags & MAD_FLAG_LSF_EXT,
- &si, &data_bitlen, &priv_bitlen);
- if (error && result == 0) {
- stream->error = error;
- result = -1;
- }
-
- header->flags |= priv_bitlen;
- header->private_bits |= si.private_bits;
-
- /* find main_data of next frame */
-
- {
- struct mad_bitptr peek;
- unsigned long header;
-
- mad_bit_init(&peek, stream->next_frame);
-
- header = mad_bit_read(&peek, 32);
- if ((header & 0xffe60000L) /* syncword | layer */ == 0xffe20000L) {
- if (!(header & 0x00010000L)) /* protection_bit */
- mad_bit_skip(&peek, 16); /* crc_check */
-
- next_md_begin =
- mad_bit_read(&peek, (header & 0x00080000L) /* ID */ ? 9 : 8);
- }
-
- mad_bit_finish(&peek);
- }
-
- /* find main_data of this frame */
-
- frame_space = stream->next_frame - mad_bit_nextbyte(&stream->ptr);
-
- if (next_md_begin > si.main_data_begin + frame_space)
- next_md_begin = 0;
-
- md_len = si.main_data_begin + frame_space - next_md_begin;
-
- frame_used = 0;
-
- if (si.main_data_begin == 0) {
- ptr = stream->ptr;
- stream->md_len = 0;
-
- frame_used = md_len;
- }
- else {
- if (si.main_data_begin > stream->md_len) {
- if (result == 0) {
- stream->error = MAD_ERROR_BADDATAPTR;
- result = -1;
- }
- }
- else {
- mad_bit_init(&ptr,
- *stream->main_data + stream->md_len - si.main_data_begin);
-
- if (md_len > si.main_data_begin) {
- assert(stream->md_len + md_len -
- si.main_data_begin <= MAD_BUFFER_MDLEN);
-
- memcpy(*stream->main_data + stream->md_len,
- mad_bit_nextbyte(&stream->ptr),
- frame_used = md_len - si.main_data_begin);
- stream->md_len += frame_used;
- }
- }
- }
-
- frame_free = frame_space - frame_used;
-
- /* decode main_data */
-
- if (result == 0) {
- error = III_decode(&ptr, frame, &si, nch);
- if (error) {
- stream->error = error;
- result = -1;
- }
-
- /* designate ancillary bits */
-
- stream->anc_ptr = ptr;
- stream->anc_bitlen = md_len * CHAR_BIT - data_bitlen;
- }
-
-# if 0 && defined(DEBUG)
- fprintf(stderr,
- "main_data_begin:%u, md_len:%u, frame_free:%u, "
- "data_bitlen:%u, anc_bitlen: %u\n",
- si.main_data_begin, md_len, frame_free,
- data_bitlen, stream->anc_bitlen);
-# endif
-
- /* preload main_data buffer with up to 511 bytes for next frame(s) */
-
- if (frame_free >= next_md_begin) {
- memcpy(*stream->main_data,
- stream->next_frame - next_md_begin, next_md_begin);
- stream->md_len = next_md_begin;
- }
- else {
- if (md_len < si.main_data_begin) {
- unsigned int extra;
-
- extra = si.main_data_begin - md_len;
- if (extra + frame_free > next_md_begin)
- extra = next_md_begin - frame_free;
-
- if (extra < stream->md_len) {
- memmove(*stream->main_data,
- *stream->main_data + stream->md_len - extra, extra);
- stream->md_len = extra;
- }
- }
- else
- stream->md_len = 0;
-
- memcpy(*stream->main_data + stream->md_len,
- stream->next_frame - frame_free, frame_free);
- stream->md_len += frame_free;
- }
-
- return result;
-}
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libmad/layer3.h
--- a/src/libmad/layer3.h Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-/*
- * libmad - MPEG audio decoder library
- * Copyright (C) 2000-2004 Underbit Technologies, Inc.
- *
- * This program 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.
- *
- * This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: layer3.h,v 1.3 2004/04/22 00:23:06 miguelfreitas Exp $
- */
-
-# ifndef LIBMAD_LAYER3_H
-# define LIBMAD_LAYER3_H
-
-# include "stream.h"
-# include "frame.h"
-
-int mad_layer_III(struct mad_stream *, struct mad_frame *);
-
-# endif
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libmad/qc_table.dat
--- a/src/libmad/qc_table.dat Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-/*
- * libmad - MPEG audio decoder library
- * Copyright (C) 2000-2001 Robert Leslie
- *
- * This program 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.
- *
- * This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: qc_table.dat,v 1.2 2002/04/30 18:46:58 miguelfreitas Exp $
- */
-
-/*
- * These are the Layer II classes of quantization.
- * The table is derived from Table B.4 of ISO/IEC 11172-3.
- */
-
- { 3, 2, 5,
- MAD_F(0x15555555) /* 1.33333333333 => 1.33333333209, e 0.00000000124 */,
- MAD_F(0x08000000) /* 0.50000000000 => 0.50000000000, e 0.00000000000 */ },
- { 5, 3, 7,
- MAD_F(0x1999999a) /* 1.60000000000 => 1.60000000149, e -0.00000000149 */,
- MAD_F(0x08000000) /* 0.50000000000 => 0.50000000000, e 0.00000000000 */ },
- { 7, 0, 3,
- MAD_F(0x12492492) /* 1.14285714286 => 1.14285714179, e 0.00000000107 */,
- MAD_F(0x04000000) /* 0.25000000000 => 0.25000000000, e 0.00000000000 */ },
- { 9, 4, 10,
- MAD_F(0x1c71c71c) /* 1.77777777777 => 1.77777777612, e 0.00000000165 */,
- MAD_F(0x08000000) /* 0.50000000000 => 0.50000000000, e 0.00000000000 */ },
- { 15, 0, 4,
- MAD_F(0x11111111) /* 1.06666666666 => 1.06666666642, e 0.00000000024 */,
- MAD_F(0x02000000) /* 0.12500000000 => 0.12500000000, e 0.00000000000 */ },
- { 31, 0, 5,
- MAD_F(0x10842108) /* 1.03225806452 => 1.03225806355, e 0.00000000097 */,
- MAD_F(0x01000000) /* 0.06250000000 => 0.06250000000, e 0.00000000000 */ },
- { 63, 0, 6,
- MAD_F(0x10410410) /* 1.01587301587 => 1.01587301493, e 0.00000000094 */,
- MAD_F(0x00800000) /* 0.03125000000 => 0.03125000000, e 0.00000000000 */ },
- { 127, 0, 7,
- MAD_F(0x10204081) /* 1.00787401575 => 1.00787401572, e 0.00000000003 */,
- MAD_F(0x00400000) /* 0.01562500000 => 0.01562500000, e 0.00000000000 */ },
- { 255, 0, 8,
- MAD_F(0x10101010) /* 1.00392156863 => 1.00392156839, e 0.00000000024 */,
- MAD_F(0x00200000) /* 0.00781250000 => 0.00781250000, e 0.00000000000 */ },
- { 511, 0, 9,
- MAD_F(0x10080402) /* 1.00195694716 => 1.00195694715, e 0.00000000001 */,
- MAD_F(0x00100000) /* 0.00390625000 => 0.00390625000, e 0.00000000000 */ },
- { 1023, 0, 10,
- MAD_F(0x10040100) /* 1.00097751711 => 1.00097751617, e 0.00000000094 */,
- MAD_F(0x00080000) /* 0.00195312500 => 0.00195312500, e 0.00000000000 */ },
- { 2047, 0, 11,
- MAD_F(0x10020040) /* 1.00048851979 => 1.00048851967, e 0.00000000012 */,
- MAD_F(0x00040000) /* 0.00097656250 => 0.00097656250, e 0.00000000000 */ },
- { 4095, 0, 12,
- MAD_F(0x10010010) /* 1.00024420024 => 1.00024420023, e 0.00000000001 */,
- MAD_F(0x00020000) /* 0.00048828125 => 0.00048828125, e 0.00000000000 */ },
- { 8191, 0, 13,
- MAD_F(0x10008004) /* 1.00012208522 => 1.00012208521, e 0.00000000001 */,
- MAD_F(0x00010000) /* 0.00024414063 => 0.00024414062, e 0.00000000000 */ },
- { 16383, 0, 14,
- MAD_F(0x10004001) /* 1.00006103888 => 1.00006103888, e -0.00000000000 */,
- MAD_F(0x00008000) /* 0.00012207031 => 0.00012207031, e -0.00000000000 */ },
- { 32767, 0, 15,
- MAD_F(0x10002000) /* 1.00003051851 => 1.00003051758, e 0.00000000093 */,
- MAD_F(0x00004000) /* 0.00006103516 => 0.00006103516, e 0.00000000000 */ },
- { 65535, 0, 16,
- MAD_F(0x10001000) /* 1.00001525902 => 1.00001525879, e 0.00000000023 */,
- MAD_F(0x00002000) /* 0.00003051758 => 0.00003051758, e 0.00000000000 */ }
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libmad/rq_table.dat
--- a/src/libmad/rq_table.dat Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,8747 +0,0 @@
-/*
- * libmad - MPEG audio decoder library
- * Copyright (C) 2000-2001 Robert Leslie
- *
- * This program 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.
- *
- * This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: rq_table.dat,v 1.2 2002/04/30 18:46:58 miguelfreitas Exp $
- */
-
-/*
- * This is the lookup table used to compute x^(4/3) for Layer III
- * requantization. To maintain the best possible accuracy, the value is
- * stored as a normalized mantissa with exponent. The requantization
- * algorithm recombines these parts with appropriate scaling.
- */
-
- /* 0 */ { MAD_F(0x00000000) /* 0.000000000 */, 0 },
- /* 1 */ { MAD_F(0x04000000) /* 0.250000000 */, 2 },
- /* 2 */ { MAD_F(0x050a28be) /* 0.314980262 */, 3 },
- /* 3 */ { MAD_F(0x0453a5cd) /* 0.270421794 */, 4 },
- /* 4 */ { MAD_F(0x06597fa9) /* 0.396850263 */, 4 },
- /* 5 */ { MAD_F(0x04466275) /* 0.267183742 */, 5 },
- /* 6 */ { MAD_F(0x05738c72) /* 0.340710111 */, 5 },
- /* 7 */ { MAD_F(0x06b1fc81) /* 0.418453696 */, 5 },
- /* 8 */ { MAD_F(0x04000000) /* 0.250000000 */, 6 },
- /* 9 */ { MAD_F(0x04ae20d7) /* 0.292511788 */, 6 },
- /* 10 */ { MAD_F(0x0562d694) /* 0.336630420 */, 6 },
- /* 11 */ { MAD_F(0x061dae96) /* 0.382246578 */, 6 },
- /* 12 */ { MAD_F(0x06de47f4) /* 0.429267841 */, 6 },
- /* 13 */ { MAD_F(0x07a44f7a) /* 0.477614858 */, 6 },
- /* 14 */ { MAD_F(0x0437be65) /* 0.263609310 */, 7 },
- /* 15 */ { MAD_F(0x049fc824) /* 0.289009227 */, 7 },
-
- /* 16 */ { MAD_F(0x050a28be) /* 0.314980262 */, 7 },
- /* 17 */ { MAD_F(0x0576c6f5) /* 0.341498336 */, 7 },
- /* 18 */ { MAD_F(0x05e58c0b) /* 0.368541759 */, 7 },
- /* 19 */ { MAD_F(0x06566361) /* 0.396090870 */, 7 },
- /* 20 */ { MAD_F(0x06c93a2e) /* 0.424127753 */, 7 },
- /* 21 */ { MAD_F(0x073dff3e) /* 0.452635998 */, 7 },
- /* 22 */ { MAD_F(0x07b4a2bc) /* 0.481600510 */, 7 },
- /* 23 */ { MAD_F(0x04168b05) /* 0.255503674 */, 8 },
- /* 24 */ { MAD_F(0x0453a5cd) /* 0.270421794 */, 8 },
- /* 25 */ { MAD_F(0x04919b6a) /* 0.285548607 */, 8 },
- /* 26 */ { MAD_F(0x04d065fb) /* 0.300878507 */, 8 },
- /* 27 */ { MAD_F(0x05100000) /* 0.316406250 */, 8 },
- /* 28 */ { MAD_F(0x05506451) /* 0.332126919 */, 8 },
- /* 29 */ { MAD_F(0x05918e15) /* 0.348035890 */, 8 },
- /* 30 */ { MAD_F(0x05d378bb) /* 0.364128809 */, 8 },
- /* 31 */ { MAD_F(0x06161ff3) /* 0.380401563 */, 8 },
-
- /* 32 */ { MAD_F(0x06597fa9) /* 0.396850263 */, 8 },
- /* 33 */ { MAD_F(0x069d9400) /* 0.413471222 */, 8 },
- /* 34 */ { MAD_F(0x06e2594c) /* 0.430260942 */, 8 },
- /* 35 */ { MAD_F(0x0727cc11) /* 0.447216097 */, 8 },
- /* 36 */ { MAD_F(0x076de8fc) /* 0.464333519 */, 8 },
- /* 37 */ { MAD_F(0x07b4ace3) /* 0.481610189 */, 8 },
- /* 38 */ { MAD_F(0x07fc14bf) /* 0.499043224 */, 8 },
- /* 39 */ { MAD_F(0x04220ed7) /* 0.258314934 */, 9 },
- /* 40 */ { MAD_F(0x04466275) /* 0.267183742 */, 9 },
- /* 41 */ { MAD_F(0x046b03e7) /* 0.276126771 */, 9 },
- /* 42 */ { MAD_F(0x048ff1e8) /* 0.285142811 */, 9 },
- /* 43 */ { MAD_F(0x04b52b3f) /* 0.294230696 */, 9 },
- /* 44 */ { MAD_F(0x04daaec0) /* 0.303389310 */, 9 },
- /* 45 */ { MAD_F(0x05007b49) /* 0.312617576 */, 9 },
- /* 46 */ { MAD_F(0x05268fc6) /* 0.321914457 */, 9 },
- /* 47 */ { MAD_F(0x054ceb2a) /* 0.331278957 */, 9 },
-
- /* 48 */ { MAD_F(0x05738c72) /* 0.340710111 */, 9 },
- /* 49 */ { MAD_F(0x059a72a5) /* 0.350206992 */, 9 },
- /* 50 */ { MAD_F(0x05c19cd3) /* 0.359768701 */, 9 },
- /* 51 */ { MAD_F(0x05e90a12) /* 0.369394372 */, 9 },
- /* 52 */ { MAD_F(0x0610b982) /* 0.379083164 */, 9 },
- /* 53 */ { MAD_F(0x0638aa48) /* 0.388834268 */, 9 },
- /* 54 */ { MAD_F(0x0660db91) /* 0.398646895 */, 9 },
- /* 55 */ { MAD_F(0x06894c90) /* 0.408520284 */, 9 },
- /* 56 */ { MAD_F(0x06b1fc81) /* 0.418453696 */, 9 },
- /* 57 */ { MAD_F(0x06daeaa1) /* 0.428446415 */, 9 },
- /* 58 */ { MAD_F(0x07041636) /* 0.438497744 */, 9 },
- /* 59 */ { MAD_F(0x072d7e8b) /* 0.448607009 */, 9 },
- /* 60 */ { MAD_F(0x075722ef) /* 0.458773552 */, 9 },
- /* 61 */ { MAD_F(0x078102b8) /* 0.468996735 */, 9 },
- /* 62 */ { MAD_F(0x07ab1d3e) /* 0.479275937 */, 9 },
- /* 63 */ { MAD_F(0x07d571e0) /* 0.489610555 */, 9 },
-
- /* 64 */ { MAD_F(0x04000000) /* 0.250000000 */, 10 },
- /* 65 */ { MAD_F(0x04156381) /* 0.255221850 */, 10 },
- /* 66 */ { MAD_F(0x042ae32a) /* 0.260470548 */, 10 },
- /* 67 */ { MAD_F(0x04407eb1) /* 0.265745823 */, 10 },
- /* 68 */ { MAD_F(0x045635cf) /* 0.271047409 */, 10 },
- /* 69 */ { MAD_F(0x046c083e) /* 0.276375048 */, 10 },
- /* 70 */ { MAD_F(0x0481f5bb) /* 0.281728487 */, 10 },
- /* 71 */ { MAD_F(0x0497fe03) /* 0.287107481 */, 10 },
- /* 72 */ { MAD_F(0x04ae20d7) /* 0.292511788 */, 10 },
- /* 73 */ { MAD_F(0x04c45df6) /* 0.297941173 */, 10 },
- /* 74 */ { MAD_F(0x04dab524) /* 0.303395408 */, 10 },
- /* 75 */ { MAD_F(0x04f12624) /* 0.308874267 */, 10 },
- /* 76 */ { MAD_F(0x0507b0bc) /* 0.314377532 */, 10 },
- /* 77 */ { MAD_F(0x051e54b1) /* 0.319904987 */, 10 },
- /* 78 */ { MAD_F(0x053511cb) /* 0.325456423 */, 10 },
- /* 79 */ { MAD_F(0x054be7d4) /* 0.331031635 */, 10 },
-
- /* 80 */ { MAD_F(0x0562d694) /* 0.336630420 */, 10 },
- /* 81 */ { MAD_F(0x0579ddd8) /* 0.342252584 */, 10 },
- /* 82 */ { MAD_F(0x0590fd6c) /* 0.347897931 */, 10 },
- /* 83 */ { MAD_F(0x05a8351c) /* 0.353566275 */, 10 },
- /* 84 */ { MAD_F(0x05bf84b8) /* 0.359257429 */, 10 },
- /* 85 */ { MAD_F(0x05d6ec0e) /* 0.364971213 */, 10 },
- /* 86 */ { MAD_F(0x05ee6aef) /* 0.370707448 */, 10 },
- /* 87 */ { MAD_F(0x0606012b) /* 0.376465960 */, 10 },
- /* 88 */ { MAD_F(0x061dae96) /* 0.382246578 */, 10 },
- /* 89 */ { MAD_F(0x06357302) /* 0.388049134 */, 10 },
- /* 90 */ { MAD_F(0x064d4e43) /* 0.393873464 */, 10 },
[... 8495 lines omitted ...]
- /* 8086 */ { MAD_F(0x04f3f2dd) /* 0.309557786 */, 19 },
- /* 8087 */ { MAD_F(0x04f42864) /* 0.309608831 */, 19 },
- /* 8088 */ { MAD_F(0x04f45dea) /* 0.309659879 */, 19 },
- /* 8089 */ { MAD_F(0x04f49372) /* 0.309710928 */, 19 },
- /* 8090 */ { MAD_F(0x04f4c8fa) /* 0.309761980 */, 19 },
- /* 8091 */ { MAD_F(0x04f4fe83) /* 0.309813033 */, 19 },
- /* 8092 */ { MAD_F(0x04f5340c) /* 0.309864089 */, 19 },
- /* 8093 */ { MAD_F(0x04f56996) /* 0.309915147 */, 19 },
- /* 8094 */ { MAD_F(0x04f59f20) /* 0.309966207 */, 19 },
- /* 8095 */ { MAD_F(0x04f5d4ab) /* 0.310017269 */, 19 },
-
- /* 8096 */ { MAD_F(0x04f60a36) /* 0.310068333 */, 19 },
- /* 8097 */ { MAD_F(0x04f63fc2) /* 0.310119400 */, 19 },
- /* 8098 */ { MAD_F(0x04f6754f) /* 0.310170468 */, 19 },
- /* 8099 */ { MAD_F(0x04f6aadc) /* 0.310221539 */, 19 },
- /* 8100 */ { MAD_F(0x04f6e06a) /* 0.310272611 */, 19 },
- /* 8101 */ { MAD_F(0x04f715f8) /* 0.310323686 */, 19 },
- /* 8102 */ { MAD_F(0x04f74b87) /* 0.310374763 */, 19 },
- /* 8103 */ { MAD_F(0x04f78116) /* 0.310425842 */, 19 },
- /* 8104 */ { MAD_F(0x04f7b6a6) /* 0.310476923 */, 19 },
- /* 8105 */ { MAD_F(0x04f7ec37) /* 0.310528006 */, 19 },
- /* 8106 */ { MAD_F(0x04f821c8) /* 0.310579091 */, 19 },
- /* 8107 */ { MAD_F(0x04f85759) /* 0.310630179 */, 19 },
- /* 8108 */ { MAD_F(0x04f88cec) /* 0.310681268 */, 19 },
- /* 8109 */ { MAD_F(0x04f8c27e) /* 0.310732360 */, 19 },
- /* 8110 */ { MAD_F(0x04f8f812) /* 0.310783453 */, 19 },
- /* 8111 */ { MAD_F(0x04f92da6) /* 0.310834549 */, 19 },
-
- /* 8112 */ { MAD_F(0x04f9633a) /* 0.310885647 */, 19 },
- /* 8113 */ { MAD_F(0x04f998cf) /* 0.310936747 */, 19 },
- /* 8114 */ { MAD_F(0x04f9ce65) /* 0.310987849 */, 19 },
- /* 8115 */ { MAD_F(0x04fa03fb) /* 0.311038953 */, 19 },
- /* 8116 */ { MAD_F(0x04fa3992) /* 0.311090059 */, 19 },
- /* 8117 */ { MAD_F(0x04fa6f29) /* 0.311141168 */, 19 },
- /* 8118 */ { MAD_F(0x04faa4c1) /* 0.311192278 */, 19 },
- /* 8119 */ { MAD_F(0x04fada59) /* 0.311243390 */, 19 },
- /* 8120 */ { MAD_F(0x04fb0ff2) /* 0.311294505 */, 19 },
- /* 8121 */ { MAD_F(0x04fb458c) /* 0.311345622 */, 19 },
- /* 8122 */ { MAD_F(0x04fb7b26) /* 0.311396741 */, 19 },
- /* 8123 */ { MAD_F(0x04fbb0c1) /* 0.311447862 */, 19 },
- /* 8124 */ { MAD_F(0x04fbe65c) /* 0.311498985 */, 19 },
- /* 8125 */ { MAD_F(0x04fc1bf8) /* 0.311550110 */, 19 },
- /* 8126 */ { MAD_F(0x04fc5194) /* 0.311601237 */, 19 },
- /* 8127 */ { MAD_F(0x04fc8731) /* 0.311652366 */, 19 },
-
- /* 8128 */ { MAD_F(0x04fcbcce) /* 0.311703498 */, 19 },
- /* 8129 */ { MAD_F(0x04fcf26c) /* 0.311754631 */, 19 },
- /* 8130 */ { MAD_F(0x04fd280b) /* 0.311805767 */, 19 },
- /* 8131 */ { MAD_F(0x04fd5daa) /* 0.311856905 */, 19 },
- /* 8132 */ { MAD_F(0x04fd934a) /* 0.311908044 */, 19 },
- /* 8133 */ { MAD_F(0x04fdc8ea) /* 0.311959186 */, 19 },
- /* 8134 */ { MAD_F(0x04fdfe8b) /* 0.312010330 */, 19 },
- /* 8135 */ { MAD_F(0x04fe342c) /* 0.312061476 */, 19 },
- /* 8136 */ { MAD_F(0x04fe69ce) /* 0.312112625 */, 19 },
- /* 8137 */ { MAD_F(0x04fe9f71) /* 0.312163775 */, 19 },
- /* 8138 */ { MAD_F(0x04fed514) /* 0.312214927 */, 19 },
- /* 8139 */ { MAD_F(0x04ff0ab8) /* 0.312266082 */, 19 },
- /* 8140 */ { MAD_F(0x04ff405c) /* 0.312317238 */, 19 },
- /* 8141 */ { MAD_F(0x04ff7601) /* 0.312368397 */, 19 },
- /* 8142 */ { MAD_F(0x04ffaba6) /* 0.312419558 */, 19 },
- /* 8143 */ { MAD_F(0x04ffe14c) /* 0.312470720 */, 19 },
-
- /* 8144 */ { MAD_F(0x050016f3) /* 0.312521885 */, 19 },
- /* 8145 */ { MAD_F(0x05004c9a) /* 0.312573052 */, 19 },
- /* 8146 */ { MAD_F(0x05008241) /* 0.312624222 */, 19 },
- /* 8147 */ { MAD_F(0x0500b7e9) /* 0.312675393 */, 19 },
- /* 8148 */ { MAD_F(0x0500ed92) /* 0.312726566 */, 19 },
- /* 8149 */ { MAD_F(0x0501233b) /* 0.312777742 */, 19 },
- /* 8150 */ { MAD_F(0x050158e5) /* 0.312828919 */, 19 },
- /* 8151 */ { MAD_F(0x05018e90) /* 0.312880099 */, 19 },
- /* 8152 */ { MAD_F(0x0501c43b) /* 0.312931280 */, 19 },
- /* 8153 */ { MAD_F(0x0501f9e6) /* 0.312982464 */, 19 },
- /* 8154 */ { MAD_F(0x05022f92) /* 0.313033650 */, 19 },
- /* 8155 */ { MAD_F(0x0502653f) /* 0.313084838 */, 19 },
- /* 8156 */ { MAD_F(0x05029aec) /* 0.313136028 */, 19 },
- /* 8157 */ { MAD_F(0x0502d09a) /* 0.313187220 */, 19 },
- /* 8158 */ { MAD_F(0x05030648) /* 0.313238414 */, 19 },
- /* 8159 */ { MAD_F(0x05033bf7) /* 0.313289611 */, 19 },
-
- /* 8160 */ { MAD_F(0x050371a7) /* 0.313340809 */, 19 },
- /* 8161 */ { MAD_F(0x0503a757) /* 0.313392010 */, 19 },
- /* 8162 */ { MAD_F(0x0503dd07) /* 0.313443212 */, 19 },
- /* 8163 */ { MAD_F(0x050412b9) /* 0.313494417 */, 19 },
- /* 8164 */ { MAD_F(0x0504486a) /* 0.313545624 */, 19 },
- /* 8165 */ { MAD_F(0x05047e1d) /* 0.313596833 */, 19 },
- /* 8166 */ { MAD_F(0x0504b3cf) /* 0.313648044 */, 19 },
- /* 8167 */ { MAD_F(0x0504e983) /* 0.313699257 */, 19 },
- /* 8168 */ { MAD_F(0x05051f37) /* 0.313750472 */, 19 },
- /* 8169 */ { MAD_F(0x050554eb) /* 0.313801689 */, 19 },
- /* 8170 */ { MAD_F(0x05058aa0) /* 0.313852909 */, 19 },
- /* 8171 */ { MAD_F(0x0505c056) /* 0.313904130 */, 19 },
- /* 8172 */ { MAD_F(0x0505f60c) /* 0.313955354 */, 19 },
- /* 8173 */ { MAD_F(0x05062bc3) /* 0.314006579 */, 19 },
- /* 8174 */ { MAD_F(0x0506617a) /* 0.314057807 */, 19 },
- /* 8175 */ { MAD_F(0x05069732) /* 0.314109037 */, 19 },
-
- /* 8176 */ { MAD_F(0x0506cceb) /* 0.314160269 */, 19 },
- /* 8177 */ { MAD_F(0x050702a4) /* 0.314211502 */, 19 },
- /* 8178 */ { MAD_F(0x0507385d) /* 0.314262739 */, 19 },
- /* 8179 */ { MAD_F(0x05076e17) /* 0.314313977 */, 19 },
- /* 8180 */ { MAD_F(0x0507a3d2) /* 0.314365217 */, 19 },
- /* 8181 */ { MAD_F(0x0507d98d) /* 0.314416459 */, 19 },
- /* 8182 */ { MAD_F(0x05080f49) /* 0.314467704 */, 19 },
- /* 8183 */ { MAD_F(0x05084506) /* 0.314518950 */, 19 },
- /* 8184 */ { MAD_F(0x05087ac2) /* 0.314570199 */, 19 },
- /* 8185 */ { MAD_F(0x0508b080) /* 0.314621449 */, 19 },
- /* 8186 */ { MAD_F(0x0508e63e) /* 0.314672702 */, 19 },
- /* 8187 */ { MAD_F(0x05091bfd) /* 0.314723957 */, 19 },
- /* 8188 */ { MAD_F(0x050951bc) /* 0.314775214 */, 19 },
- /* 8189 */ { MAD_F(0x0509877c) /* 0.314826473 */, 19 },
- /* 8190 */ { MAD_F(0x0509bd3c) /* 0.314877734 */, 19 },
- /* 8191 */ { MAD_F(0x0509f2fd) /* 0.314928997 */, 19 },
-
- /* 8192 */ { MAD_F(0x050a28be) /* 0.314980262 */, 19 },
- /* 8193 */ { MAD_F(0x050a5e80) /* 0.315031530 */, 19 },
- /* 8194 */ { MAD_F(0x050a9443) /* 0.315082799 */, 19 },
- /* 8195 */ { MAD_F(0x050aca06) /* 0.315134071 */, 19 },
- /* 8196 */ { MAD_F(0x050affc9) /* 0.315185344 */, 19 },
- /* 8197 */ { MAD_F(0x050b358e) /* 0.315236620 */, 19 },
- /* 8198 */ { MAD_F(0x050b6b52) /* 0.315287898 */, 19 },
- /* 8199 */ { MAD_F(0x050ba118) /* 0.315339178 */, 19 },
- /* 8200 */ { MAD_F(0x050bd6de) /* 0.315390460 */, 19 },
- /* 8201 */ { MAD_F(0x050c0ca4) /* 0.315441744 */, 19 },
- /* 8202 */ { MAD_F(0x050c426b) /* 0.315493030 */, 19 },
- /* 8203 */ { MAD_F(0x050c7833) /* 0.315544318 */, 19 },
- /* 8204 */ { MAD_F(0x050cadfb) /* 0.315595608 */, 19 },
- /* 8205 */ { MAD_F(0x050ce3c4) /* 0.315646901 */, 19 },
- /* 8206 */ { MAD_F(0x050d198d) /* 0.315698195 */, 19 }
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libmad/sf_table.dat
--- a/src/libmad/sf_table.dat Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-/*
- * libmad - MPEG audio decoder library
- * Copyright (C) 2000-2001 Robert Leslie
- *
- * This program 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.
- *
- * This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: sf_table.dat,v 1.2 2002/04/30 18:46:58 miguelfreitas Exp $
- */
-
-/*
- * These are the scalefactor values for Layer I and Layer II.
- * The values are from Table B.1 of ISO/IEC 11172-3.
- *
- * There is some error introduced by the 32-bit fixed-point representation;
- * the amount of error is shown. For 16-bit PCM output, this shouldn't be
- * too much of a problem.
- */
-
- MAD_F(0x20000000), /* 2.000000000000 => 2.000000000000, e 0.000000000000 */
- MAD_F(0x1965fea5), /* 1.587401051968 => 1.587401051074, e 0.000000000894 */
- MAD_F(0x1428a2fa), /* 1.259921049895 => 1.259921051562, e -0.000000001667 */
- MAD_F(0x10000000), /* 1.000000000000 => 1.000000000000, e 0.000000000000 */
- MAD_F(0x0cb2ff53), /* 0.793700525984 => 0.793700527400, e -0.000000001416 */
- MAD_F(0x0a14517d), /* 0.629960524947 => 0.629960525781, e -0.000000000833 */
- MAD_F(0x08000000), /* 0.500000000000 => 0.500000000000, e 0.000000000000 */
- MAD_F(0x06597fa9), /* 0.396850262992 => 0.396850261837, e 0.000000001155 */
-
- MAD_F(0x050a28be), /* 0.314980262474 => 0.314980261028, e 0.000000001446 */
- MAD_F(0x04000000), /* 0.250000000000 => 0.250000000000, e 0.000000000000 */
- MAD_F(0x032cbfd5), /* 0.198425131496 => 0.198425132781, e -0.000000001285 */
- MAD_F(0x0285145f), /* 0.157490131237 => 0.157490130514, e 0.000000000723 */
- MAD_F(0x02000000), /* 0.125000000000 => 0.125000000000, e 0.000000000000 */
- MAD_F(0x01965fea), /* 0.099212565748 => 0.099212564528, e 0.000000001220 */
- MAD_F(0x01428a30), /* 0.078745065618 => 0.078745067120, e -0.000000001501 */
- MAD_F(0x01000000), /* 0.062500000000 => 0.062500000000, e 0.000000000000 */
-
- MAD_F(0x00cb2ff5), /* 0.049606282874 => 0.049606282264, e 0.000000000610 */
- MAD_F(0x00a14518), /* 0.039372532809 => 0.039372533560, e -0.000000000751 */
- MAD_F(0x00800000), /* 0.031250000000 => 0.031250000000, e 0.000000000000 */
- MAD_F(0x006597fb), /* 0.024803141437 => 0.024803142995, e -0.000000001558 */
- MAD_F(0x0050a28c), /* 0.019686266405 => 0.019686266780, e -0.000000000375 */
- MAD_F(0x00400000), /* 0.015625000000 => 0.015625000000, e 0.000000000000 */
- MAD_F(0x0032cbfd), /* 0.012401570719 => 0.012401569635, e 0.000000001084 */
- MAD_F(0x00285146), /* 0.009843133202 => 0.009843133390, e -0.000000000188 */
-
- MAD_F(0x00200000), /* 0.007812500000 => 0.007812500000, e 0.000000000000 */
- MAD_F(0x001965ff), /* 0.006200785359 => 0.006200786680, e -0.000000001321 */
- MAD_F(0x001428a3), /* 0.004921566601 => 0.004921566695, e -0.000000000094 */
- MAD_F(0x00100000), /* 0.003906250000 => 0.003906250000, e 0.000000000000 */
- MAD_F(0x000cb2ff), /* 0.003100392680 => 0.003100391477, e 0.000000001202 */
- MAD_F(0x000a1451), /* 0.002460783301 => 0.002460781485, e 0.000000001816 */
- MAD_F(0x00080000), /* 0.001953125000 => 0.001953125000, e 0.000000000000 */
- MAD_F(0x00065980), /* 0.001550196340 => 0.001550197601, e -0.000000001262 */
-
- MAD_F(0x00050a29), /* 0.001230391650 => 0.001230392605, e -0.000000000955 */
- MAD_F(0x00040000), /* 0.000976562500 => 0.000976562500, e 0.000000000000 */
- MAD_F(0x00032cc0), /* 0.000775098170 => 0.000775098801, e -0.000000000631 */
- MAD_F(0x00028514), /* 0.000615195825 => 0.000615194440, e 0.000000001385 */
- MAD_F(0x00020000), /* 0.000488281250 => 0.000488281250, e 0.000000000000 */
- MAD_F(0x00019660), /* 0.000387549085 => 0.000387549400, e -0.000000000315 */
- MAD_F(0x0001428a), /* 0.000307597913 => 0.000307597220, e 0.000000000693 */
- MAD_F(0x00010000), /* 0.000244140625 => 0.000244140625, e 0.000000000000 */
-
- MAD_F(0x0000cb30), /* 0.000193774542 => 0.000193774700, e -0.000000000158 */
- MAD_F(0x0000a145), /* 0.000153798956 => 0.000153798610, e 0.000000000346 */
- MAD_F(0x00008000), /* 0.000122070313 => 0.000122070313, e 0.000000000000 */
- MAD_F(0x00006598), /* 0.000096887271 => 0.000096887350, e -0.000000000079 */
- MAD_F(0x000050a3), /* 0.000076899478 => 0.000076901168, e -0.000000001689 */
- MAD_F(0x00004000), /* 0.000061035156 => 0.000061035156, e 0.000000000000 */
- MAD_F(0x000032cc), /* 0.000048443636 => 0.000048443675, e -0.000000000039 */
- MAD_F(0x00002851), /* 0.000038449739 => 0.000038448721, e 0.000000001018 */
-
- MAD_F(0x00002000), /* 0.000030517578 => 0.000030517578, e 0.000000000000 */
- MAD_F(0x00001966), /* 0.000024221818 => 0.000024221838, e -0.000000000020 */
- MAD_F(0x00001429), /* 0.000019224870 => 0.000019226223, e -0.000000001354 */
- MAD_F(0x00001000), /* 0.000015258789 => 0.000015258789, e -0.000000000000 */
- MAD_F(0x00000cb3), /* 0.000012110909 => 0.000012110919, e -0.000000000010 */
- MAD_F(0x00000a14), /* 0.000009612435 => 0.000009611249, e 0.000000001186 */
- MAD_F(0x00000800), /* 0.000007629395 => 0.000007629395, e -0.000000000000 */
- MAD_F(0x00000659), /* 0.000006055454 => 0.000006053597, e 0.000000001858 */
-
- MAD_F(0x0000050a), /* 0.000004806217 => 0.000004805624, e 0.000000000593 */
- MAD_F(0x00000400), /* 0.000003814697 => 0.000003814697, e 0.000000000000 */
- MAD_F(0x0000032d), /* 0.000003027727 => 0.000003028661, e -0.000000000934 */
- MAD_F(0x00000285), /* 0.000002403109 => 0.000002402812, e 0.000000000296 */
- MAD_F(0x00000200), /* 0.000001907349 => 0.000001907349, e -0.000000000000 */
- MAD_F(0x00000196), /* 0.000001513864 => 0.000001512468, e 0.000000001396 */
- MAD_F(0x00000143) /* 0.000001201554 => 0.000001203269, e -0.000000001714 */
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libmad/stream.c
--- a/src/libmad/stream.c Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,161 +0,0 @@
-/*
- * libmad - MPEG audio decoder library
- * Copyright (C) 2000-2004 Underbit Technologies, Inc.
- *
- * This program 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.
- *
- * This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: stream.c,v 1.3 2004/04/22 00:23:07 miguelfreitas Exp $
- */
-
-# ifdef HAVE_CONFIG_H
-# include "config.h"
-# endif
-
-# include "global.h"
-
-# include <stdlib.h>
-
-# include "bit.h"
-# include "stream.h"
-
-/*
- * NAME: stream->init()
- * DESCRIPTION: initialize stream struct
- */
-void mad_stream_init(struct mad_stream *stream)
-{
- stream->buffer = 0;
- stream->bufend = 0;
- stream->skiplen = 0;
-
- stream->sync = 0;
- stream->freerate = 0;
-
- stream->this_frame = 0;
- stream->next_frame = 0;
- mad_bit_init(&stream->ptr, 0);
-
- mad_bit_init(&stream->anc_ptr, 0);
- stream->anc_bitlen = 0;
-
- stream->main_data = 0;
- stream->md_len = 0;
-
- stream->options = 0;
- stream->error = MAD_ERROR_NONE;
-}
-
-/*
- * NAME: stream->finish()
- * DESCRIPTION: deallocate any dynamic memory associated with stream
- */
-void mad_stream_finish(struct mad_stream *stream)
-{
- if (stream->main_data) {
- free(stream->main_data);
- stream->main_data = 0;
- }
-
- mad_bit_finish(&stream->anc_ptr);
- mad_bit_finish(&stream->ptr);
-}
-
-/*
- * NAME: stream->buffer()
- * DESCRIPTION: set stream buffer pointers
- */
-void mad_stream_buffer(struct mad_stream *stream,
- unsigned char const *buffer, unsigned long length)
-{
- stream->buffer = buffer;
- stream->bufend = buffer + length;
-
- stream->this_frame = buffer;
- stream->next_frame = buffer;
-
- stream->sync = 1;
-
- mad_bit_init(&stream->ptr, buffer);
-}
-
-/*
- * NAME: stream->skip()
- * DESCRIPTION: arrange to skip bytes before the next frame
- */
-void mad_stream_skip(struct mad_stream *stream, unsigned long length)
-{
- stream->skiplen += length;
-}
-
-/*
- * NAME: stream->sync()
- * DESCRIPTION: locate the next stream sync word
- */
-int mad_stream_sync(struct mad_stream *stream)
-{
- register unsigned char const *ptr, *end;
-
- ptr = mad_bit_nextbyte(&stream->ptr);
- end = stream->bufend;
-
- while (ptr < end - 1 &&
- !(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0))
- ++ptr;
-
- if (end - ptr < MAD_BUFFER_GUARD)
- return -1;
-
- mad_bit_init(&stream->ptr, ptr);
-
- return 0;
-}
-
-/*
- * NAME: stream->errorstr()
- * DESCRIPTION: return a string description of the current error condition
- */
-char const *mad_stream_errorstr(struct mad_stream const *stream)
-{
- switch (stream->error) {
- case MAD_ERROR_NONE: return "no error";
-
- case MAD_ERROR_BUFLEN: return "input buffer too small (or EOF)";
- case MAD_ERROR_BUFPTR: return "invalid (null) buffer pointer";
-
- case MAD_ERROR_NOMEM: return "not enough memory";
-
- case MAD_ERROR_LOSTSYNC: return "lost synchronization";
- case MAD_ERROR_BADLAYER: return "reserved header layer value";
- case MAD_ERROR_BADBITRATE: return "forbidden bitrate value";
- case MAD_ERROR_BADSAMPLERATE: return "reserved sample frequency value";
- case MAD_ERROR_BADEMPHASIS: return "reserved emphasis value";
-
- case MAD_ERROR_BADCRC: return "CRC check failed";
- case MAD_ERROR_BADBITALLOC: return "forbidden bit allocation value";
- case MAD_ERROR_BADSCALEFACTOR: return "bad scalefactor index";
- case MAD_ERROR_BADMODE: return "bad bitrate/mode combination";
- case MAD_ERROR_BADFRAMELEN: return "bad frame length";
- case MAD_ERROR_BADBIGVALUES: return "bad big_values count";
- case MAD_ERROR_BADBLOCKTYPE: return "reserved block_type";
- case MAD_ERROR_BADSCFSI: return "bad scalefactor selection info";
- case MAD_ERROR_BADDATAPTR: return "bad main_data_begin pointer";
- case MAD_ERROR_BADPART3LEN: return "bad audio data length";
- case MAD_ERROR_BADHUFFTABLE: return "bad Huffman table select";
- case MAD_ERROR_BADHUFFDATA: return "Huffman data overrun";
- case MAD_ERROR_BADSTEREO: return "incompatible block_type for JS";
- }
-
- return 0;
-}
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libmad/stream.h
--- a/src/libmad/stream.h Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,108 +0,0 @@
-/*
- * libmad - MPEG audio decoder library
- * Copyright (C) 2000-2004 Underbit Technologies, Inc.
- *
- * This program 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.
- *
- * This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: stream.h,v 1.3 2004/04/22 00:23:12 miguelfreitas Exp $
- */
-
-# ifndef LIBMAD_STREAM_H
-# define LIBMAD_STREAM_H
-
-# include "bit.h"
-
-# define MAD_BUFFER_GUARD 8
-# define MAD_BUFFER_MDLEN (511 + 2048 + MAD_BUFFER_GUARD)
-
-enum mad_error {
- MAD_ERROR_NONE = 0x0000, /* no error */
-
- MAD_ERROR_BUFLEN = 0x0001, /* input buffer too small (or EOF) */
- MAD_ERROR_BUFPTR = 0x0002, /* invalid (null) buffer pointer */
-
- MAD_ERROR_NOMEM = 0x0031, /* not enough memory */
-
- MAD_ERROR_LOSTSYNC = 0x0101, /* lost synchronization */
- MAD_ERROR_BADLAYER = 0x0102, /* reserved header layer value */
- MAD_ERROR_BADBITRATE = 0x0103, /* forbidden bitrate value */
- MAD_ERROR_BADSAMPLERATE = 0x0104, /* reserved sample frequency value */
- MAD_ERROR_BADEMPHASIS = 0x0105, /* reserved emphasis value */
-
- MAD_ERROR_BADCRC = 0x0201, /* CRC check failed */
- MAD_ERROR_BADBITALLOC = 0x0211, /* forbidden bit allocation value */
- MAD_ERROR_BADSCALEFACTOR = 0x0221, /* bad scalefactor index */
- MAD_ERROR_BADMODE = 0x0222, /* bad bitrate/mode combination */
- MAD_ERROR_BADFRAMELEN = 0x0231, /* bad frame length */
- MAD_ERROR_BADBIGVALUES = 0x0232, /* bad big_values count */
- MAD_ERROR_BADBLOCKTYPE = 0x0233, /* reserved block_type */
- MAD_ERROR_BADSCFSI = 0x0234, /* bad scalefactor selection info */
- MAD_ERROR_BADDATAPTR = 0x0235, /* bad main_data_begin pointer */
- MAD_ERROR_BADPART3LEN = 0x0236, /* bad audio data length */
- MAD_ERROR_BADHUFFTABLE = 0x0237, /* bad Huffman table select */
- MAD_ERROR_BADHUFFDATA = 0x0238, /* Huffman data overrun */
- MAD_ERROR_BADSTEREO = 0x0239 /* incompatible block_type for JS */
-};
-
-# define MAD_RECOVERABLE(error) ((error) & 0xff00)
-
-struct mad_stream {
- unsigned char const *buffer; /* input bitstream buffer */
- unsigned char const *bufend; /* end of buffer */
- unsigned long skiplen; /* bytes to skip before next frame */
-
- int sync; /* stream sync found */
- unsigned long freerate; /* free bitrate (fixed) */
-
- unsigned char const *this_frame; /* start of current frame */
- unsigned char const *next_frame; /* start of next frame */
- struct mad_bitptr ptr; /* current processing bit pointer */
-
- struct mad_bitptr anc_ptr; /* ancillary bits pointer */
- unsigned int anc_bitlen; /* number of ancillary bits */
-
- unsigned char (*main_data)[MAD_BUFFER_MDLEN];
- /* Layer III main_data() */
- unsigned int md_len; /* bytes in main_data */
-
- int options; /* decoding options (see below) */
- enum mad_error error; /* error code (see above) */
-};
-
-enum {
- MAD_OPTION_IGNORECRC = 0x0001, /* ignore CRC errors */
- MAD_OPTION_HALFSAMPLERATE = 0x0002 /* generate PCM at 1/2 sample rate */
-# if 0 /* not yet implemented */
- MAD_OPTION_LEFTCHANNEL = 0x0010, /* decode left channel only */
- MAD_OPTION_RIGHTCHANNEL = 0x0020, /* decode right channel only */
- MAD_OPTION_SINGLECHANNEL = 0x0030 /* combine channels */
-# endif
-};
-
-void mad_stream_init(struct mad_stream *);
-void mad_stream_finish(struct mad_stream *);
-
-# define mad_stream_options(stream, opts) \
- ((void) ((stream)->options = (opts)))
-
-void mad_stream_buffer(struct mad_stream *,
- unsigned char const *, unsigned long);
-void mad_stream_skip(struct mad_stream *, unsigned long);
-
-int mad_stream_sync(struct mad_stream *);
-
-char const *mad_stream_errorstr(struct mad_stream const *);
-
-# endif
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libmad/synth.c
--- a/src/libmad/synth.c Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,857 +0,0 @@
-/*
- * libmad - MPEG audio decoder library
- * Copyright (C) 2000-2004 Underbit Technologies, Inc.
- *
- * This program 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.
- *
- * This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: synth.c,v 1.4 2006/09/26 03:02:20 dgp85 Exp $
- */
-
-# ifdef HAVE_CONFIG_H
-# include "config.h"
-# endif
-
-# include "global.h"
-
-# include "fixed.h"
-# include "frame.h"
-# include "synth.h"
-
-/*
- * NAME: synth->init()
- * DESCRIPTION: initialize synth struct
- */
-void mad_synth_init(struct mad_synth *synth)
-{
- mad_synth_mute(synth);
-
- synth->phase = 0;
-
- synth->pcm.samplerate = 0;
- synth->pcm.channels = 0;
- synth->pcm.length = 0;
-}
-
-/*
- * NAME: synth->mute()
- * DESCRIPTION: zero all polyphase filterbank values, resetting synthesis
- */
-void mad_synth_mute(struct mad_synth *synth)
-{
- unsigned int ch, s, v;
-
- for (ch = 0; ch < 2; ++ch) {
- for (s = 0; s < 16; ++s) {
- for (v = 0; v < 8; ++v) {
- synth->filter[ch][0][0][s][v] = synth->filter[ch][0][1][s][v] =
- synth->filter[ch][1][0][s][v] = synth->filter[ch][1][1][s][v] = 0;
- }
- }
- }
-}
-
-/*
- * An optional optimization called here the Subband Synthesis Optimization
- * (SSO) improves the performance of subband synthesis at the expense of
- * accuracy.
- *
- * The idea is to simplify 32x32->64-bit multiplication to 32x32->32 such
- * that extra scaling and rounding are not necessary. This often allows the
- * compiler to use faster 32-bit multiply-accumulate instructions instead of
- * explicit 64-bit multiply, shift, and add instructions.
- *
- * SSO works like this: a full 32x32->64-bit multiply of two mad_fixed_t
- * values requires the result to be right-shifted 28 bits to be properly
- * scaled to the same fixed-point format. Right shifts can be applied at any
- * time to either operand or to the result, so the optimization involves
- * careful placement of these shifts to minimize the loss of accuracy.
- *
- * First, a 14-bit shift is applied with rounding at compile-time to the D[]
- * table of coefficients for the subband synthesis window. This only loses 2
- * bits of accuracy because the lower 12 bits are always zero. A second
- * 12-bit shift occurs after the DCT calculation. This loses 12 bits of
- * accuracy. Finally, a third 2-bit shift occurs just before the sample is
- * saved in the PCM buffer. 14 + 12 + 2 == 28 bits.
- */
-
-/* FPM_DEFAULT without OPT_SSO will actually lose accuracy and performance */
-
-# if defined(FPM_DEFAULT) && !defined(OPT_SSO)
-# define OPT_SSO
-# endif
-
-/* second SSO shift, with rounding */
-
-# if defined(OPT_SSO)
-# define SHIFT(x) (((x) + (1L << 11)) >> 12)
-# else
-# define SHIFT(x) (x)
-# endif
-
-/* possible DCT speed optimization */
-
-# if defined(OPT_SPEED) && defined(MAD_F_MLX)
-# define OPT_DCTO
-# define MUL(x, y) \
- ({ mad_fixed64hi_t hi; \
- mad_fixed64lo_t lo; \
- MAD_F_MLX(hi, lo, (x), (y)); \
- hi << (32 - MAD_F_SCALEBITS - 3); \
- })
-# else
-# undef OPT_DCTO
-# define MUL(x, y) mad_f_mul((x), (y))
-# endif
-
-/*
- * NAME: dct32()
- * DESCRIPTION: perform fast in[32]->out[32] DCT
- */
-static
-void dct32(mad_fixed_t const in[32], unsigned int slot,
- mad_fixed_t lo[16][8], mad_fixed_t hi[16][8])
[... 605 lines omitted ...]
- MLA(hi, lo, (*fx)[2], ptr[12]);
- MLA(hi, lo, (*fx)[3], ptr[10]);
- MLA(hi, lo, (*fx)[4], ptr[ 8]);
- MLA(hi, lo, (*fx)[5], ptr[ 6]);
- MLA(hi, lo, (*fx)[6], ptr[ 4]);
- MLA(hi, lo, (*fx)[7], ptr[ 2]);
- MLN(hi, lo);
-
- ptr = *Dptr + pe;
- MLA(hi, lo, (*fe)[0], ptr[ 0]);
- MLA(hi, lo, (*fe)[1], ptr[14]);
- MLA(hi, lo, (*fe)[2], ptr[12]);
- MLA(hi, lo, (*fe)[3], ptr[10]);
- MLA(hi, lo, (*fe)[4], ptr[ 8]);
- MLA(hi, lo, (*fe)[5], ptr[ 6]);
- MLA(hi, lo, (*fe)[6], ptr[ 4]);
- MLA(hi, lo, (*fe)[7], ptr[ 2]);
-
- *pcm1++ = SHIFT(MLZ(hi, lo));
-
- pcm2 = pcm1 + 14;
-
- for (sb = 1; sb < 16; ++sb) {
- ++fe;
- ++Dptr;
-
- /* D[32 - sb][i] == -D[sb][31 - i] */
-
- if (!(sb & 1)) {
- ptr = *Dptr + po;
- ML0(hi, lo, (*fo)[0], ptr[ 0]);
- MLA(hi, lo, (*fo)[1], ptr[14]);
- MLA(hi, lo, (*fo)[2], ptr[12]);
- MLA(hi, lo, (*fo)[3], ptr[10]);
- MLA(hi, lo, (*fo)[4], ptr[ 8]);
- MLA(hi, lo, (*fo)[5], ptr[ 6]);
- MLA(hi, lo, (*fo)[6], ptr[ 4]);
- MLA(hi, lo, (*fo)[7], ptr[ 2]);
- MLN(hi, lo);
-
- ptr = *Dptr + pe;
- MLA(hi, lo, (*fe)[7], ptr[ 2]);
- MLA(hi, lo, (*fe)[6], ptr[ 4]);
- MLA(hi, lo, (*fe)[5], ptr[ 6]);
- MLA(hi, lo, (*fe)[4], ptr[ 8]);
- MLA(hi, lo, (*fe)[3], ptr[10]);
- MLA(hi, lo, (*fe)[2], ptr[12]);
- MLA(hi, lo, (*fe)[1], ptr[14]);
- MLA(hi, lo, (*fe)[0], ptr[ 0]);
-
- *pcm1++ = SHIFT(MLZ(hi, lo));
-
- ptr = *Dptr - po;
- ML0(hi, lo, (*fo)[7], ptr[31 - 2]);
- MLA(hi, lo, (*fo)[6], ptr[31 - 4]);
- MLA(hi, lo, (*fo)[5], ptr[31 - 6]);
- MLA(hi, lo, (*fo)[4], ptr[31 - 8]);
- MLA(hi, lo, (*fo)[3], ptr[31 - 10]);
- MLA(hi, lo, (*fo)[2], ptr[31 - 12]);
- MLA(hi, lo, (*fo)[1], ptr[31 - 14]);
- MLA(hi, lo, (*fo)[0], ptr[31 - 16]);
-
- ptr = *Dptr - pe;
- MLA(hi, lo, (*fe)[0], ptr[31 - 16]);
- MLA(hi, lo, (*fe)[1], ptr[31 - 14]);
- MLA(hi, lo, (*fe)[2], ptr[31 - 12]);
- MLA(hi, lo, (*fe)[3], ptr[31 - 10]);
- MLA(hi, lo, (*fe)[4], ptr[31 - 8]);
- MLA(hi, lo, (*fe)[5], ptr[31 - 6]);
- MLA(hi, lo, (*fe)[6], ptr[31 - 4]);
- MLA(hi, lo, (*fe)[7], ptr[31 - 2]);
-
- *pcm2-- = SHIFT(MLZ(hi, lo));
- }
-
- ++fo;
- }
-
- ++Dptr;
-
- ptr = *Dptr + po;
- ML0(hi, lo, (*fo)[0], ptr[ 0]);
- MLA(hi, lo, (*fo)[1], ptr[14]);
- MLA(hi, lo, (*fo)[2], ptr[12]);
- MLA(hi, lo, (*fo)[3], ptr[10]);
- MLA(hi, lo, (*fo)[4], ptr[ 8]);
- MLA(hi, lo, (*fo)[5], ptr[ 6]);
- MLA(hi, lo, (*fo)[6], ptr[ 4]);
- MLA(hi, lo, (*fo)[7], ptr[ 2]);
-
- *pcm1 = SHIFT(-MLZ(hi, lo));
- pcm1 += 8;
-
- phase = (phase + 1) % 16;
- }
- }
-}
-
-/*
- * NAME: synth->frame()
- * DESCRIPTION: perform PCM synthesis of frame subband samples
- */
-void mad_synth_frame(struct mad_synth *synth, struct mad_frame const *frame)
-{
- unsigned int nch, ns;
- void (*synth_frame)(struct mad_synth *, struct mad_frame const *,
- unsigned int, unsigned int);
-
- nch = MAD_NCHANNELS(&frame->header);
- ns = MAD_NSBSAMPLES(&frame->header);
-
- synth->pcm.samplerate = frame->header.samplerate;
- synth->pcm.channels = nch;
- synth->pcm.length = 32 * ns;
-
- synth_frame = synth_full;
-
- if (frame->options & MAD_OPTION_HALFSAMPLERATE) {
- synth->pcm.samplerate /= 2;
- synth->pcm.length /= 2;
-
- synth_frame = synth_half;
- }
-
- synth_frame(synth, frame, nch, ns);
-
- synth->phase = (synth->phase + ns) % 16;
-}
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libmad/synth.h
--- a/src/libmad/synth.h Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-/*
- * libmad - MPEG audio decoder library
- * Copyright (C) 2000-2004 Underbit Technologies, Inc.
- *
- * This program 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.
- *
- * This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: synth.h,v 1.3 2004/04/22 00:23:24 miguelfreitas Exp $
- */
-
-# ifndef LIBMAD_SYNTH_H
-# define LIBMAD_SYNTH_H
-
-# include "fixed.h"
-# include "frame.h"
-
-struct mad_pcm {
- unsigned int samplerate; /* sampling frequency (Hz) */
- unsigned short channels; /* number of channels */
- unsigned short length; /* number of samples per channel */
- mad_fixed_t samples[2][1152]; /* PCM output samples [ch][sample] */
-};
-
-struct mad_synth {
- mad_fixed_t filter[2][2][2][16][8]; /* polyphase filterbank outputs */
- /* [ch][eo][peo][s][v] */
-
- unsigned int phase; /* current processing phase */
-
- struct mad_pcm pcm; /* PCM output */
-};
-
-/* single channel PCM selector */
-enum {
- MAD_PCM_CHANNEL_SINGLE = 0
-};
-
-/* dual channel PCM selector */
-enum {
- MAD_PCM_CHANNEL_DUAL_1 = 0,
- MAD_PCM_CHANNEL_DUAL_2 = 1
-};
-
-/* stereo PCM selector */
-enum {
- MAD_PCM_CHANNEL_STEREO_LEFT = 0,
- MAD_PCM_CHANNEL_STEREO_RIGHT = 1
-};
-
-void mad_synth_init(struct mad_synth *);
-
-# define mad_synth_finish(synth) /* nothing */
-
-void mad_synth_mute(struct mad_synth *);
-
-void mad_synth_frame(struct mad_synth *, struct mad_frame const *);
-
-# endif
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libmad/timer.c
--- a/src/libmad/timer.c Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,485 +0,0 @@
-/*
- * libmad - MPEG audio decoder library
- * Copyright (C) 2000-2004 Underbit Technologies, Inc.
- *
- * This program 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.
- *
- * This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: timer.c,v 1.6 2004/04/22 00:23:26 miguelfreitas Exp $
- */
-
-# ifdef HAVE_CONFIG_H
-# include "config.h"
-# endif
-
-# include "global.h"
-
-# include <stdio.h>
-
-# ifdef HAVE_ASSERT_H
-# include <assert.h>
-# endif
-
-# include "timer.h"
-
-mad_timer_t const mad_timer_zero = { 0, 0 };
-
-/*
- * NAME: timer->compare()
- * DESCRIPTION: indicate relative order of two timers
- */
-int mad_timer_compare(mad_timer_t timer1, mad_timer_t timer2)
-{
- signed long diff;
-
- diff = timer1.seconds - timer2.seconds;
- if (diff < 0)
- return -1;
- else if (diff > 0)
- return +1;
-
- diff = timer1.fraction - timer2.fraction;
- if (diff < 0)
- return -1;
- else if (diff > 0)
- return +1;
-
- return 0;
-}
-
-/*
- * NAME: timer->negate()
- * DESCRIPTION: invert the sign of a timer
- */
-void mad_timer_negate(mad_timer_t *timer)
-{
- timer->seconds = -timer->seconds;
-
- if (timer->fraction) {
- timer->seconds -= 1;
- timer->fraction = MAD_TIMER_RESOLUTION - timer->fraction;
- }
-}
-
-/*
- * NAME: timer->abs()
- * DESCRIPTION: return the absolute value of a timer
- */
-mad_timer_t mad_timer_abs(mad_timer_t timer)
-{
- if (timer.seconds < 0)
- mad_timer_negate(&timer);
-
- return timer;
-}
-
-/*
- * NAME: reduce_timer()
- * DESCRIPTION: carry timer fraction into seconds
- */
-static
-void reduce_timer(mad_timer_t *timer)
-{
- timer->seconds += timer->fraction / MAD_TIMER_RESOLUTION;
- timer->fraction %= MAD_TIMER_RESOLUTION;
-}
-
-/*
- * NAME: gcd()
- * DESCRIPTION: compute greatest common denominator
- */
-static
-unsigned long gcd(unsigned long num1, unsigned long num2)
-{
- unsigned long tmp;
-
- while (num2) {
- tmp = num2;
- num2 = num1 % num2;
- num1 = tmp;
- }
-
- return num1;
-}
-
-/*
- * NAME: reduce_rational()
- * DESCRIPTION: convert rational expression to lowest terms
- */
-static
-void reduce_rational(unsigned long *numer, unsigned long *denom)
-{
- unsigned long factor;
-
[... 233 lines omitted ...]
- case MAD_UNITS_HOURS:
- case MAD_UNITS_MINUTES:
- case MAD_UNITS_SECONDS:
- break;
-
- case MAD_UNITS_DECISECONDS:
- case MAD_UNITS_CENTISECONDS:
- case MAD_UNITS_MILLISECONDS:
-
- case MAD_UNITS_8000_HZ:
- case MAD_UNITS_11025_HZ:
- case MAD_UNITS_12000_HZ:
- case MAD_UNITS_16000_HZ:
- case MAD_UNITS_22050_HZ:
- case MAD_UNITS_24000_HZ:
- case MAD_UNITS_32000_HZ:
- case MAD_UNITS_44100_HZ:
- case MAD_UNITS_48000_HZ:
-
- case MAD_UNITS_24_FPS:
- case MAD_UNITS_25_FPS:
- case MAD_UNITS_30_FPS:
- case MAD_UNITS_48_FPS:
- case MAD_UNITS_50_FPS:
- case MAD_UNITS_60_FPS:
- case MAD_UNITS_75_FPS:
- {
- unsigned long denom;
-
- denom = MAD_TIMER_RESOLUTION / fracunits;
-
- frac = timer.fraction / denom;
- sub = scale_rational(timer.fraction % denom, denom, subparts);
- }
- break;
-
- case MAD_UNITS_23_976_FPS:
- case MAD_UNITS_24_975_FPS:
- case MAD_UNITS_29_97_FPS:
- case MAD_UNITS_47_952_FPS:
- case MAD_UNITS_49_95_FPS:
- case MAD_UNITS_59_94_FPS:
- /* drop-frame encoding */
- /* N.B. this is only well-defined for MAD_UNITS_29_97_FPS */
- {
- unsigned long frame, cycle, d, m;
-
- frame = mad_timer_count(timer, fracunits);
-
- cycle = -fracunits * 60 * 10 - (10 - 1) * 2;
-
- d = frame / cycle;
- m = frame % cycle;
- frame += (10 - 1) * 2 * d;
- if (m > 2)
- frame += 2 * ((m - 2) / (cycle / 10));
-
- frac = frame % -fracunits;
- seconds = frame / -fracunits;
- }
- break;
- }
-
- switch (units) {
- case MAD_UNITS_HOURS:
- minutes = seconds / 60;
- hours = minutes / 60;
-
- sprintf(dest, format,
- hours,
- (unsigned int) (minutes % 60),
- (unsigned int) (seconds % 60),
- frac, sub);
- break;
-
- case MAD_UNITS_MINUTES:
- minutes = seconds / 60;
-
- sprintf(dest, format,
- minutes,
- (unsigned int) (seconds % 60),
- frac, sub);
- break;
-
- case MAD_UNITS_SECONDS:
- sprintf(dest, format,
- seconds,
- frac, sub);
- break;
-
- case MAD_UNITS_23_976_FPS:
- case MAD_UNITS_24_975_FPS:
- case MAD_UNITS_29_97_FPS:
- case MAD_UNITS_47_952_FPS:
- case MAD_UNITS_49_95_FPS:
- case MAD_UNITS_59_94_FPS:
- if (fracunits < 0) {
- /* not yet implemented */
- sub = 0;
- }
-
- /* fall through */
-
- case MAD_UNITS_DECISECONDS:
- case MAD_UNITS_CENTISECONDS:
- case MAD_UNITS_MILLISECONDS:
-
- case MAD_UNITS_8000_HZ:
- case MAD_UNITS_11025_HZ:
- case MAD_UNITS_12000_HZ:
- case MAD_UNITS_16000_HZ:
- case MAD_UNITS_22050_HZ:
- case MAD_UNITS_24000_HZ:
- case MAD_UNITS_32000_HZ:
- case MAD_UNITS_44100_HZ:
- case MAD_UNITS_48000_HZ:
-
- case MAD_UNITS_24_FPS:
- case MAD_UNITS_25_FPS:
- case MAD_UNITS_30_FPS:
- case MAD_UNITS_48_FPS:
- case MAD_UNITS_50_FPS:
- case MAD_UNITS_60_FPS:
- case MAD_UNITS_75_FPS:
- sprintf(dest, format, mad_timer_count(timer, units), sub);
- break;
- }
-}
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libmad/timer.h
--- a/src/libmad/timer.h Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-/*
- * libmad - MPEG audio decoder library
- * Copyright (C) 2000-2004 Underbit Technologies, Inc.
- *
- * This program 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.
- *
- * This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: timer.h,v 1.3 2004/04/22 00:23:27 miguelfreitas Exp $
- */
-
-# ifndef LIBMAD_TIMER_H
-# define LIBMAD_TIMER_H
-
-typedef struct {
- signed long seconds; /* whole seconds */
- unsigned long fraction; /* 1/MAD_TIMER_RESOLUTION seconds */
-} mad_timer_t;
-
-extern mad_timer_t const mad_timer_zero;
-
-# define MAD_TIMER_RESOLUTION 352800000UL
-
-enum mad_units {
- MAD_UNITS_HOURS = -2,
- MAD_UNITS_MINUTES = -1,
- MAD_UNITS_SECONDS = 0,
-
- /* metric units */
-
- MAD_UNITS_DECISECONDS = 10,
- MAD_UNITS_CENTISECONDS = 100,
- MAD_UNITS_MILLISECONDS = 1000,
-
- /* audio sample units */
-
- MAD_UNITS_8000_HZ = 8000,
- MAD_UNITS_11025_HZ = 11025,
- MAD_UNITS_12000_HZ = 12000,
-
- MAD_UNITS_16000_HZ = 16000,
- MAD_UNITS_22050_HZ = 22050,
- MAD_UNITS_24000_HZ = 24000,
-
- MAD_UNITS_32000_HZ = 32000,
- MAD_UNITS_44100_HZ = 44100,
- MAD_UNITS_48000_HZ = 48000,
-
- /* video frame/field units */
-
- MAD_UNITS_24_FPS = 24,
- MAD_UNITS_25_FPS = 25,
- MAD_UNITS_30_FPS = 30,
- MAD_UNITS_48_FPS = 48,
- MAD_UNITS_50_FPS = 50,
- MAD_UNITS_60_FPS = 60,
-
- /* CD audio frames */
-
- MAD_UNITS_75_FPS = 75,
-
- /* video drop-frame units */
-
- MAD_UNITS_23_976_FPS = -24,
- MAD_UNITS_24_975_FPS = -25,
- MAD_UNITS_29_97_FPS = -30,
- MAD_UNITS_47_952_FPS = -48,
- MAD_UNITS_49_95_FPS = -50,
- MAD_UNITS_59_94_FPS = -60
-};
-
-# define mad_timer_reset(timer) ((void) (*(timer) = mad_timer_zero))
-
-int mad_timer_compare(mad_timer_t, mad_timer_t);
-
-# define mad_timer_sign(timer) mad_timer_compare((timer), mad_timer_zero)
-
-void mad_timer_negate(mad_timer_t *);
-mad_timer_t mad_timer_abs(mad_timer_t);
-
-void mad_timer_set(mad_timer_t *, unsigned long, unsigned long, unsigned long);
-void mad_timer_add(mad_timer_t *, mad_timer_t);
-void mad_timer_multiply(mad_timer_t *, signed long);
-
-signed long mad_timer_count(mad_timer_t, enum mad_units);
-unsigned long mad_timer_fraction(mad_timer_t, unsigned long);
-void mad_timer_string(mad_timer_t, char *, char const *,
- enum mad_units, enum mad_units, unsigned long);
-
-# endif
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libmad/version.c
--- a/src/libmad/version.c Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-/*
- * libmad - MPEG audio decoder library
- * Copyright (C) 2000-2004 Underbit Technologies, Inc.
- *
- * This program 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.
- *
- * This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: version.c,v 1.2 2004/04/22 00:23:27 miguelfreitas Exp $
- */
-
-# ifdef HAVE_CONFIG_H
-# include "config.h"
-# endif
-
-# include "global.h"
-
-# include "version.h"
-
-char const mad_version[] = "MPEG Audio Decoder " MAD_VERSION;
-char const mad_copyright[] = "Copyright (C) " MAD_PUBLISHYEAR " " MAD_AUTHOR;
-char const mad_author[] = MAD_AUTHOR " <" MAD_EMAIL ">";
-
-char const mad_build[] = ""
-# if defined(DEBUG)
- "DEBUG "
-# elif defined(NDEBUG)
- "NDEBUG "
-# endif
-
-# if defined(EXPERIMENTAL)
- "EXPERIMENTAL "
-# endif
-
-# if defined(FPM_64BIT)
- "FPM_64BIT "
-# elif defined(FPM_INTEL)
- "FPM_INTEL "
-# elif defined(FPM_ARM)
- "FPM_ARM "
-# elif defined(FPM_MIPS)
- "FPM_MIPS "
-# elif defined(FPM_SPARC)
- "FPM_SPARC "
-# elif defined(FPM_PPC)
- "FPM_PPC "
-# elif defined(FPM_DEFAULT)
- "FPM_DEFAULT "
-# endif
-
-# if defined(ASO_IMDCT)
- "ASO_IMDCT "
-# endif
-# if defined(ASO_INTERLEAVE1)
- "ASO_INTERLEAVE1 "
-# endif
-# if defined(ASO_INTERLEAVE2)
- "ASO_INTERLEAVE2 "
-# endif
-# if defined(ASO_ZEROCHECK)
- "ASO_ZEROCHECK "
-# endif
-
-# if defined(OPT_SPEED)
- "OPT_SPEED "
-# elif defined(OPT_ACCURACY)
- "OPT_ACCURACY "
-# endif
-
-# if defined(OPT_SSO)
- "OPT_SSO "
-# endif
-
-# if defined(OPT_DCTO) /* never defined here */
- "OPT_DCTO "
-# endif
-
-# if defined(OPT_STRICT)
- "OPT_STRICT "
-# endif
-;
diff -r 3e9d711a77870cbbca8db3bca3dcacad6092064f -r \
df73844e8a47005bef76ffe6cd9323d8e6a1c218 src/libmad/version.h
--- a/src/libmad/version.h Thu Jun 21 23:27:37 2007 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-/*
- * libmad - MPEG audio decoder library
- * Copyright (C) 2000-2004 Underbit Technologies, Inc.
- *
- * This program 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.
- *
- * This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: version.h,v 1.2 2004/04/22 00:23:29 miguelfreitas Exp $
- */
-
-# ifndef LIBMAD_VERSION_H
-# define LIBMAD_VERSION_H
-
-# define MAD_VERSION_MAJOR 0
-# define MAD_VERSION_MINOR 15
-# define MAD_VERSION_PATCH 1
-# define MAD_VERSION_EXTRA " (beta)"
-
-# define MAD_VERSION_STRINGIZE(str) #str
-# define MAD_VERSION_STRING(num) MAD_VERSION_STRINGIZE(num)
-
-# define MAD_VERSION MAD_VERSION_STRING(MAD_VERSION_MAJOR) "." \
- MAD_VERSION_STRING(MAD_VERSION_MINOR) "." \
- MAD_VERSION_STRING(MAD_VERSION_PATCH) \
- MAD_VERSION_EXTRA
-
-# define MAD_PUBLISHYEAR "2000-2004"
-# define MAD_AUTHOR "Underbit Technologies, Inc."
-# define MAD_EMAIL "info@underbit.com"
-
-extern char const mad_version[];
-extern char const mad_copyright[];
-extern char const mad_author[];
-extern char const mad_build[];
-
-# endif
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Xine-cvslog mailing list
Xine-cvslog@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/xine-cvslog
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic