1
0
mirror of https://github.com/mpv-player/mpv synced 2024-12-30 19:22:11 +00:00
mpv/libmpcodecs/vqf.h
2009-07-07 02:34:35 +03:00

229 lines
6.2 KiB
C

/* (c)Copyright 1996-2000 NTT Cyber Space Laboratories */
/* Released on 2000.05.22 by N. Iwakami */
/* Modified on 2000.05.25 by N. Iwakami */
/* Released on 2000.09.06 by N. Iwakami */
// Modified for MPlayer on 2004.12.29
#ifndef MPLAYER_VQF_H
#define MPLAYER_VQF_H
#include <stdio.h>
#ifdef _MSC_VER
# ifdef DLL_MODULE
# define DllPort __declspec( dllexport )
# else
# define DllPort __declspec( dllimport )
# endif
#else
# define DllPort
#endif
#ifdef __cplusplus
extern "C" { // only need to import/export C interface if used by C++ source code
#endif
/************************/
/*** General settings ***/
/************************/
/* Initialization error code */
enum INIT_ERROR_CODE {
TVQ_NO_ERROR = 0, // no error
TVQ_ERROR, // general
TVQ_ERROR_VERSION, // wrong version
TVQ_ERROR_CHANNEL, // channel setting error
TVQ_ERROR_MODE, // wrong coding mode
TVQ_ERROR_PARAM, // inner parameter setting error
TVQ_ERROR_N_CAN, // wrong number of VQ pre-selection candidates, used only in encoder
};
/* version ID */
#define TVQ_UNKNOWN_VERSION -1
#define V2 0
#define V2PP 1
#define N_VERSIONS 2
/* window types */
enum WINDOW_TYPE {
ONLY_LONG_WINDOW = 0,
LONG_SHORT_WINDOW,
ONLY_SHORT_WINDOW,
SHORT_LONG_WINDOW,
SHORT_MEDIUM_WINDOW,
MEDIUM_LONG_WINDOW,
LONG_MEDIUM_WINDOW,
MEDIUM_SHORT_WINDOW,
ONLY_MEDIUM_WINDOW,
};
/* block types */
enum BLOCK_TYPE {
BLK_SHORT = 0,
BLK_MEDIUM,
BLK_LONG,
BLK_PPC,
};
#define N_BTYPE 3 // number of block types
#define N_INTR_TYPE 4 // number of interleave types, enum BLOCK_TYPE is commonly used for detecting interleave types.
/* maximum number of channels */
#define N_CH_MAX 2
/* type definition of code information interface */
typedef struct {
/* block type */
int w_type;
int btype;
/* FBC info */
int *segment_sw[ N_CH_MAX ];
int *band_sw[ N_CH_MAX ];
int *fg_intensity[ N_CH_MAX ];
/* VQ info */
int *wvq;
/* BSE info */
int *fw;
int *fw_alf;
/* gain info */
int *pow;
/* LSP info */
int *lsp[ N_CH_MAX ];
/* PPC info */
int pit[ N_CH_MAX ];
int *pls;
int pgain[ N_CH_MAX ];
/* EBC info */
int *bc[ N_CH_MAX ];
void *manager;
} INDEX;
/***********************************************/
/*** Definitions about program configuration ***/
/***********************************************/
/* type definition of tvqConfInfoSubBlock */
typedef struct {
int sf_sz; // subframe size
int nsf; // number of subframes
int ndiv; // number of division of weighted interleave vector quantization
int ncrb; // number of Bark-scale subbands
int fw_ndiv; // number of division of BSE VQ
int fw_nbit; // number of bits for BSE VQ
int nsubg; // number of sub-blocks for gain coding
int ppc_enable; // PPC switch
int ebc_enable; // EBC switch
int ebc_crb_base; // EBC base band
int ebc_bits; // EBC bits
int fbc_enable; // FBC switch
int fbc_n_segment; // FBC number of segments
int fbc_nband; // FBC number of subbands
int *fbc_crb_tbl; // FBC subband table
} tvqConfInfoSubBlock;
/* type definition of tvqConfInfo */
typedef struct {
/* frame configuration */
int N_CH;
/* window type coding */
int BITS_WTYPE;
/* LSP coding */
int LSP_BIT0;
int LSP_BIT1;
int LSP_BIT2;
int LSP_SPLIT;
/* Bark-scale envelope coding */
int FW_ARSW_BITS;
/* gain coding */
int GAIN_BITS;
int SUB_GAIN_BITS;
/* pitch excitation */
int N_DIV_P;
int BASF_BIT;
int PGAIN_BIT;
/* block type dependent parameters */
tvqConfInfoSubBlock cfg[N_BTYPE];
} tvqConfInfo;
/*************************************************/
/*** Definitions about TwinVQ bitstream header ***/
/*************************************************/
//#include "declib_src/tvq_hdr.h"
//#ifndef BUFSIZ
//#define BUFSIZ 1024
//#endif
#define KEYWORD_BYTES 4
#define VERSION_BYTES 8
#define ELEM_BYTES sizeof(unsigned long)
/*
*/
typedef struct {
char ID[KEYWORD_BYTES+VERSION_BYTES+1];
int size;
/* Common Chunk */
int channelMode; /* channel mode (mono:0/stereo:1) */
int bitRate; /* bit rate (kbit/s) */
int samplingRate; /* sampling rate (44.1 kHz -> 44) */
int securityLevel; /* security level (always 0) */
/* Text Chunk */
char Name[BUFSIZ];
char Comt[BUFSIZ];
char Auth[BUFSIZ];
char Cpyr[BUFSIZ];
char File[BUFSIZ];
char Extr[BUFSIZ]; // add by OKAMOTO 99.12.21
/* Data size chunk*/
int Dsiz;
} headerInfo;
// TwinVQ decoder initialization/termination functions
//DllPort int TvqInitialize( headerInfo *setupInfo, INDEX *index, int dispErrorMessageBox );
//DllPort void TvqTerminate( INDEX *index );
//DllPort void TvqGetVectorInfo(int *bits0[], int *bits1[]);
//DllPort void TvqResetFrameCounter(void);
// TwinVQ decoder function
//DllPort void TvqDecodeFrame(INDEX *indexp, float out[]);
//DllPort int TvqWtypeToBtype( int w_type, int *btype );
//DllPort void TvqUpdateVectorInfo(int varbits, int *ndiv, int bits0[], int bits1[]);
//DllPort void TvqSetFrameCounter( int position );
// TwinVQ query functions
//DllPort int TvqCheckVersion(char *versionID);
//DllPort void TvqGetSetupInfo(headerInfo *setupInfo); // setup information
//DllPort void TvqGetConfInfo(tvqConfInfo *cf); // configuration information
//DllPort int TvqGetFrameSize(void); // frame size
//DllPort int TvqGetNumChannels(void); // number of channels
//DllPort int TvqGetBitRate(void); // total bitrate
//DllPort float TvqGetSamplingRate(void); // sampling rate
//DllPort int TvqGetNumFixedBitsPerFrame(void); // number of fixed bits per frame
//DllPort int TvqGetNumFrames(void); // number of decoded frame
//DllPort int TvqGetModuleVersion( char* versionString );
#ifdef V2PLUS_SUPPORT
// TwinVQ FB coding tool control
DllPort void TvqFbCountUsedBits(int nbit); // count number of used bits
DllPort float TvqGetFbCurrentBitrate(void); // query average bitrate for the tool
DllPort int TvqGetFbTotalBits(void); // query total number of used bits
#endif
#ifdef __cplusplus
}
#endif
#endif /* MPLAYER_VQF_H */