Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/feature_unix/sys/src/games/mp3enc/bitstream.c – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
/*
2
 *	MP3 bitstream Output interface for LAME
3
 *
4
 *	Copyright (c) 1999 Takehiro TOMINAGA
5
 *
6
 * This library is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU Library General Public
8
 * License as published by the Free Software Foundation; either
9
 * version 2 of the License, or (at your option) any later version.
10
 *
11
 * This library is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
14
 * Library General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU Library General Public
17
 * License along with this library; if not, write to the
18
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19
 * Boston, MA 02111-1307, USA.
20
 */
21
 
22
 
23
#ifdef HAVE_CONFIG_H
24
#include <config.h>
25
#endif
26
 
27
#include <stdlib.h>
28
#include <assert.h>
29
#include <stdio.h>
30
#include "tables.h"
31
#include "bitstream.h"
32
#include "quantize.h"
33
#include "quantize_pvt.h"
34
#include "version.h"
35
 
36
#ifdef WITH_DMALLOC
37
#include <dmalloc.h>
38
#endif
39
 
40
/* This is the scfsi_band table from 2.4.2.7 of the IS */
41
const int scfsi_band[5] = { 0, 6, 11, 16, 21 };
42
 
43
 
44
/* unsigned int is at least this large:  */
45
/* we work with ints, so when doing bit manipulation, we limit
46
 * ourselves to MAX_LENGTH-2 just to be on the safe side */
47
#define MAX_LENGTH      32  
48
 
49
 
50
 
51
#ifdef DEBUG
52
static int hoge, hogege;
53
#endif
54
 
55
void putheader_bits(lame_internal_flags *gfc,int w_ptr)
56
{
57
    Bit_stream_struc *bs;
58
    bs = &gfc->bs;
59
#ifdef DEBUG
60
    hoge += gfc->sideinfo_len * 8;
61
    hogege += gfc->sideinfo_len * 8;
62
#endif
63
    memcpy(&bs->buf[bs->buf_byte_idx], gfc->header[gfc->w_ptr].buf,
64
	   gfc->sideinfo_len);
65
    bs->buf_byte_idx += gfc->sideinfo_len;
66
    bs->totbit += gfc->sideinfo_len * 8;
67
    gfc->w_ptr = (gfc->w_ptr + 1) & (MAX_HEADER_BUF - 1);
68
}
69
 
70
/*write j bits into the bit stream */
71
static void
72
putbits2(lame_global_flags *gfp, int val, int j)
73
{
74
    lame_internal_flags *gfc=gfp->internal_flags;
75
    Bit_stream_struc *bs;
76
    bs = &gfc->bs;
77
 
78
//	assert(j < MAX_LENGTH-2);
79
 
80
    while (j > 0) {
81
	int k;
82
 
83
	if (bs->buf_bit_idx == 0) {
84
	    bs->buf_bit_idx = 8;
85
	    bs->buf_byte_idx++;
86
//		assert(bs->buf_byte_idx < BUFFER_SIZE);
87
//		assert(gfc->header[gfc->w_ptr].write_timing >= bs->totbit);
88
	    if (gfc->header[gfc->w_ptr].write_timing == bs->totbit)
89
	      putheader_bits(gfc, gfc->w_ptr);
90
	    bs->buf[bs->buf_byte_idx] = 0;
91
	}
92
 
93
	k = Min(j, bs->buf_bit_idx);
94
	j -= k;
95
 
96
	bs->buf_bit_idx -= k;
97
 
98
//	assert (j < MAX_LENGTH); /* 32 too large on 32 bit machines */
99
//	assert (bs->buf_bit_idx < MAX_LENGTH); 
100
 
101
        bs->buf[bs->buf_byte_idx] |= (val >> j) << bs->buf_bit_idx;
102
	bs->totbit += k;
103
    }
104
}
105
 
106
/*write j bits into the bit stream, ignoring frame headers */
107
static void
108
putbits_noheaders(lame_global_flags *gfp, int val, int j)
109
{
110
    lame_internal_flags *gfc=gfp->internal_flags;
111
    Bit_stream_struc *bs;
112
    bs = &gfc->bs;
113
 
114
//	assert(j < MAX_LENGTH-2);
115
 
116
    while (j > 0) {
117
	int k;
118
	if (bs->buf_bit_idx == 0) {
119
	    bs->buf_bit_idx = 8;
120
	    bs->buf_byte_idx++;
121
//		assert(bs->buf_byte_idx < BUFFER_SIZE);
122
	    bs->buf[bs->buf_byte_idx] = 0;
123
	}
124
 
125
	k = Min(j, bs->buf_bit_idx);
126
	j -= k;
127
 
128
	bs->buf_bit_idx -= k;
129
 
130
//	assert (j < MAX_LENGTH); /* 32 too large on 32 bit machines */
131
//	assert (bs->buf_bit_idx < MAX_LENGTH); 
132
 
133
        bs->buf[bs->buf_byte_idx] |= (val >> j) << bs->buf_bit_idx;
134
	bs->totbit += k;
135
    }
136
}
137
 
138
 
139
/*
140
  Some combinations of bitrate, Fs, and stereo make it impossible to stuff
141
  out a frame using just main_data, due to the limited number of bits to
142
  indicate main_data_length. In these situations, we put stuffing bits into
143
  the ancillary data...
144
*/
145
static void
146
drain_into_ancillary(lame_global_flags *gfp,int remainingBits)
147
{
148
    lame_internal_flags *gfc=gfp->internal_flags;
149
    int i;
150
    assert(remainingBits >= 0);
151
 
152
    if (remainingBits >= 8) {
153
      putbits2(gfp,0x4c,8);
154
      remainingBits -= 8;
155
    }
156
    if (remainingBits >= 8) {
157
      putbits2(gfp,0x41,8);
158
      remainingBits -= 8;
159
    }
160
    if (remainingBits >= 8) {
161
      putbits2(gfp,0x4d,8);
162
      remainingBits -= 8;
163
    }
164
    if (remainingBits >= 8) {
165
      putbits2(gfp,0x45,8);
166
      remainingBits -= 8;
167
    }
168
 
169
    if (remainingBits >= 32) {
170
      const char *version = get_lame_short_version ();
171
      if (remainingBits >= 32) 
172
	for (i=0; i<(int)strlen(version) && remainingBits >=8 ; ++i) {
173
	  remainingBits -= 8;
174
	  putbits2(gfp,version[i],8);
175
	}
176
    }
177
 
178
    for (; remainingBits >= 1; remainingBits -= 1 ) {
179
        putbits2 ( gfp, gfc->ancillary_flag, 1 );
180
        gfc->ancillary_flag ^= 1;
181
    }
182
 
183
    assert (remainingBits == 0);
184
 
185
}
186
 
187
/*write N bits into the header */
188
inline static void
189
writeheader(lame_internal_flags *gfc,int val, int j)
190
{
191
    int ptr = gfc->header[gfc->h_ptr].ptr;
192
 
193
    while (j > 0) {
194
	int k = Min(j, 8 - (ptr & 7));
195
	j -= k;
196
        assert (j < MAX_LENGTH); /* >> 32  too large for 32 bit machines */
197
	gfc->header[gfc->h_ptr].buf[ptr >> 3]
198
	    |= ((val >> j)) << (8 - (ptr & 7) - k);
199
	ptr += k;
200
    }
201
    gfc->header[gfc->h_ptr].ptr = ptr;
202
}
203
 
204
 
205
/* (jo) this wrapper function for BF_addEntry() updates also the crc */
206
static void
207
CRC_writeheader(lame_internal_flags *gfc, int value, int length,int *crc)
208
{
209
   int bit = 1 << length;
210
 
211
   assert(length < MAX_LENGTH-2);
212
 
213
   while((bit >>= 1)){
214
      *crc <<= 1;
215
      if (!(*crc & 0x10000) ^ !(value & bit))
216
	*crc ^= CRC16_POLYNOMIAL;
217
   }
218
   *crc &= 0xffff;
219
   writeheader(gfc,value, length);
220
}
221
 
222
void main_CRC_init (void) {}
223
 
224
 
225
 
