⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 packing.c

📁 视频监控vc源代码.对于做视频系统的朋友们很有帮助
💻 C
字号:
/******************************************************************    iLBC Speech Coder ANSI-C Source Code    packing.c     Copyright (C) The Internet Society (2004).     All Rights Reserved.******************************************************************/#include <math.h>#include <stdlib.h>#include "iLBC_define.h"#include "constants.h"#include "helpfun.h"#include "packing.h"#include "string.h"/*----------------------------------------------------------------* *  splitting an integer into first most significant bits and  *  remaining least significant bits *---------------------------------------------------------------*/void packsplit(    int *index,                 /* (i) the value to split */    int *firstpart,             /* (o) the value specified by most                                        significant bits */    int *rest,                  /* (o) the value specified by least                                       significant bits */    int bitno_firstpart,    /* (i) number of bits in most                                        significant part */    int bitno_total             /* (i) number of bits in full range                                       of value */){    int bitno_rest = bitno_total-bitno_firstpart;    *firstpart = *index>>(bitno_rest);    *rest = *index-(*firstpart<<(bitno_rest));}/*----------------------------------------------------------------* *  combining a value corresponding to msb's with a value  *  corresponding to lsb's *---------------------------------------------------------------*/void packcombine(     int *index,                 /* (i/o) the msb value in the                                        combined value out */    int rest,                   /* (i) the lsb value */    int bitno_rest              /* (i) the number of bits in the                                        lsb part */){    *index = *index<<bitno_rest;    *index += rest;}/*----------------------------------------------------------------* *  packing of bits into bitstream, i.e., vector of bytes *---------------------------------------------------------------*/void dopack(     unsigned char **bitstream,  /* (i/o) on entrance pointer to                                        place in bitstream to pack                                        new data, on exit pointer                                        to place in bitstream to                                        pack future data */    int index,                  /* (i) the value to pack */    int bitno,                  /* (i) the number of bits that the                                        value will fit within */    int *pos                /* (i/o) write position in the                                        current byte */){    int posLeft;        /* Clear the bits before starting in a new byte */        if ((*pos)==0) {        **bitstream=0;    }    while (bitno>0) {                /* Jump to the next byte if end of this byte is reached*/                if (*pos==8) {            *pos=0;            (*bitstream)++;            **bitstream=0;        }        posLeft=8-(*pos);        /* Insert index into the bitstream */                if (bitno <= posLeft) {            **bitstream |= (unsigned char)(index<<(posLeft-bitno));            *pos+=bitno;            bitno=0;        } else {            **bitstream |= (unsigned char)(index>>(bitno-posLeft));                        *pos=8;            index-=((index>>(bitno-posLeft))<<(bitno-posLeft));                        bitno-=posLeft;        }    }}/*----------------------------------------------------------------* *  unpacking of bits from bitstream, i.e., vector of bytes *---------------------------------------------------------------*/void unpack(     unsigned char **bitstream,  /* (i/o) on entrance pointer to                                        place in bitstream to                                        unpack new data from, on                                        exit pointer to place in                                        bitstream to unpack future                                        data from */    int *index,                 /* (o) resulting value */    int bitno,                  /* (i) number of bits used to                                        represent the value */    int *pos                /* (i/o) read position in the                                        current byte */){    int BitsLeft;    *index=0;    while (bitno>0) {                /* move forward in bitstream when the end of the            byte is reached */                if (*pos==8) {            *pos=0;            (*bitstream)++;        }        BitsLeft=8-(*pos);        /* Extract bits to index */                if (BitsLeft>=bitno) {            *index+=((((**bitstream)<<(*pos)) & 0xFF)>>(8-bitno));                        *pos+=bitno;            bitno=0;        } else {                        if ((8-bitno)>0) {                *index+=((((**bitstream)<<(*pos)) & 0xFF)>>                    (8-bitno));                *pos=8;            } else {                *index+=(((int)(((**bitstream)<<(*pos)) & 0xFF))<<                    (bitno-8));                *pos=8;            }            bitno-=BitsLeft;        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -