Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
libVP62.h
Package: libVP62_SDL.rar [view]
Upload User: dgatc004
Upload Date: 2009-08-04
Package Size: 434k
Code Size: 9k
Category:
Embeded-SCM Develop
Development Platform:
Visual C++
- #ifndef _LIBVP62_
- #define _LIBVP62_
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <sys/timeb.h>
- #define VP62_FRAME_INTRA 0
- #define VP62_MB_SIZE 16
- #define VP62_REF_FRAME_CURRENT 0
- #define VP62_REF_FRAME_PREVIOUS 1
- #define VP62_REF_FRAME_TAGGED 2
- #define VP62_MB_INTER_NOVEC_PF 0 /* Inter MB, no vector, from previous frame */
- #define VP62_MB_INTRA 1 /* Intra MB */
- #define VP62_MB_INTER_DELTA_PF 2 /* Inter MB, above/left vector + delta, from previous Frame */
- #define VP62_MB_INTER_V1_PF 3 /* Inter MB, first vector, from previous Frame */
- #define VP62_MB_INTER_V2_PF 4 /* Inter MB, second vector, from previous Frame */
- #define VP62_MB_INTER_NOVEC_TF 5 /* Inter MB, no vector, from tagged frame */
- #define VP62_MB_INTER_DELTA_TF 6 /* Inter MB, above/left vector + delta, from tagged Frame */
- #define VP62_MB_INTER_4V 7 /* Inter MB, 4 vectors, from previous Frame */
- #define VP62_MB_INTER_V1_TF 8 /* Inter MB, first vector, from tagged Frame */
- #define VP62_MB_INTER_V2_TF 9 /* Inter MB, second vector, from tagged Frame */
- #define VP62_CLIP(p, v) (p->clip0to255[(v)+512])
- #define VP62_ABS(p, v) (p->valAbs[(v)+512])
- #define COS_1_16 64277 /* 64277 = Cos PI/16 * 65536 */
- #define COS_2_16 60547 /* 60547 = Cos 2xPI/16 * 65536 */
- #define COS_3_16 54491 /* 54491 = Cos 3xPI/16 * 65536 */
- #define COS_4_16 46341 /* 46341 = Cos 4xPI/16 * 65536 */
- #define COS_5_16 36410 /* 36410 = Cos 5xPI/16 * 65536 */
- #define COS_6_16 25080 /* 25080 = Cos 6xPI/16 * 65536 */
- #define COS_7_16 12785 /* 12785 = Cos 7xPI/16 * 65536 */
- typedef struct _VP62_AB{
- char notNullDC;
- char refFrame;
- short dcCoeff;
- }
- VP62_AB;
- typedef struct _VP62_MB{
- unsigned char type;
- short vx,vy;
- }
- VP62_MB;
- typedef struct _VP62{
- unsigned char *inputBuffer; /* Points to payload buffer */
- /* Frame characteristics */
- int frameType;
- int tagFrame;
- int displayRows;
- int displayColumns;
- int movieWidth;
- int movieHeight;
- int lastRows;
- int lastCols;
- /* Interlacing */
- int interlacedBlock;
- unsigned char useInterlacing;
- int ilProb;
- int quantizer;
- int lastQuantizer;
- short coeffScale[64];
- /* Arithmetic Coding (AC) */
- int acHigh;
- unsigned long acCodeWord;
- int acBits;
- unsigned char *acBuffer;
- unsigned char *acBufferEnd;
- /* Buffers */
- unsigned char *yuvCurrentFrame;
- unsigned char *yuvTaggedFrame;
- unsigned char *yuvLastFrame;
- int yStride; /* actual stride + 96 */
- int uvStride; /* actual stride + 48 */
- int ySize; /* Luma Y */
- int uvSize; /* Chroma U or V */
- int mbc; /* Number of horizontal MB */
- int mbr; /* Number of vertical MB */
- int orgPlaneStride[6];
- int planeStride[6];
- int pixelOffset[6]; /* Offset to upper left corner pixel for each blocks */
- /* DC Predictors management */
- VP62_AB *aboveBlocks; /* Above blocks */
- int aboveBlockIndex[6];
- VP62_AB prevBlock[4]; /* Left blocks */
- short prevDCRefFrame[3][3];
- /* Blocks And Macroblock */
- int currentMbType;
- int prevMbType;
- short block8x8[6][64];
- unsigned char block12x12[144]; /* Intermediate 12x12 block for filtering */
- int coeffIndexToPos[64];
- unsigned char coeffReorder[64];
- short coeff420[6][64]; /* DCT Coeff for each blocks */
- VP62_MB *macroblocks;
- /* Vectors (Motion compensation) */
- short blockVector[6][2]; /* Vectors for each block in MB */
- short prevFrameFirstVectorCandidate[2];
- short prevFrameSecondVectorCandidate[2];
- int prevFrameFirstVectorCandidatePos;
- short tagFrameFirstVectorCandidate[2];
- short tagFrameSecondVectorCandidate[2];
- int tagFrameFirstVectorCandidatePos;
- /* Predictors candidates */
- int predOffset[12];
- /* Filtering hints for moved blocks */
- int blockCopyFiltering;
- int blockCopyFilterMode;
- int maxVectorLength;
- int VP62_SampleVarianceThreshold;
- int filterSelection;
- /* AC Models */
- unsigned char sigVectorModel[2]; /* Delta sign */
- unsigned char dctVectorModel[2]; /* Delta Coding Types */
- unsigned char pdvVectorModel[2][7]; /* Predefined Delta Values */
- unsigned char fdvVectorModel[2][8]; /* 8 bit delta value definition */
- unsigned char sameMbTypeModel[3][10]; /* Same as previous MB type */
- unsigned char nextMbTypeModel[3][10][9]; /* Next MB type */
- unsigned char dccvCoeffModel[2][11]; /* DC Coeff value */
- unsigned char ractCoeffModel[2][3][6][11]; /* Run/AC coding type and AC coeff value */
- unsigned char dcctCoeffModel[2][3][5]; /* DC coeff coding type */
- unsigned char runvCoeffModel[2][14]; /* Run value */
- unsigned char mbTypesStats[3][2][10]; /* Contextual, next MbType statistics */
- /* Fast Clipping And Value Computation */
- unsigned char clip0to255[1024]; /* Indexes from -512 to +512, biased by 512 */
- unsigned char valAbs[1024]; /* Ditto */
- int referenceFrame[10];
- int b6to4[6];
- int b6to3[6];
- }
- VP62, *PVP62;
- /* Internal API */
- void VP62_ParseAndDecodeFrame(PVP62 pVP62);
- int VP62_ParseAndCheckHeaderForImageResizing(PVP62 pVP62);
- void VP62_AllocateBuffers(PVP62 pVP62);
- void VP62_InitOffscreenBorders(PVP62 pVP62, unsigned char *yuv);
- void VP62_InitCoeffScaleFactors(PVP62 pVP62);
- /* Arithmetic Coding */
- void VP62_ACInit(PVP62 pVP62, unsigned char *);
- int VP62_ACGetBitProb(PVP62 pVP62, int prob);
- int VP62_ACGetBit(PVP62 pVP62);
- int VP62_ACGetBits(PVP62 pVP62, int bits);
- /* Block Blitters */
- void VP62_DrawMacroBlock(PVP62 pVP62, int block);
- void VP62_DrawDeltaBlockFromYUV(PVP62 pVP62, unsigned char *yuv, int block);
- void VP62_DrawDeltaBlockFromMacroBlock(PVP62 pVP62, short *srcBlock, short *delta, int b);
- /* Stream Models */
- void VP62_DefaultModelsInit(PVP62 pVP62);
- void VP62_ParseVectorModelsChanges(PVP62 pVP62);
- void VP62_ParseVectorAdjustment(PVP62 pVP62, short *v, int mbType);
- void VP62_ParseCoeffModelsChanges(PVP62 pVP62);
- void VP62_ParseMacroblockTypeModelsChanges(PVP62 pVP62);
- void VP62_InitCoeffOrderTable(PVP62 pVP62);
- /* Parsing And Decoding */
- void VP62_IDCT8x8(PVP62 pVP62, int block);
- void VP62_ParseDecodeDraxMacroBlock(PVP62 pVP62, int row, int col);
- int VP62_ParseMacroblockType(PVP62 pVP62, int prevType, int index);
- void VP62_ParseCoeff(PVP62 pVP62);
- void VP62_AddPredictorsDC(PVP62 pVP62);
- void VP62_DecodeMacroBlockTypeAndVectors(PVP62 pVP62, int row, int col);
- void VP62_Decode4Vectors(PVP62 pVP62, int row, int col);
- /* Motion Compensation */
- void VP62_GetBlock(PVP62 pVP62, int block, short *dstBlock, unsigned char *yuv);
- int VP62_GetVectorsPredictors(PVP62 pVP62, int row, int col, int refFrame);
- /* Copy And Filter */
- void VP62_Fill12x12Block(PVP62 pVP62, unsigned char *yuv, int pixOffset, int vx, int vy, int block);
- void VP62_SimpleBlockCopy(PVP62 pVP62, short *dstBlock, unsigned char *yuv, int offset, int stride);
- void VP62_FourPointFilterHV(PVP62 pVP62, short *dstBlock, unsigned char *yuv, int offset, int stride, int delta, int *filter);
- void VP62_FourPointFilterDiag(PVP62 pVP62, short *dstBlock, unsigned char *yuv, int offset, int stride, int *hFilter, int *vFilter);
- void VP62_AAFilterHV(PVP62 pVP62, short *dstBlock, unsigned char *yuv, int offset, int stride, int delta, int *aa);
- void VP62_AAFilterDiag(PVP62 pVP62, short *dstBlock, unsigned char *yuv, int offset, int stride, int *hAA, int *vAA);
- void VP62_FilteredBlockCopy(PVP62 pVP62, short *dstBlock, unsigned char *yuv, int iOffset, int oOffset, int stride, int x8, int y8, unsigned char useEnhancedFilter, int select);
- int *VP62_GetCoordDiv();
- int VP62_Adjust(int v, int t);
- void VP62_EdgeFilter(PVP62 pVP62, int n, int pixInc, int lineInc, int t);
- /* C API */
- PVP62 VP62_NewStream();
- void VP62_DelStream(PVP62 pVP62);
- int VP62_DecodePayloadPacket(PVP62 pVP62, unsigned char *payload, int length);
- void VP62_GetImageSize(PVP62 pVP62, int *width, int *height);
- void VP62_GetDisplaySize(PVP62 pVP62, int *width, int *height);
- void VP62_GetRGB(PVP62 pVP62, unsigned char *rgb);
- #endif /* _LIBVP62_ */