226
inline static void
227
encodeSideInfo2(lame_global_flags *gfp,int bitsPerFrame)
228
{
229
    lame_internal_flags *gfc=gfp->internal_flags;
230
    III_side_info_t *l3_side;
231
    int gr, ch;
232
    int crc;
233
 
234
    l3_side = &gfc->l3_side;
235
    gfc->header[gfc->h_ptr].ptr = 0;
236
    memset(gfc->header[gfc->h_ptr].buf, 0, gfc->sideinfo_len);
237
    crc = 0xffff; /* (jo) init crc16 for error_protection */
238
    if (gfp->out_samplerate < 16000) 
239
      writeheader(gfc,0xffe,                12);
240
    else
241
      writeheader(gfc,0xfff,                12);
242
    writeheader(gfc,(gfp->version),            1);
243
    writeheader(gfc,4 - 3,                 2);
244
    writeheader(gfc,(!gfp->error_protection),  1);
245
    /* (jo) from now on call the CRC_writeheader() wrapper to update crc */
246
    CRC_writeheader(gfc,(gfc->bitrate_index),      4,&crc);
247
    CRC_writeheader(gfc,(gfc->samplerate_index),   2,&crc);
248
    CRC_writeheader(gfc,(gfc->padding),            1,&crc);
249
    CRC_writeheader(gfc,(gfp->extension),          1,&crc);
250
    CRC_writeheader(gfc,(gfp->mode),               2,&crc);
251
    CRC_writeheader(gfc,(gfc->mode_ext),           2,&crc);
252
    CRC_writeheader(gfc,(gfp->copyright),          1,&crc);
253
    CRC_writeheader(gfc,(gfp->original),           1,&crc);
254
    CRC_writeheader(gfc,(gfp->emphasis),           2,&crc);
255
    if (gfp->error_protection) {
256
	writeheader(gfc,0, 16); /* dummy */
257
    }
258
 
259
    if (gfp->version == 1) {
260
	/* MPEG1 */
261
	assert(l3_side->main_data_begin >= 0);
262
	CRC_writeheader(gfc,(l3_side->main_data_begin), 9,&crc);
263
 
264
	if (gfc->channels_out == 2)
265
	    CRC_writeheader(gfc,l3_side->private_bits, 3,&crc);
266
	else
267
	    CRC_writeheader(gfc,l3_side->private_bits, 5,&crc);
268
 
269
	for (ch = 0; ch < gfc->channels_out; ch++) {
270
	    int band;
271
	    for (band = 0; band < 4; band++) {
272
		CRC_writeheader(gfc,l3_side->scfsi[ch][band], 1,&crc);
273
	    }
274
	}
275
 
276
	for (gr = 0; gr < 2; gr++) {
277
	    for (ch = 0; ch < gfc->channels_out; ch++) {
278
		gr_info *gi = &l3_side->gr[gr].ch[ch].tt;
279
		CRC_writeheader(gfc,gi->part2_3_length,       12,&crc);
280
		CRC_writeheader(gfc,gi->big_values / 2,        9,&crc);
281
		CRC_writeheader(gfc,gi->global_gain,           8,&crc);
282
		CRC_writeheader(gfc,gi->scalefac_compress,     4,&crc);
283
		CRC_writeheader(gfc,gi->window_switching_flag, 1,&crc);
284
 
285
		if (gi->window_switching_flag) {
286
		    CRC_writeheader(gfc,gi->block_type,       2,&crc);
287
		    CRC_writeheader(gfc,gi->mixed_block_flag, 1,&crc);
288
 
289
		    if (gi->table_select[0] == 14)
290
			gi->table_select[0] = 16;
291
		    CRC_writeheader(gfc,gi->table_select[0],  5,&crc);
292
		    if (gi->table_select[1] == 14)
293
			gi->table_select[1] = 16;
294
		    CRC_writeheader(gfc,gi->table_select[1],  5,&crc);
295
 
296
		    CRC_writeheader(gfc,gi->subblock_gain[0], 3,&crc);
297
		    CRC_writeheader(gfc,gi->subblock_gain[1], 3,&crc);
298
		    CRC_writeheader(gfc,gi->subblock_gain[2], 3,&crc);
299
		} else {
300
		    assert(gi->block_type == NORM_TYPE);
301
		    if (gi->table_select[0] == 14)
302
			gi->table_select[0] = 16;
303
		    CRC_writeheader(gfc,gi->table_select[0], 5,&crc);
304
		    if (gi->table_select[1] == 14)
305
			gi->table_select[1] = 16;
306
		    CRC_writeheader(gfc,gi->table_select[1], 5,&crc);
307
		    if (gi->table_select[2] == 14)
308
			gi->table_select[2] = 16;
309
		    CRC_writeheader(gfc,gi->table_select[2], 5,&crc);
310
 
311
		    assert(gi->region0_count < 16U);
312
		    assert(gi->region1_count < 8U);
313
		    CRC_writeheader(gfc,gi->region0_count, 4,&crc);
314
		    CRC_writeheader(gfc,gi->region1_count, 3,&crc);
315
		}
316
		CRC_writeheader(gfc,gi->preflag,            1,&crc);
317
		CRC_writeheader(gfc,gi->scalefac_scale,     1,&crc);
318
		CRC_writeheader(gfc,gi->count1table_select, 1,&crc);
319
	    }
320
	}
321
    } else {
322
	/* MPEG2 */
323
	assert(l3_side->main_data_begin >= 0);
324
	CRC_writeheader(gfc,(l3_side->main_data_begin), 8,&crc);
325
	CRC_writeheader(gfc,l3_side->private_bits, gfc->channels_out,&crc);
326
 
327
	gr = 0;
328
	for (ch = 0; ch < gfc->channels_out; ch++) {
329
	    gr_info *gi = &l3_side->gr[gr].ch[ch].tt;
330
	    CRC_writeheader(gfc,gi->part2_3_length,       12,&crc);
331
	    CRC_writeheader(gfc,gi->big_values / 2,        9,&crc);
332
	    CRC_writeheader(gfc,gi->global_gain,           8,&crc);
333
	    CRC_writeheader(gfc,gi->scalefac_compress,     9,&crc);
334
	    CRC_writeheader(gfc,gi->window_switching_flag, 1,&crc);
335
 
336
	    if (gi->window_switching_flag) {
337
		CRC_writeheader(gfc,gi->block_type,       2,&crc);
338
		CRC_writeheader(gfc,gi->mixed_block_flag, 1,&crc);
339
 
340
		if (gi->table_select[0] == 14)
341
		    gi->table_select[0] = 16;
342
		CRC_writeheader(gfc,gi->table_select[0],  5,&crc);
343
		if (gi->table_select[1] == 14)
344
		    gi->table_select[1] = 16;
345
		CRC_writeheader(gfc,gi->table_select[1],  5,&crc);
346
 
347
		CRC_writeheader(gfc,gi->subblock_gain[0], 3,&crc);
348
		CRC_writeheader(gfc,gi->subblock_gain[1], 3,&crc);
349
		CRC_writeheader(gfc,gi->subblock_gain[2], 3,&crc);
350
	    } else {
351
		if (gi->table_select[0] == 14)
352
		    gi->table_select[0] = 16;
353
		CRC_writeheader(gfc,gi->table_select[0], 5,&crc);
354
		if (gi->table_select[1] == 14)
355
		    gi->table_select[1] = 16;
356
		CRC_writeheader(gfc,gi->table_select[1], 5,&crc);
357
		if (gi->table_select[2] == 14)
358
		    gi->table_select[2] = 16;
359
		CRC_writeheader(gfc,gi->table_select[2], 5,&crc);
360
 
361
		assert(gi->region0_count < 16U);
362
		assert(gi->region1_count < 8U);
363
		CRC_writeheader(gfc,gi->region0_count, 4,&crc);
364
		CRC_writeheader(gfc,gi->region1_count, 3,&crc);
365
	    }
366
 
367
	    CRC_writeheader(gfc,gi->scalefac_scale,     1,&crc);
368
	    CRC_writeheader(gfc,gi->count1table_select, 1,&crc);
369
	}
370
    }
371
 
372
    if (gfp->error_protection) {
373
	/* (jo) error_protection: add crc16 information to header */
374
	gfc->header[gfc->h_ptr].buf[4] = crc >> 8;
375
	gfc->header[gfc->h_ptr].buf[5] = crc & 255;
376
    }
377
 
378
    {
379
	int old = gfc->h_ptr;
380
	assert(gfc->header[old].ptr == gfc->sideinfo_len * 8);
381
 
382
	gfc->h_ptr = (old + 1) & (MAX_HEADER_BUF - 1);
383
	gfc->header[gfc->h_ptr].write_timing =
384
	    gfc->header[old].write_timing + bitsPerFrame;
385
 
386
	if (gfc->h_ptr == gfc->w_ptr) {
387
	  /* yikes! we are out of header buffer space */
388
	  ERRORF(gfc,"Error: MAX_HEADER_BUF too small in bitstream.c \n");
389
	}
390
 
391
    }
392
}
393
 
