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

📄 ac3_parse.c

📁 vlc stand 0.1.99 ist sehr einfach
💻 C
📖 第 1 页 / 共 3 页
字号:
	if ((!blknum) && (p_ac3dec->audblk.lfeexpstr == EXP_REUSE))	    return 1;    }    /* Determine the bandwidths of all the fbw channels */    for (i = 0; i < p_ac3dec->bsi.nfchans; i++) {        u16 grp_size;        if (p_ac3dec->audblk.chexpstr[i] != EXP_REUSE) {            if (p_ac3dec->audblk.cplinu && p_ac3dec->audblk.chincpl[i]) {                p_ac3dec->audblk.endmant[i] = p_ac3dec->audblk.cplstrtmant;            } else {                NeedBits (&(p_ac3dec->bit_stream), 6);                p_ac3dec->audblk.chbwcod[i] = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 6));                DumpBits (&(p_ac3dec->bit_stream), 6);		if (p_ac3dec->audblk.chbwcod[i] > 60)		    return 1;                p_ac3dec->audblk.endmant[i] = ((p_ac3dec->audblk.chbwcod[i] + 12) * 3) + 37;            }            /* Calculate the number of exponent groups to fetch */            grp_size =  3 * (1 << (p_ac3dec->audblk.chexpstr[i] - 1));            p_ac3dec->audblk.nchgrps[i] = (p_ac3dec->audblk.endmant[i] - 1 + (grp_size - 3)) / grp_size;        }    }    /* Get the coupling exponents if they exist */    if (p_ac3dec->audblk.cplinu && (p_ac3dec->audblk.cplexpstr != EXP_REUSE)) {        NeedBits (&(p_ac3dec->bit_stream), 4);        p_ac3dec->audblk.cplabsexp = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 4));        DumpBits (&(p_ac3dec->bit_stream), 4);        for (i=0; i< p_ac3dec->audblk.ncplgrps;i++) {            NeedBits (&(p_ac3dec->bit_stream), 7);            p_ac3dec->audblk.cplexps[i] = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 7));            DumpBits (&(p_ac3dec->bit_stream), 7);	    if (p_ac3dec->audblk.cplexps[i] >= 125)		return 1;        }    }    /* Get the fwb channel exponents */    for (i=0; i < p_ac3dec->bsi.nfchans; i++) {        if (p_ac3dec->audblk.chexpstr[i] != EXP_REUSE) {            NeedBits (&(p_ac3dec->bit_stream), 4);            p_ac3dec->audblk.exps[i][0] = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 4));            DumpBits (&(p_ac3dec->bit_stream), 4);            for (j=1; j<=p_ac3dec->audblk.nchgrps[i];j++) {                NeedBits (&(p_ac3dec->bit_stream), 7);                p_ac3dec->audblk.exps[i][j] = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 7));                DumpBits (&(p_ac3dec->bit_stream), 7);		if (p_ac3dec->audblk.exps[i][j] >= 125)		    return 1;            }            NeedBits (&(p_ac3dec->bit_stream), 2);            p_ac3dec->audblk.gainrng[i] = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 2));            DumpBits (&(p_ac3dec->bit_stream), 2);        }    }    /* Get the lfe channel exponents */    if (p_ac3dec->bsi.lfeon && (p_ac3dec->audblk.lfeexpstr != EXP_REUSE)) {        NeedBits (&(p_ac3dec->bit_stream), 4);        p_ac3dec->audblk.lfeexps[0] = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 4));        DumpBits (&(p_ac3dec->bit_stream), 4);        NeedBits (&(p_ac3dec->bit_stream), 7);        p_ac3dec->audblk.lfeexps[1] = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 7));        DumpBits (&(p_ac3dec->bit_stream), 7);	if (p_ac3dec->audblk.lfeexps[1] >= 125)	    return 1;        NeedBits (&(p_ac3dec->bit_stream), 7);        p_ac3dec->audblk.lfeexps[2] = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 7));        DumpBits (&(p_ac3dec->bit_stream), 7);	if (p_ac3dec->audblk.lfeexps[2] >= 125)	    return 1;    }    /* Get the parametric bit allocation parameters */    NeedBits (&(p_ac3dec->bit_stream), 1);    p_ac3dec->audblk.baie = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 1));    DumpBits (&(p_ac3dec->bit_stream), 1);    if ((!blknum) && (!p_ac3dec->audblk.baie))	return 1;    if (p_ac3dec->audblk.baie) {        NeedBits (&(p_ac3dec->bit_stream), 2);        p_ac3dec->audblk.sdcycod = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 2));        DumpBits (&(p_ac3dec->bit_stream), 2);        NeedBits (&(p_ac3dec->bit_stream), 2);        p_ac3dec->audblk.fdcycod = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 2));        DumpBits (&(p_ac3dec->bit_stream), 2);        NeedBits (&(p_ac3dec->bit_stream), 2);        p_ac3dec->audblk.sgaincod = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 2));        DumpBits (&(p_ac3dec->bit_stream), 2);        NeedBits (&(p_ac3dec->bit_stream), 2);        p_ac3dec->audblk.dbpbcod = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 2));        DumpBits (&(p_ac3dec->bit_stream), 2);        NeedBits (&(p_ac3dec->bit_stream), 3);        p_ac3dec->audblk.floorcod = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 3));        DumpBits (&(p_ac3dec->bit_stream), 3);    }    /* Get the SNR off set info if it exists */    NeedBits (&(p_ac3dec->bit_stream), 1);    p_ac3dec->audblk.snroffste = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 1));    DumpBits (&(p_ac3dec->bit_stream), 1);    if ((!blknum) && (!p_ac3dec->audblk.snroffste))	return 1;    if (p_ac3dec->audblk.snroffste) {        NeedBits (&(p_ac3dec->bit_stream), 6);        p_ac3dec->audblk.csnroffst = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 6));        DumpBits (&(p_ac3dec->bit_stream), 6);        if (p_ac3dec->audblk.cplinu) {            NeedBits (&(p_ac3dec->bit_stream), 4);            p_ac3dec->audblk.cplfsnroffst = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 4));            DumpBits (&(p_ac3dec->bit_stream), 4);            NeedBits (&(p_ac3dec->bit_stream), 3);            p_ac3dec->audblk.cplfgaincod = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 3));            DumpBits (&(p_ac3dec->bit_stream), 3);        }        for (i = 0;i < p_ac3dec->bsi.nfchans; i++) {            NeedBits (&(p_ac3dec->bit_stream), 4);            p_ac3dec->audblk.fsnroffst[i] = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 4));            DumpBits (&(p_ac3dec->bit_stream), 4);            NeedBits (&(p_ac3dec->bit_stream), 3);            p_ac3dec->audblk.fgaincod[i] = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 3));            DumpBits (&(p_ac3dec->bit_stream), 3);        }        if (p_ac3dec->bsi.lfeon) {            NeedBits (&(p_ac3dec->bit_stream), 4);            p_ac3dec->audblk.lfefsnroffst = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 4));            DumpBits (&(p_ac3dec->bit_stream), 4);            NeedBits (&(p_ac3dec->bit_stream), 3);            p_ac3dec->audblk.lfefgaincod = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 3));            DumpBits (&(p_ac3dec->bit_stream), 3);        }    }    /* Get coupling leakage info if it exists */    if (p_ac3dec->audblk.cplinu) {        NeedBits (&(p_ac3dec->bit_stream), 1);        p_ac3dec->audblk.cplleake = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 1));        DumpBits (&(p_ac3dec->bit_stream), 1);	if ((!blknum) && (!p_ac3dec->audblk.cplleake))	    return 1;        if (p_ac3dec->audblk.cplleake) {            NeedBits (&(p_ac3dec->bit_stream), 3);            p_ac3dec->audblk.cplfleak = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 3));            DumpBits (&(p_ac3dec->bit_stream), 3);            NeedBits (&(p_ac3dec->bit_stream), 3);            p_ac3dec->audblk.cplsleak = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 3));            DumpBits (&(p_ac3dec->bit_stream), 3);        }    }    /* Get the delta bit alloaction info */    NeedBits (&(p_ac3dec->bit_stream), 1);    p_ac3dec->audblk.deltbaie = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 1));    DumpBits (&(p_ac3dec->bit_stream), 1);    if (p_ac3dec->audblk.deltbaie) {        if (p_ac3dec->audblk.cplinu) {            NeedBits (&(p_ac3dec->bit_stream), 2);            p_ac3dec->audblk.cpldeltbae = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 2));            DumpBits (&(p_ac3dec->bit_stream), 2);	    if (p_ac3dec->audblk.cpldeltbae == 3)		return 1;        }        for (i = 0;i < p_ac3dec->bsi.nfchans; i++) {            NeedBits (&(p_ac3dec->bit_stream), 2);            p_ac3dec->audblk.deltbae[i] = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 2));            DumpBits (&(p_ac3dec->bit_stream), 2);	    if (p_ac3dec->audblk.deltbae[i] == 3)		return 1;        }        if (p_ac3dec->audblk.cplinu && (p_ac3dec->audblk.cpldeltbae == DELTA_BIT_NEW)) {            NeedBits (&(p_ac3dec->bit_stream), 3);            p_ac3dec->audblk.cpldeltnseg = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 3));            DumpBits (&(p_ac3dec->bit_stream), 3);            for (i = 0;i < p_ac3dec->audblk.cpldeltnseg + 1; i++) {                NeedBits (&(p_ac3dec->bit_stream), 5);                p_ac3dec->audblk.cpldeltoffst[i] = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 5));                DumpBits (&(p_ac3dec->bit_stream), 5);                NeedBits (&(p_ac3dec->bit_stream), 4);                p_ac3dec->audblk.cpldeltlen[i] = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 4));                DumpBits (&(p_ac3dec->bit_stream), 4);                NeedBits (&(p_ac3dec->bit_stream), 3);                p_ac3dec->audblk.cpldeltba[i] = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 3));                DumpBits (&(p_ac3dec->bit_stream), 3);            }        }        for (i = 0; i < p_ac3dec->bsi.nfchans; i++) {            if (p_ac3dec->audblk.deltbae[i] == DELTA_BIT_NEW) {                NeedBits (&(p_ac3dec->bit_stream), 3);                p_ac3dec->audblk.deltnseg[i] = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 3));                DumpBits (&(p_ac3dec->bit_stream), 3);//                if (p_ac3dec->audblk.deltnseg[i] >= 8)//                    fprintf (stderr, "parse debug: p_ac3dec->audblk.deltnseg[%i] == %i\n", i, p_ac3dec->audblk.deltnseg[i]);                for (j = 0; j < p_ac3dec->audblk.deltnseg[i] + 1; j++) {                    NeedBits (&(p_ac3dec->bit_stream), 5);                    p_ac3dec->audblk.deltoffst[i][j] = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 5));                    DumpBits (&(p_ac3dec->bit_stream), 5);                    NeedBits (&(p_ac3dec->bit_stream), 4);                    p_ac3dec->audblk.deltlen[i][j] = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 4));                    DumpBits (&(p_ac3dec->bit_stream), 4);                    NeedBits (&(p_ac3dec->bit_stream), 3);                    p_ac3dec->audblk.deltba[i][j] = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 3));                    DumpBits (&(p_ac3dec->bit_stream), 3);                }            }        }    }    /* Check to see if there's any dummy info to get */    NeedBits (&(p_ac3dec->bit_stream), 1);    p_ac3dec->audblk.skiple = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 1));    DumpBits (&(p_ac3dec->bit_stream), 1);    if (p_ac3dec->audblk.skiple) {        NeedBits (&(p_ac3dec->bit_stream), 9);        p_ac3dec->audblk.skipl = (u16)(p_ac3dec->bit_stream.buffer >> (32 - 9));        DumpBits (&(p_ac3dec->bit_stream), 9);        for (i = 0; i < p_ac3dec->audblk.skipl ; i++) {            NeedBits (&(p_ac3dec->bit_stream), 8);            DumpBits (&(p_ac3dec->bit_stream), 8);        }    }    return 0;}void parse_auxdata (ac3dec_t * p_ac3dec){    int i;    int skip_length;    skip_length = (p_ac3dec->syncinfo.frame_size * 16) - p_ac3dec->bit_stream.total_bits_read - 17 - 1;//    fprintf (stderr, "parse debug: skip_length == %i\n", skip_length);    for (i = 0; i < skip_length; i++) {        NeedBits (&(p_ac3dec->bit_stream), 1);        DumpBits (&(p_ac3dec->bit_stream), 1);    }    /* get the auxdata exists bit */    NeedBits (&(p_ac3dec->bit_stream), 1);    DumpBits (&(p_ac3dec->bit_stream), 1);    /* Skip the CRC reserved bit */    NeedBits (&(p_ac3dec->bit_stream), 1);    DumpBits (&(p_ac3dec->bit_stream), 1);    /* Get the crc */    NeedBits (&(p_ac3dec->bit_stream), 16);    DumpBits (&(p_ac3dec->bit_stream), 16);}

⌨️ 快捷键说明

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