diff options
| author | Daniel Stenberg <daniel@haxx.se> | 2005-06-22 19:41:30 +0000 |
|---|---|---|
| committer | Daniel Stenberg <daniel@haxx.se> | 2005-06-22 19:41:30 +0000 |
| commit | 1dd672fe3226fa77113f35e4d72f50b863484c63 (patch) | |
| tree | 67b424ab990f160dbc8fb238b9fa3390ceba10ed /apps/plugins/codeca52.c | |
| parent | b7aaa641b864628d76103b8c9d57c15747560ca7 (diff) | |
| download | rockbox-1dd672fe3226fa77113f35e4d72f50b863484c63.zip rockbox-1dd672fe3226fa77113f35e4d72f50b863484c63.tar.gz rockbox-1dd672fe3226fa77113f35e4d72f50b863484c63.tar.bz2 rockbox-1dd672fe3226fa77113f35e4d72f50b863484c63.tar.xz | |
moved and renamed the codecs, gave the codecs a new extension (.codec),
unified to a single codec-only API, made a new codeclib, disabled the building
of the *2wav plugins
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6812 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins/codeca52.c')
| -rw-r--r-- | apps/plugins/codeca52.c | 210 |
1 files changed, 0 insertions, 210 deletions
diff --git a/apps/plugins/codeca52.c b/apps/plugins/codeca52.c deleted file mode 100644 index ced5ced..0000000 --- a/apps/plugins/codeca52.c +++ /dev/null @@ -1,210 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2005 Dave Chapman - * - * All files in this archive are subject to the GNU General Public License. - * See the file COPYING in the source tree root for full license agreement. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ - -#include "plugin.h" - -#include <inttypes.h> /* Needed by a52.h */ -#include <codecs/liba52/config-a52.h> -#include <codecs/liba52/a52.h> - -#include "playback.h" -#include "lib/codeclib.h" - -#define BUFFER_SIZE 4096 - -struct plugin_api* rb; -struct codec_api* ci; - -static float gain = 1; -static a52_state_t * state; -unsigned long samplesdone; -unsigned long frequency; - -/* Two buffers used outside liba52 */ -static uint8_t buf[3840] IDATA_ATTR; -static int16_t int16_samples[256*2] IDATA_ATTR; - -static inline int16_t convert (int32_t i) -{ - i >>= 15; - return (i > 32767) ? 32767 : ((i < -32768) ? -32768 : i); -} - -void output_audio(sample_t* samples,int flags) { - int i; - - flags &= A52_CHANNEL_MASK | A52_LFE; - - /* We may need to check the output format in flags - I'm not sure... */ - for (i = 0; i < 256; i++) { - int16_samples[2*i] = convert (samples[i]); - int16_samples[2*i+1] = convert (samples[i+256]); - } - - rb->yield(); - while(!ci->audiobuffer_insert((unsigned char*)int16_samples,256*2*2)) - rb->yield(); -} - - -void a52_decode_data (uint8_t * start, uint8_t * end) -{ - static uint8_t * bufptr = buf; - static uint8_t * bufpos = buf + 7; - - /* - * sample_rate and flags are static because this routine could - * exit between the a52_syncinfo() and the ao_setup(), and we want - * to have the same values when we get back ! - */ - - static int sample_rate; - static int flags; - int bit_rate; - int len; - - while (1) { - len = end - start; - if (!len) - break; - if (len > bufpos - bufptr) - len = bufpos - bufptr; - memcpy (bufptr, start, len); - bufptr += len; - start += len; - if (bufptr == bufpos) { - if (bufpos == buf + 7) { - int length; - - length = a52_syncinfo (buf, &flags, &sample_rate, &bit_rate); - if (!length) { - DEBUGF("skip\n"); - for (bufptr = buf; bufptr < buf + 6; bufptr++) - bufptr[0] = bufptr[1]; - continue; - } - bufpos = buf + length; - } else { - // The following two defaults are taken from audio_out_oss.c: - level_t level; - sample_t bias; - int i; - - /* This is the configuration for the downmixing: */ - flags=A52_STEREO|A52_ADJUST_LEVEL|A52_LFE; - level=(1 << 26); - bias=0; - - level = (level_t) (level * gain); - - if (a52_frame (state, buf, &flags, &level, bias)) { - goto error; - } - -// file_info->frames_decoded++; - -// /* We assume this never changes */ -// file_info->samplerate=sample_rate; - frequency=sample_rate; - - // An A52 frame consists of 6 blocks of 256 samples - // So we decode and output them one block at a time - for (i = 0; i < 6; i++) { - if (a52_block (state)) { - goto error; - } - - output_audio(a52_samples (state),flags); - samplesdone+=256; - } - ci->set_elapsed(samplesdone/(frequency/1000)); - bufptr = buf; - bufpos = buf + 7; - continue; - - error: - - //logf("Error decoding A52 stream\n"); - bufptr = buf; - bufpos = buf + 7; - } - } - } -} - -#ifndef SIMULATOR -extern char iramcopy[]; -extern char iramstart[]; -extern char iramend[]; -#endif - -/* this is the plugin entry point */ -enum plugin_status plugin_start(struct plugin_api* api, void* parm) -{ - size_t n; - unsigned char* filebuf; - - /* Generic plugin initialisation */ - TEST_PLUGIN_API(api); - - rb = api; - ci = (struct codec_api*)parm; - -#ifndef SIMULATOR - rb->memcpy(iramstart, iramcopy, iramend-iramstart); -#endif - - ci->configure(CODEC_SET_FILEBUF_LIMIT, (int *)(1024*1024*2)); - ci->configure(CODEC_SET_FILEBUF_CHUNKSIZE, (int *)(1024*128)); - - next_track: - - if (codec_init(api, ci)) { - return PLUGIN_ERROR; - } - - /* Intialise the A52 decoder and check for success */ - state = a52_init (0); // Parameter is "accel" - - /* The main decoding loop */ - - samplesdone=0; - while (1) { - if (ci->stop_codec || ci->reload_codec) { - break; - } - - filebuf=ci->request_buffer(&n,BUFFER_SIZE); - - if (n==0) { /* End of Stream */ - break; - } - - a52_decode_data(filebuf,filebuf+n); - - ci->advance_buffer(n); - } - - if (ci->request_next_track()) - goto next_track; - -//NOT NEEDED??: a52_free (state); - - return PLUGIN_OK; -} |