394
 
395
inline static int
396
huffman_coder_count1(lame_global_flags *gfp,int *ix, gr_info *gi)
397
{
398
#ifdef DEBUG
399
    lame_internal_flags *gfc = gfp->internal_flags;
400
#endif
401
    /* Write count1 area */
402
    const struct huffcodetab *h = &ht[gi->count1table_select + 32];
403
    int i,bits=0;
404
#ifdef DEBUG
405
    int gegebo = gfc->bs.totbit;
406
#endif
407
 
408
    ix += gi->big_values;
409
    assert(gi->count1table_select < 2);
410
 
411
 
412
    for (i = (gi->count1 - gi->big_values) / 4; i > 0; --i) {
413
	int huffbits = 0;
414
	int p = 0, v;
415
 
416
	v = ix[0];
417
	if (v) {
418
	    p += 8;
419
	    if (v < 0)
420
		huffbits++;
421
	    assert(-1 <= v && v <= 1);
422
	}
423
 
424
	v = ix[1];
425
	if (v) {
426
	    p += 4;
427
	    huffbits *= 2;
428
	    if (v < 0)
429
		huffbits++;
430
	    assert(-1 <= v && v <= 1);
431
	}
432
 
433
	v = ix[2];
434
	if (v) {
435
	    p += 2;
436
	    huffbits *= 2;
437
	    if (v < 0)
438
		huffbits++;
439
	    assert(-1 <= v && v <= 1);
440
	}
441
 
442
	v = ix[3];
443
	if (v) {
444
	    p++;
445
	    huffbits *= 2;
446
	    if (v < 0)
447
		huffbits++;
448
	    assert(-1 <= v && v <= 1);
449
	}
450
 
451
	ix += 4;
452
	putbits2(gfp,huffbits + h->table[p], h->hlen[p]);
453
	bits += h->hlen[p];
454
    }
455
#ifdef DEBUG
456
    DEBUGF("%ld %d %d %d\n",gfc->bs.totbit -gegebo, gi->count1bits, gi->big_values, gi->count1);
457
#endif
458
    return bits;
459
}
460
 
