tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

codec_internal.h (5392B)


      1 /********************************************************************
      2 *                                                                  *
      3 * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
      4 * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
      5 * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
      6 * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
      7 *                                                                  *
      8 * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
      9 * by the Xiph.Org Foundation https://xiph.org/                     *
     10 *                                                                  *
     11 ********************************************************************
     12 
     13 function: libvorbis codec headers
     14 
     15 ********************************************************************/
     16 
     17 #ifndef _V_CODECI_H_
     18 #define _V_CODECI_H_
     19 
     20 #include "envelope.h"
     21 #include "codebook.h"
     22 
     23 #define BLOCKTYPE_IMPULSE    0
     24 #define BLOCKTYPE_PADDING    1
     25 #define BLOCKTYPE_TRANSITION 0
     26 #define BLOCKTYPE_LONG       1
     27 
     28 #define PACKETBLOBS 15
     29 
     30 typedef struct vorbis_block_internal{
     31  float  **pcmdelay;  /* this is a pointer into local storage */
     32  float  ampmax;
     33  int    blocktype;
     34 
     35  oggpack_buffer *packetblob[PACKETBLOBS]; /* initialized, must be freed;
     36                                              blob [PACKETBLOBS/2] points to
     37                                              the oggpack_buffer in the
     38                                              main vorbis_block */
     39 } vorbis_block_internal;
     40 
     41 typedef void vorbis_look_floor;
     42 typedef void vorbis_look_residue;
     43 typedef void vorbis_look_transform;
     44 
     45 /* mode ************************************************************/
     46 typedef struct {
     47  int blockflag;
     48  int windowtype;
     49  int transformtype;
     50  int mapping;
     51 } vorbis_info_mode;
     52 
     53 typedef void vorbis_info_floor;
     54 typedef void vorbis_info_residue;
     55 typedef void vorbis_info_mapping;
     56 
     57 #include "psy.h"
     58 #include "bitrate.h"
     59 
     60 typedef struct private_state {
     61  /* local lookup storage */
     62  envelope_lookup        *ve; /* envelope lookup */
     63  int                     window[2];
     64  vorbis_look_transform **transform[2];    /* block, type */
     65  drft_lookup             fft_look[2];
     66 
     67  int                     modebits;
     68  vorbis_look_floor     **flr;
     69  vorbis_look_residue   **residue;
     70  vorbis_look_psy        *psy;
     71  vorbis_look_psy_global *psy_g_look;
     72 
     73  /* local storage, only used on the encoding side.  This way the
     74     application does not need to worry about freeing some packets'
     75     memory and not others'; packet storage is always tracked.
     76     Cleared next call to a _dsp_ function */
     77  unsigned char *header;
     78  unsigned char *header1;
     79  unsigned char *header2;
     80 
     81  bitrate_manager_state bms;
     82 
     83  ogg_int64_t sample_count;
     84 } private_state;
     85 
     86 /* codec_setup_info contains all the setup information specific to the
     87   specific compression/decompression mode in progress (eg,
     88   psychoacoustic settings, channel setup, options, codebook
     89   etc).
     90 *********************************************************************/
     91 
     92 #include "highlevel.h"
     93 typedef struct codec_setup_info {
     94 
     95  /* Vorbis supports only short and long blocks, but allows the
     96     encoder to choose the sizes */
     97 
     98  long blocksizes[2];
     99 
    100  /* modes are the primary means of supporting on-the-fly different
    101     blocksizes, different channel mappings (LR or M/A),
    102     different residue backends, etc.  Each mode consists of a
    103     blocksize flag and a mapping (along with the mapping setup */
    104 
    105  int        modes;
    106  int        maps;
    107  int        floors;
    108  int        residues;
    109  int        books;
    110  int        psys;     /* encode only */
    111 
    112  vorbis_info_mode       *mode_param[64];
    113  int                     map_type[64];
    114  vorbis_info_mapping    *map_param[64];
    115  int                     floor_type[64];
    116  vorbis_info_floor      *floor_param[64];
    117  int                     residue_type[64];
    118  vorbis_info_residue    *residue_param[64];
    119  static_codebook        *book_param[256];
    120  codebook               *fullbooks;
    121 
    122  vorbis_info_psy        *psy_param[4]; /* encode only */
    123  vorbis_info_psy_global psy_g_param;
    124 
    125  bitrate_manager_info   bi;
    126  highlevel_encode_setup hi; /* used only by vorbisenc.c.  It's a
    127                                highly redundant structure, but
    128                                improves clarity of program flow. */
    129  int         halfrate_flag; /* painless downsample for decode */
    130 } codec_setup_info;
    131 
    132 extern vorbis_look_psy_global *_vp_global_look(vorbis_info *vi);
    133 extern void _vp_global_free(vorbis_look_psy_global *look);
    134 
    135 
    136 
    137 typedef struct {
    138  int sorted_index[VIF_POSIT+2];
    139  int forward_index[VIF_POSIT+2];
    140  int reverse_index[VIF_POSIT+2];
    141 
    142  int hineighbor[VIF_POSIT];
    143  int loneighbor[VIF_POSIT];
    144  int posts;
    145 
    146  int n;
    147  int quant_q;
    148  vorbis_info_floor1 *vi;
    149 
    150  long phrasebits;
    151  long postbits;
    152  long frames;
    153 } vorbis_look_floor1;
    154 
    155 
    156 
    157 extern int *floor1_fit(vorbis_block *vb,vorbis_look_floor1 *look,
    158                          const float *logmdct,   /* in */
    159                          const float *logmask);
    160 extern int *floor1_interpolate_fit(vorbis_block *vb,vorbis_look_floor1 *look,
    161                          int *A,int *B,
    162                          int del);
    163 extern int floor1_encode(oggpack_buffer *opb,vorbis_block *vb,
    164                  vorbis_look_floor1 *look,
    165                  int *post,int *ilogmask);
    166 #endif