📄 ac3_parse.c
字号:
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 + -