461
/*
462
 * Implements the pseudocode of page 98 of the IS
463
 */
464
static int
465
HuffmanCode(lame_global_flags* const gfp, int table_select, int x1, int x2)
466
{
467
    struct huffcodetab* h = ht + table_select;
468
    int  code    = 0;
469
    int  cbits   = 0;
470
    int  xbits   = 0;
471
    int  sgn_x1  = 0;
472
    int  sgn_x2  = 0;
473
    int  linbits = h->xlen;
474
    int  xlen    = h->xlen;
475
    int  ext; 
476
 
477
//	assert ( table_select > 0 );
478
 
479
    if (x1 < 0) {
480
	sgn_x1++;
481
	x1 = -x1;
482
    }
483
 
484
    if (x2 < 0) {
485
	sgn_x2++;
486
	x2 = -x2;
487
    }
488
 
489
    ext     = sgn_x1;
490
 
491
    if (table_select > 15) {
492
	/* use ESC-words */
493
	if (x1 > 14) {
494
	    int linbits_x1 = x1 - 15;
495
 
496
//	    assert ( linbits_x1 <= h->linmax );
497
	    ext   |= linbits_x1 << 1;
498
	    xbits  = linbits;
499
	    x1     = 15;
500
	}
501
 
502
	if (x2 > 14) {
503
	    int linbits_x2 = x2 - 15;
504
 
505
//	    assert ( linbits_x2 <= h->linmax );
506
	    ext  <<= linbits;
507
	    ext   |= linbits_x2;
508
	    xbits += linbits;
509
	    x2     = 15;
510
	}
511
	xlen = 16;
512
    }
513
 
514
    if (x1 != 0) {
515
	cbits--;
516
    }
517
 
518
    if (x2 != 0) {
519
	ext <<= 1;
520
	ext  |= sgn_x2;
521
	cbits--;
522
    }
523
 
524
    xbits -= cbits;
525
 
526
//	assert ( (x1|x2) < 16u );
527
 
528
    x1 = x1 * xlen + x2;
529
 
530
    code   = h->table [x1];
531
    cbits += h->hlen  [x1];
532
 
533
//	assert ( cbits <= MAX_LENGTH );
534
//	assert ( xbits <= MAX_LENGTH );
535
 
536
    putbits2 ( gfp, code, cbits );
537
    putbits2 ( gfp, ext,  xbits );
538
 
539
    return cbits + xbits;
540
}
541
 
542
static int
543
Huffmancodebits(lame_global_flags *gfp, int tableindex, int start, int end, int *ix)
544
{
545
    int i,bits;
546
 
547
//	assert(tableindex < 32);
548
    if (!tableindex) return 0;
549
 
550
    bits=0;
551
    for (i = start; i < end; i += 2) {
552
      bits += HuffmanCode(gfp,tableindex, ix[i], ix[i + 1]);
553
    }
554
    return bits;
555
}
556
 
557
 
558
 
559
/*
560
  Note the discussion of huffmancodebits() on pages 28
561
  and 29 of the IS, as well as the definitions of the side
562
  information on pages 26 and 27.
563
  */
564
static int
565
ShortHuffmancodebits(lame_global_flags *gfp,int *ix, gr_info *gi)
566
{
567
    lame_internal_flags *gfc=gfp->internal_flags;
568
    int bits;
569
    int region1Start;
570
 
571
    region1Start = 3*gfc->scalefac_band.s[3];
572
    if (region1Start > gi->big_values) 	
573
        region1Start = gi->big_values;
574
 
575
    /* short blocks do not have a region2 */
576
    bits  = Huffmancodebits(gfp,gi->table_select[0], 0, region1Start, ix);
577
    bits += Huffmancodebits(gfp,gi->table_select[1], region1Start, gi->big_values, ix);
578
    return bits;
579
}
580
 
