Remove svn $Id$ header.
[platform/upstream/libvorbis.git] / lib / codec_internal.h
index fcab3bb..e522be1 100644 (file)
@@ -5,12 +5,12 @@
  * 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 http://www.xiph.org/                  *
+ *                                                                  *
  ********************************************************************
 
  function: libvorbis codec headers
- last mod: $Id: codec_internal.h,v 1.10 2001/12/12 09:45:24 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;
@@ -47,7 +50,6 @@ typedef struct {
   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;
@@ -55,17 +57,18 @@ 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'
@@ -77,14 +80,16 @@ typedef struct backend_lookup_state {
 
   bitrate_manager_state bms;
 
-} backend_lookup_state;
+  ogg_int64_t sample_count;
+} private_state;
 
-/* vorbis_info contains all the setup information specific to the
+/* 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
@@ -99,7 +104,6 @@ typedef struct codec_setup_info {
 
   int        modes;
   int        maps;
-  int        times;
   int        floors;
   int        residues;
   int        books;
@@ -108,23 +112,55 @@ typedef struct codec_setup_info {
   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;
 
-  int    passlimit[32];     /* iteration limit per couple/quant pass */
-  int    coupling_passes;
+  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