* 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-2001 *
- * by the XIPHOPHORUS Company http://www.xiph.org/ *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
+ * by the Xiph.Org Foundation https://xiph.org/ *
+ * *
********************************************************************
function: libvorbis codec headers
- last mod: $Id: codec_internal.h,v 1.11 2001/12/19 01:08:13 xiphmont Exp $
********************************************************************/
#define BLOCKTYPE_IMPULSE 0
#define BLOCKTYPE_PADDING 1
-#define BLOCKTYPE_TRANSITION 0
+#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 **pcmdelay; /* this is a pointer into local storage */
float ampmax;
int blocktype;
- ogg_uint32_t *packet_markers;
+ 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_time;
-typedef void vorbis_look_mapping;
typedef void vorbis_look_floor;
typedef void vorbis_look_residue;
typedef void vorbis_look_transform;
int mapping;
} vorbis_info_mode;
-typedef void vorbis_info_time;
typedef void vorbis_info_floor;
typedef void vorbis_info_residue;
typedef void vorbis_info_mapping;
#include "psy.h"
#include "bitrate.h"
-typedef struct backend_lookup_state {
+typedef struct private_state {
/* local lookup storage */
- envelope_lookup *ve; /* envelope lookup */
- float **window[2][2][2]; /* block, leadin, leadout, type */
+ envelope_lookup *ve; /* envelope lookup */
+ int window[2];
vorbis_look_transform **transform[2]; /* block, type */
- codebook *fullbooks;
- vorbis_look_psy_global *psy_g_look;
+ drft_lookup fft_look[2];
- /* backend lookups are tied to the mode, not the backend or naked mapping */
int modebits;
- vorbis_look_mapping **mode;
+ 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'
bitrate_manager_state bms;
-} backend_lookup_state;
-
-/* high level configuration information for setting things up
- step-by-step with the detaile vorbis_encode_ctl interface */
-
-typedef struct highlevel_block {
- double tone_mask_quality;
- double tone_peaklimit_quality;
-
- double noise_bias_quality;
- double noise_compand_quality;
-
- double ath_quality;
-
-} highlevel_block;
-
-typedef struct highlevel_encode_setup {
- double base_quality; /* these have to be tracked by the ctl */
- double base_quality_short; /* interface so that the right books get */
- double base_quality_long; /* chosen... */
-
- int short_block_p;
- int long_block_p;
- int impulse_block_p;
-
- int stereo_couple_p;
- int stereo_backfill_p;
- int residue_backfill_p;
-
- int stereo_point_dB;
- double stereo_point_kHz[2];
- double lowpass_kHz[2];
-
- double ath_floating_dB;
- double ath_absolute_dB;
-
- double amplitude_track_dBpersec;
- double trigger_quality;
-
- highlevel_block blocktype[4]; /* impulse, padding, trans, long */
-
-} highlevel_encode_setup;
+ 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).
+ etc).
*********************************************************************/
+#include "highlevel.h"
typedef struct codec_setup_info {
/* Vorbis supports only short and long blocks, but allows the
int modes;
int maps;
- int times;
int floors;
int residues;
int books;
vorbis_info_mode *mode_param[64];
int map_type[64];
vorbis_info_mapping *map_param[64];
- int time_type[64];
- vorbis_info_time *time_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[64]; /* encode only */
+ vorbis_info_psy *psy_param[4]; /* encode only */
vorbis_info_psy_global psy_g_param;
bitrate_manager_info bi;
- highlevel_encode_setup hi;
-
- int passlimit[32]; /* iteration limit per couple/quant pass */
- int coupling_passes;
+ 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