mirror of
https://github.com/mpv-player/mpv
synced 2024-12-27 01:22:30 +00:00
229 lines
6.2 KiB
C
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 */
|