bitstream.c
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:21k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*
  2.  * FAAC - Freeware Advanced Audio Coder
  3.  * Copyright (C) 2001 Menno Bakker
  4.  *
  5.  * This library is free software; you can redistribute it and/or
  6.  * modify it under the terms of the GNU Lesser General Public
  7.  * License as published by the Free Software Foundation; either
  8.  * version 2.1 of the License, or (at your option) any later version.
  9.  *
  10.  * This library is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  * Lesser General Public License for more details.
  14.  * You should have received a copy of the GNU Lesser General Public
  15.  * License along with this library; if not, write to the Free Software
  16.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  17.  *
  18.  * $Id: bitstream.c,v 1.7 2002/02/25 22:26:43 dmackie Exp $
  19.  */
  20. #include <stdlib.h>
  21. #include <assert.h>
  22. #include "coder.h"
  23. #include "channels.h"
  24. #include "huffman.h"
  25. #include "bitstream.h"
  26. #include "ltp.h"
  27. #include "util.h"
  28. int WriteBitstream(faacEncHandle hEncoder,
  29.    CoderInfo *coderInfo,
  30.    ChannelInfo *channelInfo,
  31.    BitStream *bitStream,
  32.    int numChannel)
  33. {
  34. int channel;
  35. int bits = 0;
  36. int bitsLeftAfterFill, numFillBits;
  37. CountBitstream(hEncoder, coderInfo, channelInfo, bitStream, numChannel);
  38. bits += WriteADTSHeader(hEncoder, bitStream, 1);
  39. for (channel = 0; channel < numChannel; channel++) {
  40. if (channelInfo[channel].present) {
  41. /* Write out a single_channel_element */
  42. if (!channelInfo[channel].cpe) {
  43. if (channelInfo[channel].lfe) {
  44. /* Write out lfe */ 
  45. bits += WriteLFE(&coderInfo[channel],
  46. &channelInfo[channel],
  47. bitStream,
  48. hEncoder->config.aacObjectType,
  49. 1);
  50. } else {
  51. /* Write out sce */
  52. bits += WriteSCE(&coderInfo[channel],
  53. &channelInfo[channel],
  54. bitStream,
  55. hEncoder->config.aacObjectType,
  56. 1);
  57. }
  58. } else {
  59. if (channelInfo[channel].ch_is_left) {
  60. /* Write out cpe */
  61. bits += WriteCPE(&coderInfo[channel],
  62. &coderInfo[channelInfo[channel].paired_ch],
  63. &channelInfo[channel],
  64. bitStream,
  65. hEncoder->config.aacObjectType,
  66. 1);
  67. }
  68. }
  69. }
  70. }
  71. /* Compute how many fill bits are needed to avoid overflowing bit reservoir */
  72. /* Save room for ID_END terminator */
  73. if (bits < (8 - LEN_SE_ID) ) {
  74. numFillBits = 8 - LEN_SE_ID - bits;
  75. } else {
  76. numFillBits = 0;
  77. }
  78. /* Write AAC fill_elements, smallest fill element is 7 bits. */
  79. /* Function may leave up to 6 bits left after fill, so tell it to fill a few extra */
  80. numFillBits += 6;
  81. bitsLeftAfterFill = WriteAACFillBits(bitStream, numFillBits, 1);
  82. bits += (numFillBits - bitsLeftAfterFill);
  83. /* Write ID_END terminator */
  84. bits += LEN_SE_ID;
  85.     PutBit(bitStream, ID_END, LEN_SE_ID);
  86. /* Now byte align the bitstream */
  87. /*
  88.  * This byte_alignment() is correct for both MPEG2 and MPEG4, although
  89.  * in MPEG4 the byte_alignment() is officially done before the new frame
  90.  * instead of at the end. But this is basically the same.
  91.  */
  92. assert(bitStream->numBit==bits);
  93. bitStream->numBit=bits;
  94. #if 0
  95.     if (hEncoder->config.mpegVersion == 0)
  96.      bits += ByteAlign(bitStream, 1,2);
  97. #endif
  98. bits += ByteAlign(bitStream, 1,0);
  99. return bits;
  100. }
  101. static int CountBitstream(faacEncHandle hEncoder,
  102.   CoderInfo *coderInfo,
  103.   ChannelInfo *channelInfo,
  104.   BitStream *bitStream,
  105.   int numChannel)
  106. {
  107. int channel;
  108. int bits = 0;
  109. int bitsLeftAfterFill, numFillBits;
  110. bits += WriteADTSHeader(hEncoder, bitStream, 0);
  111. for (channel = 0; channel < numChannel; channel++) {
  112. if (channelInfo[channel].present) {
  113. /* Write out a single_channel_element */
  114. if (!channelInfo[channel].cpe) {
  115. if (channelInfo[channel].lfe) {
  116. /* Write out lfe */ 
  117. bits += WriteLFE(&coderInfo[channel],
  118. &channelInfo[channel],
  119. bitStream,
  120. hEncoder->config.aacObjectType,
  121. 0);
  122. } else {
  123. /* Write out sce */
  124. bits += WriteSCE(&coderInfo[channel],
  125. &channelInfo[channel],
  126. bitStream,
  127. hEncoder->config.aacObjectType,
  128. 0);
  129. }
  130. } else {
  131. if (channelInfo[channel].ch_is_left) {
  132. /* Write out cpe */
  133. bits += WriteCPE(&coderInfo[channel],
  134. &coderInfo[channelInfo[channel].paired_ch],
  135. &channelInfo[channel],
  136. bitStream,
  137. hEncoder->config.aacObjectType,
  138. 0);
  139. }
  140. }
  141. }
  142. }
  143. /* Compute how many fill bits are needed to avoid overflowing bit reservoir */
  144. /* Save room for ID_END terminator */
  145. if (bits < (8 - LEN_SE_ID) ) {
  146. numFillBits = 8 - LEN_SE_ID - bits;
  147. } else {
  148. numFillBits = 0;
  149. }
  150. /* Write AAC fill_elements, smallest fill element is 7 bits. */
  151. /* Function may leave up to 6 bits left after fill, so tell it to fill a few extra */
  152. numFillBits += 6;
  153. bitsLeftAfterFill = WriteAACFillBits(bitStream, numFillBits, 0);
  154. bits += (numFillBits - bitsLeftAfterFill);
  155. /* Write ID_END terminator */
  156. bits += LEN_SE_ID;
  157. /* Now byte align the bitstream */
  158. bitStream->numBit=bits;
  159. #if 0
  160.     if (hEncoder->config.mpegVersion == 0)
  161. bits += ByteAlign(bitStream, 0,2);
  162.     #endif
  163. bits += ByteAlign(bitStream, 0,0);
  164. hEncoder->usedBytes = bit2byte(bits);
  165. return bits;
  166. }
  167. static int WriteADTSHeader(faacEncHandle hEncoder,
  168.    BitStream *bitStream,
  169.    int writeFlag)
  170. {
  171. int bits = 56;
  172. #ifdef MPEG4IP
  173. if (hEncoder->config.useAdts == 0) {
  174. return 0;
  175. }
  176. #endif
  177. if (writeFlag) {
  178. /* Fixed ADTS header */
  179. PutBit(bitStream, 0xFFFF, 12); /* 12 bit Syncword */
  180. PutBit(bitStream, hEncoder->config.mpegVersion, 1); /* ID == 0 for MPEG4 AAC, 1 for MPEG2 AAC */
  181. PutBit(bitStream, 0, 2); /* layer == 0 */
  182. PutBit(bitStream, 1, 1); /* protection absent */
  183. PutBit(bitStream, hEncoder->config.aacObjectType, 2); /* profile */
  184. PutBit(bitStream, hEncoder->sampleRateIdx, 4); /* sampling rate */
  185. PutBit(bitStream, 0, 1); /* private bit */
  186. PutBit(bitStream, hEncoder->numChannels, 3); /* ch. config (must be > 0) */
  187.  /* simply using numChannels only works for
  188. 6 channels or less, else a channel
  189. configuration should be written */
  190. PutBit(bitStream, 0, 1); /* original/copy */
  191. PutBit(bitStream, 0, 1); /* home */
  192. if (hEncoder->config.mpegVersion == 0)
  193. PutBit(bitStream, 0, 2); /* emphasis */
  194. /* Variable ADTS header */
  195. PutBit(bitStream, 0, 1); /* copyr. id. bit */
  196. PutBit(bitStream, 0, 1); /* copyr. id. start */
  197. PutBit(bitStream, hEncoder->usedBytes, 13);
  198. PutBit(bitStream, 0x7FF, 11); /* buffer fullness (0x7FF for VBR) */
  199. PutBit(bitStream, 0, 2); /* raw data blocks (0+1=1) */
  200. }
  201. /*
  202.  * MPEG2 says byte_aligment() here, but ADTS always is multiple of 8 bits
  203.  * MPEG4 has no byte_alignment() here
  204.  */
  205. /*
  206. if (hEncoder->config.mpegVersion == 1)
  207. bits += ByteAlign(bitStream, writeFlag);
  208. */
  209. if (hEncoder->config.mpegVersion == 0)
  210. bits += 2; /* emphasis */
  211. return bits;
  212. }
  213. static int WriteCPE(CoderInfo *coderInfoL,
  214. CoderInfo *coderInfoR,
  215. ChannelInfo *channelInfo,
  216. BitStream* bitStream,
  217. int objectType,
  218. int writeFlag)
  219. {
  220. int bits = 0;
  221. if (writeFlag) {
  222. /* write ID_CPE, single_element_channel() identifier */
  223. PutBit(bitStream, ID_CPE, LEN_SE_ID);
  224. /* write the element_identifier_tag */
  225. PutBit(bitStream, channelInfo->tag, LEN_TAG);
  226. /* common_window? */
  227. PutBit(bitStream, channelInfo->common_window, LEN_COM_WIN);
  228. }
  229. bits += LEN_SE_ID;
  230. bits += LEN_TAG;
  231. bits += LEN_COM_WIN;
  232. /* if common_window, write ics_info */
  233. if (channelInfo->common_window) {
  234. int numWindows, maxSfb;
  235. bits += WriteICSInfo(coderInfoL, bitStream, objectType, writeFlag);
  236. numWindows = coderInfoL->num_window_groups;
  237. maxSfb = coderInfoL->max_sfb;
  238. if (writeFlag) {
  239. PutBit(bitStream, channelInfo->msInfo.is_present, LEN_MASK_PRES);
  240. if (channelInfo->msInfo.is_present == 1) {
  241. int g;
  242. int b;
  243. for (g=0;g<numWindows;g++) {
  244. for (b=0;b<maxSfb;b++) {
  245. PutBit(bitStream, channelInfo->msInfo.ms_used[g*maxSfb+b], LEN_MASK);
  246. }
  247. }
  248. }
  249. }
  250. bits += LEN_MASK_PRES;
  251. if (channelInfo->msInfo.is_present == 1)
  252. bits += (numWindows*maxSfb*LEN_MASK);
  253. }
  254. /* Write individual_channel_stream elements */
  255. bits += WriteICS(coderInfoL, bitStream, channelInfo->common_window, objectType, writeFlag);
  256. bits += WriteICS(coderInfoR, bitStream, channelInfo->common_window, objectType, writeFlag);
  257. return bits;
  258. }
  259. static int WriteSCE(CoderInfo *coderInfo,
  260. ChannelInfo *channelInfo,
  261. BitStream *bitStream,
  262. int objectType,
  263. int writeFlag)
  264. {
  265. int bits = 0;
  266. if (writeFlag) {
  267. /* write Single Element Channel (SCE) identifier */
  268. PutBit(bitStream, ID_SCE, LEN_SE_ID);
  269. /* write the element identifier tag */
  270. PutBit(bitStream, channelInfo->tag, LEN_TAG);
  271. }
  272. bits += LEN_SE_ID;
  273. bits += LEN_TAG;
  274. /* Write an Individual Channel Stream element */
  275. bits += WriteICS(coderInfo, bitStream, 0, objectType, writeFlag);
  276. return bits;
  277. }
  278. static int WriteLFE(CoderInfo *coderInfo,
  279. ChannelInfo *channelInfo,
  280. BitStream *bitStream,
  281. int objectType,
  282. int writeFlag)
  283. {
  284. int bits = 0;
  285. if (writeFlag) {
  286. /* write ID_LFE, lfe_element_channel() identifier */
  287. PutBit(bitStream, ID_LFE, LEN_SE_ID);
  288. /* write the element_identifier_tag */
  289. PutBit(bitStream, channelInfo->tag, LEN_TAG);
  290. }
  291. bits += LEN_SE_ID;
  292. bits += LEN_TAG;
  293. /* Write an individual_channel_stream element */
  294. bits += WriteICS(coderInfo, bitStream, 0, objectType, writeFlag);
  295. return bits;
  296. }
  297. static int WriteICSInfo(CoderInfo *coderInfo,
  298. BitStream *bitStream,
  299. int objectType,
  300. int writeFlag)
  301. {
  302. int grouping_bits;
  303. int bits = 0;
  304. if (writeFlag) {
  305. /* write out ics_info() information */
  306. PutBit(bitStream, 0, LEN_ICS_RESERV);  /* reserved Bit*/
  307. /* Write out window sequence */
  308. PutBit(bitStream, coderInfo->block_type, LEN_WIN_SEQ);  /* block type */
  309. /* Write out window shape */
  310. PutBit(bitStream, coderInfo->window_shape, LEN_WIN_SH);  /* window shape */
  311. }
  312. bits += LEN_ICS_RESERV;
  313. bits += LEN_WIN_SEQ;
  314. bits += LEN_WIN_SH;
  315. /* For short windows, write out max_sfb and scale_factor_grouping */
  316. if (coderInfo->block_type == ONLY_SHORT_WINDOW){
  317. if (writeFlag) {
  318. PutBit(bitStream, coderInfo->max_sfb, LEN_MAX_SFBS);
  319. grouping_bits = FindGroupingBits(coderInfo);
  320. PutBit(bitStream, grouping_bits, MAX_SHORT_WINDOWS - 1);  /* the grouping bits */
  321. }
  322. bits += LEN_MAX_SFBS;
  323. bits += MAX_SHORT_WINDOWS - 1;
  324. } else { /* Otherwise, write out max_sfb and predictor data */
  325. if (writeFlag) {
  326. PutBit(bitStream, coderInfo->max_sfb, LEN_MAX_SFBL);
  327. }
  328. bits += LEN_MAX_SFBL;
  329. if (objectType == LTP)
  330. bits += WriteLTPPredictorData(coderInfo, bitStream, writeFlag);
  331. else
  332. bits += WritePredictorData(coderInfo, bitStream, writeFlag);
  333. }
  334. return bits;
  335. }
  336. static int WriteICS(CoderInfo *coderInfo,
  337. BitStream *bitStream,
  338. int commonWindow,
  339. int objectType,
  340. int writeFlag)
  341. {
  342. /* this function writes out an individual_channel_stream to the bitstream and */
  343. /* returns the number of bits written to the bitstream */
  344. int bits = 0;
  345. /* Write the 8-bit global_gain */
  346. if (writeFlag)
  347. PutBit(bitStream, coderInfo->global_gain, LEN_GLOB_GAIN);
  348. bits += LEN_GLOB_GAIN;
  349. /* Write ics information */
  350. if (!commonWindow) {
  351. bits += WriteICSInfo(coderInfo, bitStream, objectType, writeFlag);
  352. }
  353. bits += SortBookNumbers(coderInfo, bitStream, writeFlag);
  354. bits += WriteScalefactors(coderInfo, bitStream, writeFlag);
  355. bits += WritePulseData(coderInfo, bitStream, writeFlag);
  356. bits += WriteTNSData(coderInfo, bitStream, writeFlag);
  357. bits += WriteGainControlData(coderInfo, bitStream, writeFlag);
  358. bits += WriteSpectralData(coderInfo, bitStream, writeFlag);
  359. /* Return number of bits */
  360. return bits;
  361. }
  362. static int WriteLTPPredictorData(CoderInfo *coderInfo, BitStream *bitStream, int writeFlag)
  363. {
  364. int i, last_band;
  365. int bits;
  366. LtpInfo *ltpInfo = &coderInfo->ltpInfo;
  367. bits = 1;
  368. if (ltpInfo->global_pred_flag)
  369. {
  370. if(writeFlag)
  371. PutBit(bitStream, 1, 1); /* LTP used */
  372. switch(coderInfo->block_type)
  373. {
  374. case ONLY_LONG_WINDOW:
  375. case LONG_SHORT_WINDOW:
  376. case SHORT_LONG_WINDOW:
  377. bits += LEN_LTP_LAG;
  378. bits += LEN_LTP_COEF;
  379. if(writeFlag)
  380. {
  381. PutBit(bitStream, ltpInfo->delay[0], LEN_LTP_LAG);
  382. PutBit(bitStream, ltpInfo->weight_idx,  LEN_LTP_COEF);
  383. }
  384. last_band = (coderInfo->nr_of_sfb < MAX_LT_PRED_LONG_SFB) ?
  385. coderInfo->nr_of_sfb : MAX_LT_PRED_LONG_SFB;
  386. bits += last_band;
  387. if(writeFlag)
  388. for (i = 0; i < last_band; i++)
  389. PutBit(bitStream, ltpInfo->sfb_prediction_used[i], LEN_LTP_LONG_USED);
  390. break;
  391. default:
  392. break;
  393. }
  394. } else {
  395. if(writeFlag)
  396. PutBit(bitStream, 0, 1); /* LTP not used */
  397. }
  398. return (bits);
  399. }
  400. static int WritePredictorData(CoderInfo *coderInfo,
  401.   BitStream *bitStream,
  402.   int writeFlag)
  403. {
  404. int bits = 0;
  405. /* Write global predictor data present */
  406. short predictorDataPresent = coderInfo->pred_global_flag;
  407. int numBands = min(coderInfo->max_pred_sfb, coderInfo->nr_of_sfb);
  408. if (writeFlag) {
  409. PutBit(bitStream, predictorDataPresent, LEN_PRED_PRES);  /* predictor_data_present */
  410. if (predictorDataPresent) {
  411. int b;
  412. if (coderInfo->reset_group_number == -1) {
  413. PutBit(bitStream, 0, LEN_PRED_RST); /* No prediction reset */
  414. } else {
  415. PutBit(bitStream, 1, LEN_PRED_RST);
  416. PutBit(bitStream, (unsigned long)coderInfo->reset_group_number,
  417. LEN_PRED_RSTGRP);
  418. }
  419. for (b=0;b<numBands;b++) {
  420. PutBit(bitStream, coderInfo->pred_sfb_flag[b], LEN_PRED_ENAB);
  421. }
  422. }
  423. }
  424. bits = LEN_PRED_PRES;
  425. bits += (predictorDataPresent) ?
  426. (LEN_PRED_RST + 
  427. ((coderInfo->reset_group_number)!=-1)*LEN_PRED_RSTGRP + 
  428. numBands*LEN_PRED_ENAB) : 0;
  429. return bits;
  430. }
  431. static int WritePulseData(CoderInfo *coderInfo,
  432.   BitStream *bitStream,
  433.   int writeFlag)
  434. {
  435. int bits = 0;
  436. if (writeFlag) {
  437. PutBit(bitStream, 0, LEN_PULSE_PRES);  /* no pulse_data_present */
  438. }
  439. bits += LEN_PULSE_PRES;
  440. return bits;
  441. }
  442. static int WriteTNSData(CoderInfo *coderInfo,
  443. BitStream *bitStream,
  444. int writeFlag)
  445. {
  446. int bits = 0;
  447. int numWindows;
  448. int len_tns_nfilt;
  449. int len_tns_length;
  450. int len_tns_order;
  451. int filtNumber;
  452. int resInBits;
  453. int bitsToTransmit;
  454. unsigned long unsignedIndex;
  455. int w;
  456. TnsInfo* tnsInfoPtr = &coderInfo->tnsInfo;
  457. if (writeFlag) {
  458. PutBit(bitStream,tnsInfoPtr->tnsDataPresent,LEN_TNS_PRES);
  459. }
  460. bits += LEN_TNS_PRES;
  461. /* If TNS is not present, bail */
  462. if (!tnsInfoPtr->tnsDataPresent) {
  463. return bits;
  464. }
  465. /* Set window-dependent TNS parameters */
  466. if (coderInfo->block_type == ONLY_SHORT_WINDOW) {
  467. numWindows = MAX_SHORT_WINDOWS;
  468. len_tns_nfilt = LEN_TNS_NFILTS;
  469. len_tns_length = LEN_TNS_LENGTHS;
  470. len_tns_order = LEN_TNS_ORDERS;
  471. }
  472. else {
  473. numWindows = 1;
  474. len_tns_nfilt = LEN_TNS_NFILTL;
  475. len_tns_length = LEN_TNS_LENGTHL;
  476. len_tns_order = LEN_TNS_ORDERL;
  477. }
  478. /* Write TNS data */
  479. bits += (numWindows * len_tns_nfilt);
  480. for (w=0;w<numWindows;w++) {
  481. TnsWindowData* windowDataPtr = &tnsInfoPtr->windowData[w];
  482. int numFilters = windowDataPtr->numFilters;
  483. if (writeFlag) {
  484. PutBit(bitStream,numFilters,len_tns_nfilt); /* n_filt[] = 0 */
  485. }
  486. if (numFilters) {
  487. bits += LEN_TNS_COEFF_RES;
  488. resInBits = windowDataPtr->coefResolution;
  489. if (writeFlag) {
  490. PutBit(bitStream,resInBits-DEF_TNS_RES_OFFSET,LEN_TNS_COEFF_RES);
  491. }
  492. bits += numFilters * (len_tns_length+len_tns_order);
  493. for (filtNumber=0;filtNumber<numFilters;filtNumber++) {
  494. TnsFilterData* tnsFilterPtr=&windowDataPtr->tnsFilter[filtNumber];
  495. int order = tnsFilterPtr->order;
  496. if (writeFlag) {
  497. PutBit(bitStream,tnsFilterPtr->length,len_tns_length);
  498. PutBit(bitStream,order,len_tns_order);
  499. }
  500. if (order) {
  501. bits += (LEN_TNS_DIRECTION + LEN_TNS_COMPRESS);
  502. if (writeFlag) {
  503. PutBit(bitStream,tnsFilterPtr->direction,LEN_TNS_DIRECTION);
  504. PutBit(bitStream,tnsFilterPtr->coefCompress,LEN_TNS_COMPRESS);
  505. }
  506. bitsToTransmit = resInBits - tnsFilterPtr->coefCompress;
  507. bits += order * bitsToTransmit;
  508. if (writeFlag) {
  509. int i;
  510. for (i=1;i<=order;i++) {
  511. unsignedIndex = (unsigned long) (tnsFilterPtr->index[i])&(~(~0<<bitsToTransmit));
  512. PutBit(bitStream,unsignedIndex,bitsToTransmit);
  513. }
  514. }
  515. }
  516. }
  517. }
  518. }
  519. return bits;
  520. }
  521. static int WriteGainControlData(CoderInfo *coderInfo,
  522. BitStream *bitStream,
  523. int writeFlag)
  524. {
  525. int bits = 0;
  526. if (writeFlag) {
  527. PutBit(bitStream, 0, LEN_GAIN_PRES);
  528. }
  529. bits += LEN_GAIN_PRES;
  530. return bits;
  531. }
  532. static int WriteSpectralData(CoderInfo *coderInfo,
  533.  BitStream *bitStream,
  534.  int writeFlag)
  535. {
  536. int i, bits = 0;
  537. /* set up local pointers to data and len */
  538. /* data array contains data to be written */
  539. /* len array contains lengths of data words */
  540. int* data = coderInfo->data;
  541. int* len  = coderInfo->len;
  542. if (writeFlag) {
  543. for(i = 0; i < coderInfo->spectral_count; i++) {
  544. if (len[i] > 0) {  /* only send out non-zero codebook data */
  545. PutBit(bitStream, data[i], len[i]); /* write data */
  546. bits += len[i];
  547. }
  548. }
  549. } else {
  550. for(i = 0; i < coderInfo->spectral_count; i++) {
  551. bits += len[i];
  552. }
  553. }
  554. return bits;
  555. }
  556. static int WriteAACFillBits(BitStream* bitStream,
  557. int numBits,
  558. int writeFlag)
  559. {
  560. int numberOfBitsLeft = numBits;
  561. /* Need at least (LEN_SE_ID + LEN_F_CNT) bits for a fill_element */
  562. int minNumberOfBits = LEN_SE_ID + LEN_F_CNT;
  563. while (numberOfBitsLeft >= minNumberOfBits)
  564. {
  565. int numberOfBytes;
  566. int maxCount;
  567. if (writeFlag) {
  568. PutBit(bitStream, ID_FIL, LEN_SE_ID); /* Write fill_element ID */
  569. }
  570. numberOfBitsLeft -= minNumberOfBits; /* Subtract for ID,count */
  571. numberOfBytes = (int)(numberOfBitsLeft/LEN_BYTE);
  572. maxCount = (1<<LEN_F_CNT) - 1;  /* Max count without escaping */
  573. /* if we have less than maxCount bytes, write them now */
  574. if (numberOfBytes < maxCount) {
  575. int i;
  576. if (writeFlag) {
  577. PutBit(bitStream, numberOfBytes, LEN_F_CNT);
  578. for (i = 0; i < numberOfBytes; i++) {
  579. PutBit(bitStream, 0, LEN_BYTE);
  580. }
  581. }
  582. /* otherwise, we need to write an escape count */
  583. }
  584. else {
  585. int maxEscapeCount, maxNumberOfBytes, escCount;
  586. int i;
  587. if (writeFlag) {
  588. PutBit(bitStream, maxCount, LEN_F_CNT);
  589. }
  590. maxEscapeCount = (1<<LEN_BYTE) - 1;  /* Max escape count */
  591. maxNumberOfBytes = maxCount + maxEscapeCount;
  592. numberOfBytes = (numberOfBytes > maxNumberOfBytes ) ? (maxNumberOfBytes) : (numberOfBytes);
  593. escCount = numberOfBytes - maxCount;
  594. if (writeFlag) {
  595. PutBit(bitStream, escCount, LEN_BYTE);
  596. for (i = 0; i < numberOfBytes-1; i++) {
  597. PutBit(bitStream, 0, LEN_BYTE);
  598. }
  599. }
  600. }
  601. numberOfBitsLeft -= LEN_BYTE*numberOfBytes;
  602. }
  603. return numberOfBitsLeft;
  604. }
  605. static int FindGroupingBits(CoderInfo *coderInfo)
  606. {
  607. /* This function inputs the grouping information and outputs the seven bit 
  608. 'grouping_bits' field that the AAC decoder expects.  */
  609. int grouping_bits = 0;
  610. int tmp[8];
  611. int i, j;
  612. int index = 0;
  613. for(i = 0; i < coderInfo->num_window_groups; i++){
  614. for (j = 0; j < coderInfo->window_group_length[i]; j++){
  615. tmp[index++] = i;
  616. }
  617. }
  618. for(i = 1; i < 8; i++){
  619. grouping_bits = grouping_bits << 1;
  620. if(tmp[i] == tmp[i-1]) {
  621. grouping_bits++;
  622. }
  623. }
  624. return grouping_bits;
  625. }
  626. /* size in bytes! */
  627. BitStream *OpenBitStream(int size, unsigned char *buffer)
  628. {
  629. BitStream *bitStream;
  630. bitStream = AllocMemory(sizeof(BitStream));
  631. bitStream->size = size;
  632. bitStream->numBit = 0;
  633. bitStream->currentBit = 0;
  634. bitStream->data = buffer;
  635. SetMemory(bitStream->data, 0, size);
  636. return bitStream;
  637. }
  638. int CloseBitStream(BitStream *bitStream)
  639. {
  640. int bytes = bit2byte(bitStream->numBit);
  641. FreeMemory(bitStream);
  642. return bytes;
  643. }
  644. static long BufferNumBit(BitStream *bitStream)
  645. {
  646. return bitStream->numBit;
  647. }
  648. static int WriteByte(BitStream *bitStream,
  649.  unsigned long data,
  650.  int numBit)
  651. {
  652. long numUsed,idx;
  653. idx = (bitStream->currentBit / BYTE_NUMBIT) % bitStream->size;
  654. numUsed = bitStream->currentBit % BYTE_NUMBIT;
  655. if (numUsed == 0)
  656. bitStream->data[idx] = 0;
  657. bitStream->data[idx] |= (data & ((1<<numBit)-1)) <<
  658. (BYTE_NUMBIT-numUsed-numBit);
  659. bitStream->currentBit += numBit;
  660. bitStream->numBit = bitStream->currentBit;
  661. return 0;
  662. }
  663. int PutBit(BitStream *bitStream,
  664.    unsigned long data,
  665.    int numBit)
  666. {
  667. int num,maxNum,curNum;
  668. unsigned long bits;
  669. if (numBit == 0)
  670. return 0;
  671. /* write bits in packets according to buffer byte boundaries */
  672. num = 0;
  673. maxNum = BYTE_NUMBIT - bitStream->currentBit % BYTE_NUMBIT;
  674. while (num < numBit) {
  675. curNum = min(numBit-num,maxNum);
  676. bits = data>>(numBit-num-curNum);
  677. if (WriteByte(bitStream, bits, curNum)) {
  678. return 1;
  679. }
  680. num += curNum;
  681. maxNum = BYTE_NUMBIT;
  682. }
  683. return 0;
  684. }
  685. static int ByteAlign(BitStream *bitStream, int writeFlag, int offset)
  686. {
  687. int len, i,j;
  688. assert(offset<8);
  689. assert(offset>=0);
  690. len = BufferNumBit(bitStream);
  691. j = (16+offset - (len%8))%8;
  692. if ((len % 8) == offset) 
  693. j = 0;
  694. if (writeFlag) {
  695. for( i=0; i<j; i++ ) {
  696. PutBit(bitStream, 0, 1);
  697. }
  698. }
  699. else
  700. bitStream->numBit+=j;
  701. return j;
  702. }