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