nuclear@1: /******************************************************************** nuclear@1: * * nuclear@1: * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * nuclear@1: * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * nuclear@1: * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * nuclear@1: * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * nuclear@1: * * nuclear@1: * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * nuclear@1: * by the Xiph.Org Foundation http://www.xiph.org/ * nuclear@1: * * nuclear@1: ******************************************************************** nuclear@1: nuclear@1: function: libvorbis codec headers nuclear@1: last mod: $Id: codec_internal.h 16227 2009-07-08 06:58:46Z xiphmont $ nuclear@1: nuclear@1: ********************************************************************/ nuclear@1: nuclear@1: #ifndef _V_CODECI_H_ nuclear@1: #define _V_CODECI_H_ nuclear@1: nuclear@1: #include "envelope.h" nuclear@1: #include "codebook.h" nuclear@1: nuclear@1: #define BLOCKTYPE_IMPULSE 0 nuclear@1: #define BLOCKTYPE_PADDING 1 nuclear@1: #define BLOCKTYPE_TRANSITION 0 nuclear@1: #define BLOCKTYPE_LONG 1 nuclear@1: nuclear@1: #define PACKETBLOBS 15 nuclear@1: nuclear@1: typedef struct vorbis_block_internal{ nuclear@1: float **pcmdelay; /* this is a pointer into local storage */ nuclear@1: float ampmax; nuclear@1: int blocktype; nuclear@1: nuclear@1: oggpack_buffer *packetblob[PACKETBLOBS]; /* initialized, must be freed; nuclear@1: blob [PACKETBLOBS/2] points to nuclear@1: the oggpack_buffer in the nuclear@1: main vorbis_block */ nuclear@1: } vorbis_block_internal; nuclear@1: nuclear@1: typedef void vorbis_look_floor; nuclear@1: typedef void vorbis_look_residue; nuclear@1: typedef void vorbis_look_transform; nuclear@1: nuclear@1: /* mode ************************************************************/ nuclear@1: typedef struct { nuclear@1: int blockflag; nuclear@1: int windowtype; nuclear@1: int transformtype; nuclear@1: int mapping; nuclear@1: } vorbis_info_mode; nuclear@1: nuclear@1: typedef void vorbis_info_floor; nuclear@1: typedef void vorbis_info_residue; nuclear@1: typedef void vorbis_info_mapping; nuclear@1: nuclear@1: #include "psy.h" nuclear@1: #include "bitrate.h" nuclear@1: nuclear@1: typedef struct private_state { nuclear@1: /* local lookup storage */ nuclear@1: envelope_lookup *ve; /* envelope lookup */ nuclear@1: int window[2]; nuclear@1: vorbis_look_transform **transform[2]; /* block, type */ nuclear@1: drft_lookup fft_look[2]; nuclear@1: nuclear@1: int modebits; nuclear@1: vorbis_look_floor **flr; nuclear@1: vorbis_look_residue **residue; nuclear@1: vorbis_look_psy *psy; nuclear@1: vorbis_look_psy_global *psy_g_look; nuclear@1: nuclear@1: /* local storage, only used on the encoding side. This way the nuclear@1: application does not need to worry about freeing some packets' nuclear@1: memory and not others'; packet storage is always tracked. nuclear@1: Cleared next call to a _dsp_ function */ nuclear@1: unsigned char *header; nuclear@1: unsigned char *header1; nuclear@1: unsigned char *header2; nuclear@1: nuclear@1: bitrate_manager_state bms; nuclear@1: nuclear@1: ogg_int64_t sample_count; nuclear@1: } private_state; nuclear@1: nuclear@1: /* codec_setup_info contains all the setup information specific to the nuclear@1: specific compression/decompression mode in progress (eg, nuclear@1: psychoacoustic settings, channel setup, options, codebook nuclear@1: etc). nuclear@1: *********************************************************************/ nuclear@1: nuclear@1: #include "highlevel.h" nuclear@1: typedef struct codec_setup_info { nuclear@1: nuclear@1: /* Vorbis supports only short and long blocks, but allows the nuclear@1: encoder to choose the sizes */ nuclear@1: nuclear@1: long blocksizes[2]; nuclear@1: nuclear@1: /* modes are the primary means of supporting on-the-fly different nuclear@1: blocksizes, different channel mappings (LR or M/A), nuclear@1: different residue backends, etc. Each mode consists of a nuclear@1: blocksize flag and a mapping (along with the mapping setup */ nuclear@1: nuclear@1: int modes; nuclear@1: int maps; nuclear@1: int floors; nuclear@1: int residues; nuclear@1: int books; nuclear@1: int psys; /* encode only */ nuclear@1: nuclear@1: vorbis_info_mode *mode_param[64]; nuclear@1: int map_type[64]; nuclear@1: vorbis_info_mapping *map_param[64]; nuclear@1: int floor_type[64]; nuclear@1: vorbis_info_floor *floor_param[64]; nuclear@1: int residue_type[64]; nuclear@1: vorbis_info_residue *residue_param[64]; nuclear@1: static_codebook *book_param[256]; nuclear@1: codebook *fullbooks; nuclear@1: nuclear@1: vorbis_info_psy *psy_param[4]; /* encode only */ nuclear@1: vorbis_info_psy_global psy_g_param; nuclear@1: nuclear@1: bitrate_manager_info bi; nuclear@1: highlevel_encode_setup hi; /* used only by vorbisenc.c. It's a nuclear@1: highly redundant structure, but nuclear@1: improves clarity of program flow. */ nuclear@1: int halfrate_flag; /* painless downsample for decode */ nuclear@1: } codec_setup_info; nuclear@1: nuclear@1: extern vorbis_look_psy_global *_vp_global_look(vorbis_info *vi); nuclear@1: extern void _vp_global_free(vorbis_look_psy_global *look); nuclear@1: nuclear@1: nuclear@1: nuclear@1: typedef struct { nuclear@1: int sorted_index[VIF_POSIT+2]; nuclear@1: int forward_index[VIF_POSIT+2]; nuclear@1: int reverse_index[VIF_POSIT+2]; nuclear@1: nuclear@1: int hineighbor[VIF_POSIT]; nuclear@1: int loneighbor[VIF_POSIT]; nuclear@1: int posts; nuclear@1: nuclear@1: int n; nuclear@1: int quant_q; nuclear@1: vorbis_info_floor1 *vi; nuclear@1: nuclear@1: long phrasebits; nuclear@1: long postbits; nuclear@1: long frames; nuclear@1: } vorbis_look_floor1; nuclear@1: nuclear@1: nuclear@1: nuclear@1: extern int *floor1_fit(vorbis_block *vb,vorbis_look_floor1 *look, nuclear@1: const float *logmdct, /* in */ nuclear@1: const float *logmask); nuclear@1: extern int *floor1_interpolate_fit(vorbis_block *vb,vorbis_look_floor1 *look, nuclear@1: int *A,int *B, nuclear@1: int del); nuclear@1: extern int floor1_encode(oggpack_buffer *opb,vorbis_block *vb, nuclear@1: vorbis_look_floor1 *look, nuclear@1: int *post,int *ilogmask); nuclear@1: #endif