581
static int
582
LongHuffmancodebits(lame_global_flags *gfp,int *ix, gr_info *gi)
583
{
584
    lame_internal_flags *gfc=gfp->internal_flags;
585
    int i, bigvalues,bits=0;
586
    int region1Start, region2Start;
587
 
588
    bigvalues = gi->big_values;
589
    assert(0 <= bigvalues && bigvalues <= 576);
590
 
591
    i = gi->region0_count + 1;
592
    assert(i < 23);
593
    region1Start = gfc->scalefac_band.l[i];
594
    i += gi->region1_count + 1;
595
    assert(i < 23);
596
    region2Start = gfc->scalefac_band.l[i];
597
 
598
    if (region1Start > bigvalues)
599
	region1Start = bigvalues;
600
 
601
    if (region2Start > bigvalues)
602
	region2Start = bigvalues;
603
 
604
    bits +=Huffmancodebits(gfp,gi->table_select[0], 0, region1Start, ix);
605
    bits +=Huffmancodebits(gfp,gi->table_select[1], region1Start, region2Start, ix);
606
    bits +=Huffmancodebits(gfp,gi->table_select[2], region2Start, bigvalues, ix);
607
    return bits;
608
}
609
 
610
inline static int
611
writeMainData ( lame_global_flags * const gfp,
612
        int              l3_enc   [2] [2] [576],
613
        III_scalefac_t   scalefac [2] [2] )
614
{
615
    int gr, ch, sfb,data_bits,scale_bits,tot_bits=0;
616
    lame_internal_flags *gfc=gfp->internal_flags;
617
    III_side_info_t *l3_side;
618
 
619
    l3_side = &gfc->l3_side;
620
    if (gfp->version == 1) {
621
	/* MPEG 1 */
622
	for (gr = 0; gr < 2; gr++) {
623
	    for (ch = 0; ch < gfc->channels_out; ch++) {
624
		gr_info *gi = &l3_side->gr[gr].ch[ch].tt;
625
		int slen1 = slen1_tab[gi->scalefac_compress];
626
		int slen2 = slen2_tab[gi->scalefac_compress];
627
		data_bits=0;
628
		scale_bits=0;
629
 
630
#ifdef DEBUG
631
		hogege = gfc->bs.totbit;
632
#endif
633
		if (gi->block_type == SHORT_TYPE) {
634
		    for (sfb = 0; sfb < SBPSY_s; sfb++) {
635
			int slen = sfb < 6 ? slen1 : slen2;
636
 
637
			assert(scalefac[gr][ch].s[sfb][0]>=0);
638
			assert(scalefac[gr][ch].s[sfb][1]>=0);
639
			assert(scalefac[gr][ch].s[sfb][2]>=0);
640
 
641
			putbits2(gfp,scalefac[gr][ch].s[sfb][0], slen);
642
			putbits2(gfp,scalefac[gr][ch].s[sfb][1], slen);
643
			putbits2(gfp,scalefac[gr][ch].s[sfb][2], slen);
644
			scale_bits += 3*slen;
645
		    }
646
		    data_bits += ShortHuffmancodebits(gfp,l3_enc[gr][ch], gi);
647
		} else {
648
		    int i;
649
		    for (i = 0; i < sizeof(scfsi_band) / sizeof(int) - 1;
650
			 i++) {
651
			if (gr != 0 && l3_side->scfsi[ch][i])
652
			    continue;
653
 
654
			for (sfb = scfsi_band[i]; sfb < scfsi_band[i + 1];
655
			     sfb++) {
656
 
657
			    assert(scalefac[gr][ch].l[sfb]>=0);
658
			    putbits2(gfp,scalefac[gr][ch].l[sfb],
659
				    sfb < 11 ? slen1 : slen2);
660
			    scale_bits += sfb < 11 ? slen1 : slen2;
661
			}
662
		    }
663
		    data_bits +=LongHuffmancodebits(gfp,l3_enc[gr][ch], gi);
664
		}
665
		data_bits +=huffman_coder_count1(gfp,l3_enc[gr][ch], gi);
666
#ifdef DEBUG
667
		DEBUGF("<%ld> ", gfc->bs.totbit-hogege);
668
#endif
669
		/* does bitcount in quantize.c agree with actual bit count?*/
670
		assert(data_bits==gi->part2_3_length-gi->part2_length);
671
		assert(scale_bits==gi->part2_length);
672
		tot_bits += scale_bits + data_bits;
673
 
674
	    } /* for ch */
675
	} /* for gr */
676
    } else {
677
	/* MPEG 2 */
678
	gr = 0;
679
	for (ch = 0; ch < gfc->channels_out; ch++) {
680
	    gr_info *gi = &l3_side->gr[gr].ch[ch].tt;
681
	    int i, sfb_partition;
682
	    assert(gi->sfb_partition_table);
683
	    data_bits = 0;
684
	    scale_bits=0;
685
 
686
	    sfb = 0;
687
	    sfb_partition = 0;
688
	    if (gi->block_type == SHORT_TYPE) {
689
		for (; sfb_partition < 4; sfb_partition++) {
690
		    int sfbs = gi->sfb_partition_table[sfb_partition] / 3;
691
		    int slen = gi->slen[sfb_partition];
692
		    for (i = 0; i < sfbs; i++, sfb++) {
693
			putbits2(gfp,Max(scalefac[gr][ch].s[sfb][0], 0U), slen);
694
			putbits2(gfp,Max(scalefac[gr][ch].s[sfb][1], 0U), slen);
695
			putbits2(gfp,Max(scalefac[gr][ch].s[sfb][2], 0U), slen);
696
			scale_bits += 3*slen;
697
		    }
698
		}
699
		data_bits += ShortHuffmancodebits(gfp,l3_enc[gr][ch], gi);
700
	    } else {
701
		for (; sfb_partition < 4; sfb_partition++) {
702
		    int sfbs = gi->sfb_partition_table[sfb_partition];
703
		    int slen = gi->slen[sfb_partition];
704
		    for (i = 0; i < sfbs; i++, sfb++) {
705
			putbits2(gfp,Max(scalefac[gr][ch].l[sfb], 0U), slen);
706
			scale_bits += slen;
707
		    }
708
		}
709
		data_bits +=LongHuffmancodebits(gfp,l3_enc[gr][ch], gi);
710
	    }
711
	    data_bits +=huffman_coder_count1(gfp,l3_enc[gr][ch], gi);
712
 
713
	    /* does bitcount in quantize.c agree with actual bit count?*/
714
	    assert(data_bits==gi->part2_3_length-gi->part2_length);
715
	    assert(scale_bits==gi->part2_length);
716
	    tot_bits += scale_bits + data_bits;
717
	} /* for ch */
718
    } /* for gf */
719
    return tot_bits;
720
} /* main_data */
721
 
