Windows2003-3790/enduser/netmeeting/av/codecs/dec/dech261/proto.h
2020-09-30 16:53:55 +02:00

160 lines
6.3 KiB
C

/*
* @DEC_COPYRIGHT@
*/
/*
* HISTORY
* $Log: $
* $EndLog$
*/
/*****************************************************************************
** Copyright (c) Digital Equipment Corporation, 1994 **
** **
** All Rights Reserved. Unpublished rights reserved under the copyright **
** laws of the United States. **
** **
** The software contained on this media is proprietary to and embodies **
** the confidential technology of Digital Equipment Corporation. **
** Possession, use, duplication or dissemination of the software and **
** media is authorized only pursuant to a valid written license from **
** Digital Equipment Corporation. **
** **
** RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure by the U.S. **
** Government is subject to restrictions as set forth in Subparagraph **
** (c)(1)(ii) of DFARS 252.227-7013, or in FAR 52.227-19, as applicable. **
******************************************************************************/
#ifndef _SV_H261_PROTO_H_
#define _SV_H261_PROTO_H_
#include "sv_intrn.h"
#define nextstate(huff, laststate, mask) ( (cb & mask \
? huff->state[laststate] >> 16 \
: huff->state[laststate] ) & 0xffff )
#define DecodeHuff(bs, huff, State, cb, bits) \
State=0; bits=1; cb = (unsigned short)ScBSPeekBits(bs, 16); \
if (bs->EOI) return(SvErrorEndBitstream); \
while (1) { \
if ((State = nextstate(huff, State, 0x8000)) & 0x8000) { \
ScBSSkipBits(bs, bits); \
State = (State == 0xffff) ? 0 : State & 0x7fff; \
break; \
} \
cb<<=1; bits++; \
}
#define DecodeHuffA(bs, huff, State, cb, bits) \
State=0; bits=1; cb = (unsigned short)ScBSPeekBits(bs, 16); \
while (1) { \
if ((State = nextstate(huff, State, 0x8000)) & 0x8000) { \
if (bs->EOI && bs->shift<(unsigned int)bits) return(SvErrorEndBitstream); \
ScBSSkipBits(bs, bits); \
if (State==0xffff || State==0x8000) return(0); \
else { State&=0x7fff; break; } \
} \
cb<<=1; bits++; \
}
#define DecodeHuffB(bs, huff, StateR, StateL, cb, bits) \
StateR=0; bits=1; cb = (unsigned short)ScBSPeekBits(bs, 16); \
while (1) { \
if ((StateR = nextstate(huff, StateR, 0x8000)) & 0x8000) { \
if (StateR==0xffff || StateR==0x8000) { ScBSSkipBits(bs, bits); \
return(0);} \
else { \
StateR &= 0x7fff; \
if (StateR == HUFFMAN_ESCAPE) { ScBSSkipBits(bs, bits); \
if (bs->EOI && bs->shift<14) return(SvErrorEndBitstream); \
StateR=(int)ScBSGetBits(bs,6); StateL=(int)ScBSGetBits(bs,8); } \
else { ScBSSkipBits(bs, bits+1); \
StateL = (cb&0x4000) ? -(StateR & 0xff) : (StateR & 0xff); \
StateR = StateR >> 8; } \
break; } \
} \
cb<<=1; bits++; \
}
/*
** sv_h261_cdD6.c
*/
extern SvStatus_t DecodeAC_Scale(SvH261Info_t *H261, ScBitstream_t *bs,
int index, int QuantUse, float *fmatrix);
extern float DecodeDC_Scale(SvH261Info_t *H261, ScBitstream_t *bs,
int BlockType, int QuantUse);
extern SvStatus_t CBPDecodeAC_Scale(SvH261Info_t *H261, ScBitstream_t *bs,
int index, int QuantUse, int BlockType, float *fmatrix);
extern void DGenScaleMat();
extern void ScaleIdct_64(float *ipbuf, int *outbuf);
extern int DecodeDC(SvH261Info_t *H261, ScBitstream_t *bs);
/*
** sv_h261_cdenc.c
*/
extern void GenScaleMat();
extern SvStatus_t EncodeAC(SvH261Info_t *H261,ScBitstream_t *bs,int index,
int *matrix);
extern SvStatus_t CBPEncodeAC(SvH261Info_t *H261,ScBitstream_t *bs,int index,
int *matrix);
extern void EncodeDC(SvH261Info_t *H261,ScBitstream_t *bs,int coef);
extern void InterQuant(float *tdct,int *dct,int mq);
extern void IntraQuant(float *tdct,int *dct, int mq);
extern void ZigzagMatrix(int *imatrix,int *omatrix);
extern void Inv_Quant(int *matrix,int QuantUse,int BlockType,float *fmatrix);
extern void ScaleIdct_64(float *ipbuf, int *outbuf);
extern void ScaleDct(int * ipbuf, float * outbuf);
/*
** sv_h261_marker.c
*/
extern void WritePictureHeader(SvH261Info_t *H261, ScBitstream_t *bs);
extern void WriteGOBHeader(SvH261Info_t *H261, ScBitstream_t *bs);
extern void ReadHeaderTrailer(SvH261Info_t *H261, ScBitstream_t *bs);
extern SvStatus_t ReadHeaderHeader(SvH261Info_t *H261, ScBitstream_t *bs);
extern void ReadGOBHeader(SvH261Info_t *H261, ScBitstream_t *bs);
extern SvStatus_t WriteMBHeader(SvH261Info_t *H261, ScBitstream_t *bs);
extern int ReadMBHeader(SvH261Info_t *H261, ScBitstream_t *bs);
/*
** sv_h261_me2.c
*/
extern void BruteMotionEstimation(SvH261Info_t *H261, unsigned char *pmem,
unsigned char *recmem, unsigned char *fmem);
extern void Logsearch(SvH261Info_t *H261, unsigned char *pmem,
unsigned char *recmem, unsigned char *fmem);
extern void CrawlMotionEstimation(SvH261Info_t *H261, unsigned char *pmem,
unsigned char *recmem, unsigned char *fmem);
extern int blockdiff16_C(unsigned char* ptr1, unsigned char *ptr2,
int Jump, int mv);
extern int blockdiff16_sub_C(unsigned char* ptr1, unsigned char *ptr2,
int Jump, int mv);
extern int fblockdiff16_sub_C(unsigned char* ptr1, unsigned char *ptr2,
int Jump);
/*
** sv_h261_blockdiff.s
*/
extern int blockdiff16(unsigned char* ptr1, unsigned char *ptr2, int Jump,
int);
extern int blockdiff16_sub(unsigned char* ptr1, unsigned char *ptr2,
int Jump, int);
extern int fblockdiff16_sub(unsigned char* ptr1, unsigned char *ptr2,
int Jump);
/*
** sv_h261_huffman.c
*/
extern void sv_H261HuffInit();
extern void sv_H261HuffFree();
extern int sv_H261HuffEncode(SvH261Info_t *H261, ScBitstream_t *bs, int val,
EHUFF *huff);
extern int sv_H261HuffDecode(SvH261Info_t *H261, ScBitstream_t *bs, DHUFF *huff);
#endif /* _SV_H263_PROTO_H_ */