rockbox/apps/codecs/libtta/ttalib.h
Nils Wallménius d3a1945939 Use more iram in the tta lib, speeds up decoding by 47MHz on h300 (mcf5249) and 2.7MHz on c200v1 (pp5024)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27403 a1c6a512-1295-4272-9138-f99709370657
2010-07-12 15:59:11 +00:00

157 lines
6.3 KiB
C

/*
* ttalib.h
*
* Description: TTAv1 player library prototypes
* Developed by: Alexander Djourik <ald@true-audio.com>
* Pavel Zhilin <pzh@true-audio.com>
*
* Copyright (c) 2004 True Audio Software. All rights reserved.
*
*/
/*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the True Audio Software nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef TTALIB_H_
#define TTALIB_H_
#define MAX_BPS 24 /* Max supported Bit resolution */
#define MAX_NCH 2 /* Max supported number of channels (Rockbox changes: 8 -> 2) */
#ifndef MAXLINE
#define MAX_LINE 1024
#endif
/* decoded pcm sample depth (sample 28bit + sign 1bit) */
#define TTA_OUTPUT_DEPTH 29
/* return codes */
#define NO_ERROR 0 /* No errors found */
#define OPEN_ERROR 1 /* Can't open file */
#define FORMAT_ERROR 2 /* Unknown TTA format version */
#define PLAYER_ERROR 3 /* Not supported file format */
#define FILE_ERROR 4 /* File is corrupted */
#define READ_ERROR 5 /* Can't read from file */
#define MEMORY_ERROR 6 /* Insufficient memory available */
/* Rockbox speciffic: does not use FRAME_TIME */
/* #define FRAME_TIME 1.04489795918367346939 */
#define MULTIPLY_FRAME_TIME(x) (256 * (x) / 245) /* = FRAME_TIME * x */
#define SEEK_STEP (int)MULTIPLY_FRAME_TIME(1000) /* (FRAME_TIME * 1000) */
#define ISO_BUFFER_LENGTH (1024*32)
#define ISO_NBUFFERS (8)
#define ISO_BUFFERS_SIZE (4096) /* (ISO_BUFFER_LENGTH*ISO_NBUFFERS) */
#define PCM_BUFFER_LENGTH (4608)
#define MAX_SEEK_TABLE_SIZE (4096)
typedef struct {
/* FILE *HANDLE; // file handle (Rockbox does not use) */
unsigned int FILESIZE; /* compressed size */
unsigned short NCH; /* number of channels */
unsigned short BPS; /* bits per sample */
unsigned short BSIZE; /* byte size */
unsigned short FORMAT; /* audio format */
unsigned int SAMPLERATE; /* samplerate (sps) */
unsigned int DATALENGTH; /* data length in samples */
unsigned int FRAMELEN; /* frame length */
unsigned int LENGTH; /* playback time (sec) */
unsigned int STATE; /* return code */
unsigned int DATAPOS; /* size of ID3v2 header */
unsigned int BITRATE; /* average bitrate (kbps) */
/* double COMPRESS; // compression ratio (Rockbox does not use) */
/* id3_info ID3; // ID3 information (Rockbox does not use) */
} tta_info;
enum tta_seek_type
{
TTA_SEEK_TIME,
TTA_SEEK_POS,
};
/*********************** Library functions *************************/
/* Rockbox speciffic: open_tta_file() does not use */
/* Rockbox speciffic: It is used in place of open_tta_file(). */
int set_tta_info( // FUNCTION: set tta file info structure
tta_info *info); // file info structure
/*
* RETURN VALUE
* This function returns 0 if success. Otherwise, -1 is returned
* and the variable STATE of the currently using info structure
* is set to indicate the error.
*
*/
/* Rockbox speciffic: close_tta_file() does not use */
/* Rockbox speciffic: set_position() change arguments and return value. */
/*
* FUNCTION: sets playback position
* pos: seek position
* seek_time_ms / SEEK_STEP (when type is TTA_SEEK_TIME)
* file position (when type is TTA_SEEK_POS)
*/
int set_position (
unsigned int pos,
enum tta_seek_type type);
/*
* RETURN VALUE
* This function returns the seeked data position (>= 0) if success. Otherwise, -1 is returned
* and the variable STATE of the currently using info structure
* is set to indicate the error.
*
*/
int player_init ( // FUNCTION: initializes TTA player
tta_info *info); // file info structure
/*
* RETURN VALUE
* This function returns 0 if success. Otherwise, -1 is returned
* and the variable STATE of the currently using info structure
* is set to indicate the error.
*
*/
void player_stop (void); // FUNCTION: destroys memory pools
/* Rockbox speciffic: unsigned char -> int32_t */
int get_samples ( // FUNCTION: decode PCM_BUFFER_LENGTH samples
int32_t *buffer) ICODE_ATTR; // into the current PCM buffer position
/*
* RETURN VALUE
* This function returns the number of samples successfully decoded.
* Otherwise, -1 is returned and the variable STATE of the currently
* using info structure is set to indicate the error.
*
*/
const char *get_error_str (int error); // FUNCTION: get error description
#endif /* TTALIB_H_ */