722
 
723
 
724
 
725
void
726
flush_bitstream(lame_global_flags *gfp)
727
{
728
  lame_internal_flags *gfc=gfp->internal_flags;
729
  int flushbits,remaining_headers;
730
  int bitsPerFrame, mean_bits;
731
  int last_ptr,first_ptr;
732
  first_ptr=gfc->w_ptr;           /* first header to add to bitstream */
733
  last_ptr = gfc->h_ptr - 1;   /* last header to add to bitstream */
734
  if (last_ptr==-1) last_ptr=MAX_HEADER_BUF-1;   
735
 
736
  /* add this many bits to bitstream so we can flush all headers */
737
  flushbits = gfc->header[last_ptr].write_timing - gfc->bs.totbit;
738
 
739
  if (flushbits >= 0) {
740
    /* if flushbits >= 0, some headers have not yet been written */
741
    /* reduce flushbits by the size of the headers */
742
    remaining_headers= 1+last_ptr - first_ptr;
743
    if (last_ptr < first_ptr) 
744
      remaining_headers= 1+last_ptr - first_ptr + MAX_HEADER_BUF;
745
    flushbits -= remaining_headers*8*gfc->sideinfo_len;
746
  }
747
 
748
 
749
  /* finally, add some bits so that the last frame is complete
750
   * these bits are not necessary to decode the last frame, but
751
   * some decoders will ignore last frame if these bits are missing 
752
   */
753
  getframebits(gfp,&bitsPerFrame,&mean_bits);
754
  flushbits += bitsPerFrame;
755
  if (flushbits<0) {
756
#if 0
757
    /* if flushbits < 0, this would mean that the buffer looks like:
758
     * (data...)  last_header  (data...)  (extra data that should not be here...)
759
     */
760
    DEBUGF("last header write_timing = %i \n",gfc->header[last_ptr].write_timing);
761
    DEBUGF("first header write_timing = %i \n",gfc->header[first_ptr].write_timing);
762
    DEBUGF("bs.totbit:                 %i \n",gfc->bs.totbit);
763
    DEBUGF("first_ptr, last_ptr        %i %i \n",first_ptr,last_ptr);
764
    DEBUGF("remaining_headers =        %i \n",remaining_headers);
765
    DEBUGF("bitsperframe:              %i \n",bitsPerFrame);
766
    DEBUGF("sidelen:                   %i \n",gfc->sideinfo_len);
767
#endif
768
    ERRORF(gfc,"strange error flushing buffer ... \n");
769
  } else {
770
    drain_into_ancillary(gfp,flushbits);
771
  }
772
 
773
  assert (gfc->header[last_ptr].write_timing + bitsPerFrame  == gfc->bs.totbit);
774
}
775
 
