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

📄 discard.c

📁 Reference Implementation of G.711 standard and other voice codecs
💻 C
字号:
/******************************************************************** * * File :        discard.c * Description : Discard enhancement bits. * Created :     24/Jul/96 12:54 * Written by :  Maxim A. Lagerev * *******************************************************************/#include <stdlib.h>#include <stdio.h>FILE *in, *out;int getWord(int wordLen);void putWord(unsigned char word, int wordLen);static voiderror(const char *errMsg){    fputs(errMsg, stderr);    exit(EXIT_FAILURE);}intmain(int argc, char **argv){    int n;    int ne;    int word;    if (argc < 5)        error("Usage: discard N Ne <infile> <outfile>\n");    n = atoi(argv[1]);    ne = atoi(argv[2]);    if (!(2 <= n && n <= 8 && 1 <= ne && ne < n))        error("Incorrect parameters\n");    if ((in = fopen(argv[3], "rb")) == NULL)        error("Can't open input file\n");    if ((out = fopen(argv[4], "wb")) == NULL)        error("Can't open output file\n");    while ((word = getWord(n)) != EOF)        putWord((unsigned char)(word >> ne), n - ne);    fclose(in);    fclose(out);    return EXIT_SUCCESS;}intgetWord(int wordLen){    int fieldLen = 8;    static int firstFl = 1;    static unsigned char currFieldi = 0;    static int currPosi = 0;    int oldPos = currPosi;    unsigned char retw;    int ch;    if (firstFl) {        int ch = fgetc(in);        if (ch == EOF)            return EOF;        currFieldi = ch;        firstFl = 0;    }    currPosi += wordLen;    if (currPosi < fieldLen)        return (unsigned char)((currFieldi >> oldPos) & ~(0xffff << wordLen));    retw = currFieldi >> oldPos;    currPosi -= fieldLen;    ch = fgetc(in);    if (ch == EOF) {        firstFl = 1;        return (currPosi == 0) ? retw : EOF;    }    currFieldi = ch;    if (currPosi == 0)        return retw;    return (unsigned char)(((currFieldi << (fieldLen - oldPos)) | retw) &           ~(0xffff << wordLen));}voidputWord(unsigned char word, int wordLen){    int fieldLen = 8;    static unsigned char currFieldo = 0;    static int currPoso = 0;    int oldPos = currPoso;    if (wordLen == 0) {        if (currPoso != 0)            fputc(currFieldo, out);        fflush(out);        return;    }    currPoso += wordLen;    currFieldo |= word << oldPos;    if (currPoso < fieldLen)        return;    currPoso -= fieldLen;    fputc(currFieldo, out);    currFieldo = 0;    if (currPoso == 0)        return;    currFieldo = word >> (fieldLen - oldPos);}

⌨️ 快捷键说明

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