776
 
777
 
778
 
779
void  add_dummy_byte ( lame_global_flags* const gfp, unsigned char val )
780
{
781
  lame_internal_flags *gfc = gfp->internal_flags;
782
  int i;
783
 
784
  putbits_noheaders(gfp,val,8);   
785
 
786
  for (i=0 ; i< MAX_HEADER_BUF ; ++i) 
787
    gfc->header[i].write_timing += 8;
788
}
789
 
790
 
791
/*
792
  format_bitstream()
793
 
794
  This is called after a frame of audio has been quantized and coded.
795
  It will write the encoded audio to the bitstream. Note that
796
  from a layer3 encoder's perspective the bit stream is primarily
797
  a series of main_data() blocks, with header and side information
798
  inserted at the proper locations to maintain framing. (See Figure A.7
799
  in the IS).
800
  */
801
int
802
format_bitstream(lame_global_flags *gfp, int bitsPerFrame,
803
      int              l3_enc[2][2][576],
804
  	III_scalefac_t   scalefac[2][2] )
805
{
806
    lame_internal_flags *gfc=gfp->internal_flags;
807
    int bits;
808
    III_side_info_t *l3_side;
809
    l3_side = &gfc->l3_side;
810
 
811
    drain_into_ancillary(gfp,l3_side->resvDrain_pre);
812
 
813
    encodeSideInfo2(gfp,bitsPerFrame);
814
    bits = 8*gfc->sideinfo_len;
815
    bits+=writeMainData(gfp,l3_enc,scalefac);
816
    drain_into_ancillary(gfp,l3_side->resvDrain_post);
817
    bits += l3_side->resvDrain_post;
818
 
819
    l3_side->main_data_begin += (bitsPerFrame-bits)/8;
820
    if ((l3_side->main_data_begin * 8) != gfc->ResvSize ) {
821
      ERRORF(gfc,"bit reservoir error: \n"
822
             "l3_side->main_data_begin: %i \n"
823
             "Resvoir size:             %i \n"
824
             "resv drain (post)         %i \n"
825
             "resv drain (pre)          %i \n"
826
             "header and sideinfo:      %i \n"
827
             "data bits:                %i \n"
828
             "total bits:               %i (remainder: %i) \n"
829
             "bitsperframe:             %i \n",
830
 
831
             8*l3_side->main_data_begin,
832
             gfc->ResvSize,
833
             l3_side->resvDrain_post,
834
             l3_side->resvDrain_pre,
835
             8*gfc->sideinfo_len,
836
             bits-l3_side->resvDrain_post-8*gfc->sideinfo_len,
837
             bits, bits % 8,
838
             bitsPerFrame
839
      );
840
 
841
      gfc->ResvSize = l3_side->main_data_begin*8;
842
    };
843
    assert(gfc->bs.totbit % 8 == 0);
844
 
845
    if (gfc->bs.totbit > 1000000000  ) {
846
      /* to avoid totbit overflow, (at 8h encoding at 128kbs) lets reset bit counter*/
847
      int i;
848
      for (i=0 ; i< MAX_HEADER_BUF ; ++i) 
849
	gfc->header[i].write_timing -= gfc->bs.totbit;      
850
      gfc->bs.totbit=0;
851
    }
852
    return 0;
853
}
854
 
855
 
856
int copy_buffer(unsigned char *buffer,int size,Bit_stream_struc *bs)
857
{
858
  int minimum = bs->buf_byte_idx + 1;
859
  if (minimum <= 0) return 0;
860
  if (size!=0 && minimum>size) return -1; /* buffer is too small */
861
  memcpy(buffer,bs->buf,minimum);
862
  bs->buf_byte_idx = -1;
863
  bs->buf_bit_idx = 0;
864
  return minimum;
865
}
866
 
867
 
868
void init_bit_stream_w(lame_internal_flags *gfc)
869
{
870
   gfc->bs.buf = (unsigned char *)       malloc(BUFFER_SIZE);
871
   gfc->bs.buf_size = BUFFER_SIZE;
872
 
873
   gfc->h_ptr = gfc->w_ptr = 0;
874
   gfc->header[gfc->h_ptr].write_timing = 0;
875
   gfc->bs.buf_byte_idx = -1;
876
   gfc->bs.buf_bit_idx = 0;
877
   gfc->bs.totbit = 0;
878
}
879
 
880
/* end of bitstream.c */