1 /*****************************************************************************
2 * audio_decoder.c: MPEG1 Layer I-II audio decoder thread
3 *****************************************************************************
4 * Copyright (C) 1999, 2000 VideoLAN
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
18 * You should have received a copy of the GNU General Public
19 * License along with this program; if not, write to the
20 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21 * Boston, MA 02111-1307, USA.
22 *****************************************************************************/
27 * - optimiser les NeedBits() et les GetBits() du code là où c'est possible ;
28 * - vlc_cond_signal() / vlc_cond_wait() ;
32 /*****************************************************************************
34 *****************************************************************************/
37 #include <unistd.h> /* getpid() */
39 #include <stdio.h> /* "intf_msg.h" */
40 #include <stdlib.h> /* malloc(), free() */
41 #include <sys/types.h> /* on BSD, uio.h needs types.h */
42 #include <sys/uio.h> /* "input.h" */
49 #include "debug.h" /* "input_netlist.h" */
51 #include "intf_msg.h" /* intf_DbgMsg(), intf_ErrMsg() */
53 #include "input.h" /* pes_packet_t */
54 #include "input_netlist.h" /* input_NetlistFreePES() */
55 #include "decoder_fifo.h" /* DECODER_FIFO_(ISEMPTY|START|INCSTART)() */
57 #include "audio_output.h" /* aout_fifo_t (for audio_decoder.h) */
59 #include "audio_constants.h"
60 #include "audio_decoder.h"
61 #include "audio_math.h" /* DCT32(), PCM() */
63 /*****************************************************************************
65 *****************************************************************************/
66 static int InitThread ( adec_thread_t * p_adec );
67 static void RunThread ( adec_thread_t * p_adec );
68 static void ErrorThread ( adec_thread_t * p_adec );
69 static void EndThread ( adec_thread_t * p_adec );
72 static int adec_Layer1_Mono ( adec_thread_t * p_adec );
73 static int adec_Layer1_Stereo ( adec_thread_t * p_adec );
74 static int adec_Layer2_Mono ( adec_thread_t * p_adec );
75 static int adec_Layer2_Stereo ( adec_thread_t * p_adec );
77 static byte_t GetByte ( bit_stream_t * p_bit_stream );
78 static void NeedBits ( bit_stream_t * p_bit_stream, int i_bits );
79 static void DumpBits ( bit_stream_t * p_bit_stream, int i_bits );
80 static int FindHeader ( adec_thread_t * p_adec );
83 /*****************************************************************************
84 * adec_CreateThread: creates an audio decoder thread
85 *****************************************************************************
86 * This function creates a new audio decoder thread, and returns a pointer to
87 * its description. On error, it returns NULL.
88 *****************************************************************************/
89 adec_thread_t * adec_CreateThread( input_thread_t * p_input )
91 adec_thread_t * p_adec;
93 intf_DbgMsg("adec debug: creating audio decoder thread\n");
95 /* Allocate the memory needed to store the thread's structure */
96 if ( (p_adec = (adec_thread_t *)malloc( sizeof(adec_thread_t) )) == NULL )
98 intf_ErrMsg("adec error: not enough memory for adec_CreateThread() to create the new thread\n");
103 * Initialize the thread properties
109 * Initialize the input properties
111 /* Initialize the decoder fifo's data lock and conditional variable and set
112 * its buffer as empty */
113 vlc_mutex_init( &p_adec->fifo.data_lock );
114 vlc_cond_init( &p_adec->fifo.data_wait );
115 p_adec->fifo.i_start = 0;
116 p_adec->fifo.i_end = 0;
117 /* Initialize the bit stream structure */
118 p_adec->bit_stream.p_input = p_input;
119 p_adec->bit_stream.p_decoder_fifo = &p_adec->fifo;
120 p_adec->bit_stream.fifo.buffer = 0;
121 p_adec->bit_stream.fifo.i_available = 0;
124 * Initialize the decoder properties
126 p_adec->bank_0.actual = p_adec->bank_0.v1;
127 p_adec->bank_0.pos = 0;
128 p_adec->bank_1.actual = p_adec->bank_1.v1;
129 p_adec->bank_1.pos = 0;
132 * Initialize the output properties
134 p_adec->p_aout = p_input->p_aout;
135 p_adec->p_aout_fifo = NULL;
137 /* Spawn the audio decoder thread */
138 if ( vlc_thread_create(&p_adec->thread_id, "audio decoder", (vlc_thread_func_t)RunThread, (void *)p_adec) )
140 intf_ErrMsg("adec error: can't spawn audio decoder thread\n");
145 intf_DbgMsg("adec debug: audio decoder thread (%p) created\n", p_adec);
149 /*****************************************************************************
150 * adec_DestroyThread: destroys an audio decoder thread
151 *****************************************************************************
152 * This function asks an audio decoder thread to terminate. This function has
153 * not to wait until the decoder thread has really died, because the killer (ie
154 * this function's caller) is the input thread, that's why we are sure that no
155 * other thread will try to access to this thread's descriptor after its
157 *****************************************************************************/
158 void adec_DestroyThread( adec_thread_t * p_adec )
160 intf_DbgMsg("adec debug: requesting termination of audio decoder thread %p\n", p_adec);
162 /* Ask thread to kill itself */
165 /* Make sure the decoder thread leaves the GetByte() function */
166 vlc_mutex_lock( &(p_adec->fifo.data_lock) );
167 vlc_cond_signal( &(p_adec->fifo.data_wait) );
168 vlc_mutex_unlock( &(p_adec->fifo.data_lock) );
170 /* Waiting for the decoder thread to exit */
171 /* Remove this as soon as the "status" flag is implemented */
172 vlc_thread_join( p_adec->thread_id );
175 /* Following functions are local */
177 /*****************************************************************************
178 * FindHeader : parses an input stream until an audio frame header could be
180 *****************************************************************************
181 * When this function returns successfully, the header can be found in the
182 * buffer of the bit stream fifo.
183 *****************************************************************************/
184 static int FindHeader( adec_thread_t * p_adec )
186 while ( (!p_adec->b_die) && (!p_adec->b_error) )
188 NeedBits( &p_adec->bit_stream, 32 );
189 if ( (p_adec->bit_stream.fifo.buffer & ADEC_HEADER_SYNCWORD_MASK) == ADEC_HEADER_SYNCWORD_MASK )
193 DumpBits( &p_adec->bit_stream, 8 );
199 /*****************************************************************************
200 * adec_Layer`L'_`M': decodes an mpeg 1, layer `L', mode `M', audio frame
201 *****************************************************************************
202 * These functions decode the audio frame which has already its header loaded
203 * in the i_header member of the audio decoder thread structure and its first
204 * byte of data described by the bit stream structure of the audio decoder
205 * thread (there is no bit available in the bit buffer yet)
206 *****************************************************************************/
208 /*****************************************************************************
210 *****************************************************************************/
211 static __inline__ int adec_Layer1_Mono( adec_thread_t * p_adec )
213 p_adec->bit_stream.fifo.buffer = 0;
214 p_adec->bit_stream.fifo.i_available = 0;
218 /*****************************************************************************
220 *****************************************************************************/
221 static __inline__ int adec_Layer1_Stereo( adec_thread_t * p_adec )
223 p_adec->bit_stream.fifo.buffer = 0;
224 p_adec->bit_stream.fifo.i_available = 0;
228 /*****************************************************************************
230 *****************************************************************************/
231 static __inline__ int adec_Layer2_Mono( adec_thread_t * p_adec )
233 p_adec->bit_stream.fifo.buffer = 0;
234 p_adec->bit_stream.fifo.i_available = 0;
238 /*****************************************************************************
240 *****************************************************************************/
241 static __inline__ int adec_Layer2_Stereo( adec_thread_t * p_adec )
243 typedef struct requantization_s
245 byte_t i_bits_per_codeword;
246 const float * pf_ungroup;
251 static const float pf_scalefactor[64] = ADEC_SCALE_FACTOR;
254 static int i_sampling_frequency, i_mode, i_bound;
255 static int pi_allocation_0[32], pi_allocation_1[32]; /* see ISO/IEC 11172-3 2.4.1.6 */
257 float f_scalefactor_0, f_scalefactor_1;
259 static const byte_t ppi_bitrate_per_channel_index[4][15] = ADEC_LAYER2_BITRATE_PER_CHANNEL_INDEX;
260 static const byte_t ppi_sblimit[3][11] = ADEC_LAYER2_SBLIMIT;
261 static const byte_t ppi_nbal[2][32] = ADEC_LAYER2_NBAL;
263 static const float pf_ungroup3[3*3*3 * 3] = ADEC_LAYER2_UNGROUP3;
264 static const float pf_ungroup5[5*5*5 * 3] = ADEC_LAYER2_UNGROUP5;
265 static const float pf_ungroup9[9*9*9 * 3] = ADEC_LAYER2_UNGROUP9;
267 static const requantization_t p_requantization_cd[16] = ADEC_LAYER2_REQUANTIZATION_CD;
268 static const requantization_t p_requantization_ab1[16] = ADEC_LAYER2_REQUANTIZATION_AB1;
269 static const requantization_t p_requantization_ab2[16] = ADEC_LAYER2_REQUANTIZATION_AB2;
270 static const requantization_t p_requantization_ab3[16] = ADEC_LAYER2_REQUANTIZATION_AB3;
271 static const requantization_t p_requantization_ab4[16] = ADEC_LAYER2_REQUANTIZATION_AB4;
272 static const requantization_t * pp_requantization_ab[30] = ADEC_LAYER2_REQUANTIZATION_AB;
274 static int i_sblimit, i_bitrate_per_channel_index;
275 static int pi_scfsi_0[30], pi_scfsi_1[30];
276 static const byte_t * pi_nbal;
277 static float ppf_sample_0[3][32], ppf_sample_1[3][32];
278 static const requantization_t * pp_requantization_0[30];
279 static const requantization_t * pp_requantization_1[30];
280 static requantization_t requantization;
281 static const float * pf_ungroup;
283 static float pf_scalefactor_0_0[30], pf_scalefactor_0_1[30], pf_scalefactor_0_2[30];
284 static float pf_scalefactor_1_0[30], pf_scalefactor_1_1[30], pf_scalefactor_1_2[30];
292 int i_need = 0, i_dump = 0;
294 static const int pi_framesize[512] = ADEC_FRAME_SIZE;
297 /* Read the audio frame header and flush the bit buffer */
298 i_header = p_adec->bit_stream.fifo.buffer;
299 p_adec->bit_stream.fifo.buffer = 0;
300 p_adec->bit_stream.fifo.i_available = 0;
301 /* Read the sampling frequency (see ISO/IEC 11172-3 2.4.2.3) */
302 i_sampling_frequency = (int)((i_header & ADEC_HEADER_SAMPLING_FREQUENCY_MASK)
303 >> ADEC_HEADER_SAMPLING_FREQUENCY_SHIFT);
304 /* Read the mode (see ISO/IEC 11172-3 2.4.2.3) */
305 i_mode = (int)((i_header & ADEC_HEADER_MODE_MASK) >> ADEC_HEADER_MODE_SHIFT);
306 /* If a CRC can be found in the frame, get rid of it */
307 if ( (i_header & ADEC_HEADER_PROTECTION_BIT_MASK) == 0 )
309 GetByte( &p_adec->bit_stream );
310 GetByte( &p_adec->bit_stream );
313 /* Find out the bitrate per channel index */
314 i_bitrate_per_channel_index = (int)ppi_bitrate_per_channel_index[i_mode]
315 [(i_header & ADEC_HEADER_BITRATE_INDEX_MASK) >> ADEC_HEADER_BITRATE_INDEX_SHIFT];
316 /* Find out the number of subbands */
317 i_sblimit = (int)ppi_sblimit[i_sampling_frequency][i_bitrate_per_channel_index];
318 /* Check if the frame is valid or not */
319 if ( i_sblimit == 0 )
321 return( 0 ); /* the frame is invalid */
323 /* Find out the number of bits allocated */
324 pi_nbal = ppi_nbal[ (i_bitrate_per_channel_index <= 2) ? 0 : 1 ];
326 /* Find out the `bound' subband (see ISO/IEC 11172-3 2.4.2.3) */
329 i_bound = (int)(((i_header & ADEC_HEADER_MODE_EXTENSION_MASK) >> (ADEC_HEADER_MODE_EXTENSION_SHIFT - 2)) + 4);
330 if ( i_bound > i_sblimit )
340 /* Read the allocation information (see ISO/IEC 11172-3 2.4.1.6) */
341 for ( i_sb = 0; i_sb < i_bound; i_sb++ )
343 i_2nbal = 2 * (i_nbal = (int)pi_nbal[ i_sb ]);
344 NeedBits( &p_adec->bit_stream, i_2nbal );
346 pi_allocation_0[ i_sb ] = (int)(p_adec->bit_stream.fifo.buffer >> (32 - i_nbal));
347 p_adec->bit_stream.fifo.buffer <<= i_nbal;
348 pi_allocation_1[ i_sb ] = (int)(p_adec->bit_stream.fifo.buffer >> (32 - i_nbal));
349 p_adec->bit_stream.fifo.buffer <<= i_nbal;
350 p_adec->bit_stream.fifo.i_available -= i_2nbal;
353 for ( ; i_sb < i_sblimit; i_sb++ )
355 i_nbal = (int)pi_nbal[ i_sb ];
356 NeedBits( &p_adec->bit_stream, i_nbal );
358 pi_allocation_0[ i_sb ] = (int)(p_adec->bit_stream.fifo.buffer >> (32 - i_nbal));
359 DumpBits( &p_adec->bit_stream, i_nbal );
363 #define MACRO( p_requantization ) \
364 for ( i_sb = 0; i_sb < i_bound; i_sb++ ) \
366 if ( pi_allocation_0[i_sb] ) \
368 pp_requantization_0[i_sb] = &((p_requantization)[pi_allocation_0[i_sb]]); \
369 NeedBits( &p_adec->bit_stream, 2 ); \
371 pi_scfsi_0[i_sb] = (int)(p_adec->bit_stream.fifo.buffer >> (32 - 2)); \
372 DumpBits( &p_adec->bit_stream, 2 ); \
377 ppf_sample_0[0][i_sb] = .0; \
378 ppf_sample_0[1][i_sb] = .0; \
379 ppf_sample_0[2][i_sb] = .0; \
382 if ( pi_allocation_1[i_sb] ) \
384 pp_requantization_1[i_sb] = &((p_requantization)[pi_allocation_1[i_sb]]); \
385 NeedBits( &p_adec->bit_stream, 2 ); \
387 pi_scfsi_1[i_sb] = (int)(p_adec->bit_stream.fifo.buffer >> (32 - 2)); \
388 DumpBits( &p_adec->bit_stream, 2 ); \
393 ppf_sample_1[0][i_sb] = .0; \
394 ppf_sample_1[1][i_sb] = .0; \
395 ppf_sample_1[2][i_sb] = .0; \
399 for ( ; i_sb < i_sblimit; i_sb++ ) \
401 if ( pi_allocation_0[i_sb] ) \
403 pp_requantization_0[i_sb] = &((p_requantization)[pi_allocation_0[i_sb]]); \
404 NeedBits( &p_adec->bit_stream, 4 ); \
406 pi_scfsi_0[i_sb] = (int)(p_adec->bit_stream.fifo.buffer >> (32 - 2)); \
407 p_adec->bit_stream.fifo.buffer <<= 2; \
408 pi_scfsi_1[i_sb] = (int)(p_adec->bit_stream.fifo.buffer >> (32 - 2)); \
409 p_adec->bit_stream.fifo.buffer <<= 2; \
410 p_adec->bit_stream.fifo.i_available -= 4; \
415 ppf_sample_0[0][i_sb] = .0; \
416 ppf_sample_0[1][i_sb] = .0; \
417 ppf_sample_0[2][i_sb] = .0; \
418 ppf_sample_1[0][i_sb] = .0; \
419 ppf_sample_1[1][i_sb] = .0; \
420 ppf_sample_1[2][i_sb] = .0; \
425 if ( i_bitrate_per_channel_index <= 2 )
427 MACRO( p_requantization_cd )
431 MACRO( pp_requantization_ab[i_sb] )
434 #define SWITCH( pi_scfsi, pf_scalefactor_0, pf_scalefactor_1, pf_scalefactor_2 )\
435 switch ( (pi_scfsi)[i_sb] ) \
438 NeedBits( &p_adec->bit_stream, (3*6) ); \
440 (pf_scalefactor_0)[i_sb] = pf_scalefactor[p_adec->bit_stream.fifo.buffer >> (32 - 6)]; \
441 p_adec->bit_stream.fifo.buffer <<= 6; \
442 (pf_scalefactor_1)[i_sb] = pf_scalefactor[p_adec->bit_stream.fifo.buffer >> (32 - 6)]; \
443 p_adec->bit_stream.fifo.buffer <<= 6; \
444 (pf_scalefactor_2)[i_sb] = pf_scalefactor[p_adec->bit_stream.fifo.buffer >> (32 - 6)]; \
445 p_adec->bit_stream.fifo.buffer <<= 6; \
446 p_adec->bit_stream.fifo.i_available -= (3*6); \
451 NeedBits( &p_adec->bit_stream, (2*6) ); \
453 (pf_scalefactor_0)[i_sb] = \
454 (pf_scalefactor_1)[i_sb] = pf_scalefactor[p_adec->bit_stream.fifo.buffer >> (32 - 6)]; \
455 p_adec->bit_stream.fifo.buffer <<= 6; \
456 (pf_scalefactor_2)[i_sb] = pf_scalefactor[p_adec->bit_stream.fifo.buffer >> (32 - 6)]; \
457 p_adec->bit_stream.fifo.buffer <<= 6; \
458 p_adec->bit_stream.fifo.i_available -= (2*6); \
463 NeedBits( &p_adec->bit_stream, (1*6) ); \
465 (pf_scalefactor_0)[i_sb] = \
466 (pf_scalefactor_1)[i_sb] = \
467 (pf_scalefactor_2)[i_sb] = pf_scalefactor[p_adec->bit_stream.fifo.buffer >> (32 - 6)]; \
468 DumpBits( &p_adec->bit_stream, (1*6) ); \
473 NeedBits( &p_adec->bit_stream, (2*6) ); \
475 (pf_scalefactor_0)[i_sb] = pf_scalefactor[p_adec->bit_stream.fifo.buffer >> (32 - 6)]; \
476 p_adec->bit_stream.fifo.buffer <<= 6; \
477 (pf_scalefactor_1)[i_sb] = \
478 (pf_scalefactor_2)[i_sb] = pf_scalefactor[p_adec->bit_stream.fifo.buffer >> (32 - 6)]; \
479 p_adec->bit_stream.fifo.buffer <<= 6; \
480 p_adec->bit_stream.fifo.i_available -= (2*6); \
486 for ( i_sb = 0; i_sb < i_bound; i_sb++ )
488 if ( pi_allocation_0[i_sb] )
490 SWITCH( pi_scfsi_0, pf_scalefactor_0_0, pf_scalefactor_0_1, pf_scalefactor_0_2 )
492 if ( pi_allocation_1[i_sb] )
494 SWITCH( pi_scfsi_1, pf_scalefactor_1_0, pf_scalefactor_1_1, pf_scalefactor_1_2 )
497 for ( ; i_sb < i_sblimit; i_sb++ )
499 if ( pi_allocation_0[i_sb] )
501 SWITCH( pi_scfsi_0, pf_scalefactor_0_0, pf_scalefactor_0_1, pf_scalefactor_0_2 )
502 SWITCH( pi_scfsi_1, pf_scalefactor_1_0, pf_scalefactor_1_1, pf_scalefactor_1_2 )
505 for ( ; i_sb < 32; i_sb++ )
507 ppf_sample_0[0][i_sb] = .0;
508 ppf_sample_0[1][i_sb] = .0;
509 ppf_sample_0[2][i_sb] = .0;
510 ppf_sample_1[0][i_sb] = .0;
511 ppf_sample_1[1][i_sb] = .0;
512 ppf_sample_1[2][i_sb] = .0;
516 /* fprintf(stderr, "%p\n", p_adec->p_aout_fifo->buffer); */ \
517 /* fprintf(stderr, "l_end_frame == %li, %p\n", l_end_frame, (aout_frame_t *)p_adec->p_aout_fifo->buffer + l_end_frame); */ \
518 p_s16 = ((adec_frame_t *)p_adec->p_aout_fifo->buffer)[ l_end_frame ]; \
519 /* fprintf(stderr, "p_s16 == %p\n", p_s16); */ \
521 l_end_frame &= AOUT_FIFO_SIZE;
522 /* #define NEXT_BUF */
524 #define GROUPTEST( pp_requantization, ppf_sample, pf_sf ) \
525 requantization = *((pp_requantization)[i_sb]); \
526 if ( requantization.pf_ungroup == NULL ) \
528 NeedBits( &p_adec->bit_stream, requantization.i_bits_per_codeword ); \
529 i_need += requantization.i_bits_per_codeword; \
530 (ppf_sample)[0][i_sb] = (f_scalefactor_0 = (pf_sf)[i_sb]) * (requantization.f_slope * \
531 (p_adec->bit_stream.fifo.buffer >> (32 - requantization.i_bits_per_codeword)) + requantization.f_offset); \
532 DumpBits( &p_adec->bit_stream, requantization.i_bits_per_codeword ); \
533 i_dump += requantization.i_bits_per_codeword; \
535 NeedBits( &p_adec->bit_stream, requantization.i_bits_per_codeword ); \
536 i_need += requantization.i_bits_per_codeword; \
537 (ppf_sample)[1][i_sb] = f_scalefactor_0 * (requantization.f_slope * \
538 (p_adec->bit_stream.fifo.buffer >> (32 - requantization.i_bits_per_codeword)) + requantization.f_offset); \
539 DumpBits( &p_adec->bit_stream, requantization.i_bits_per_codeword ); \
540 i_dump += requantization.i_bits_per_codeword; \
542 NeedBits( &p_adec->bit_stream, requantization.i_bits_per_codeword ); \
543 i_need += requantization.i_bits_per_codeword; \
544 (ppf_sample)[2][i_sb] = f_scalefactor_0 * (requantization.f_slope * \
545 (p_adec->bit_stream.fifo.buffer >> (32 - requantization.i_bits_per_codeword)) + requantization.f_offset); \
546 DumpBits( &p_adec->bit_stream, requantization.i_bits_per_codeword ); \
547 i_dump += requantization.i_bits_per_codeword; \
551 NeedBits( &p_adec->bit_stream, requantization.i_bits_per_codeword ); \
552 i_need += requantization.i_bits_per_codeword; \
553 pf_ungroup = requantization.pf_ungroup + 3 * \
554 (p_adec->bit_stream.fifo.buffer >> (32 - requantization.i_bits_per_codeword)); \
555 DumpBits( &p_adec->bit_stream, requantization.i_bits_per_codeword ); \
556 i_dump += requantization.i_bits_per_codeword; \
557 (ppf_sample)[0][i_sb] = (f_scalefactor_0 = (pf_sf)[i_sb]) * pf_ungroup[0]; \
558 (ppf_sample)[1][i_sb] = f_scalefactor_0 * pf_ungroup[1]; \
559 (ppf_sample)[2][i_sb] = f_scalefactor_0 * pf_ungroup[2]; \
561 /* #define GROUPTEST */
563 #define READ_SAMPLE_L2S( pf_scalefactor_0, pf_scalefactor_1, i_grlimit ) \
564 for ( ; i_gr < (i_grlimit); i_gr++ ) \
566 for ( i_sb = 0; i_sb < i_bound; i_sb++ ) \
568 if ( pi_allocation_0[i_sb] ) \
570 GROUPTEST( pp_requantization_0, ppf_sample_0, (pf_scalefactor_0) ) \
572 if ( pi_allocation_1[i_sb] ) \
574 GROUPTEST( pp_requantization_1, ppf_sample_1, (pf_scalefactor_1) ) \
577 for ( ; i_sb < i_sblimit; i_sb++ ) \
579 if ( pi_allocation_0[i_sb] ) \
581 requantization = *(pp_requantization_0[i_sb]); \
582 if ( requantization.pf_ungroup == NULL ) \
584 NeedBits( &p_adec->bit_stream, requantization.i_bits_per_codeword ); \
585 i_need += requantization.i_bits_per_codeword; \
586 ppf_sample_0[0][i_sb] = (f_scalefactor_0 = (pf_scalefactor_0)[i_sb]) * \
587 (requantization.f_slope * (f_dummy = \
588 (float)(p_adec->bit_stream.fifo.buffer >> (32 - requantization.i_bits_per_codeword))) + \
589 requantization.f_offset); \
590 DumpBits( &p_adec->bit_stream, requantization.i_bits_per_codeword ); \
591 i_dump += requantization.i_bits_per_codeword; \
592 ppf_sample_1[0][i_sb] = (f_scalefactor_1 = (pf_scalefactor_1)[i_sb]) * \
593 (requantization.f_slope * f_dummy + requantization.f_offset); \
595 NeedBits( &p_adec->bit_stream, requantization.i_bits_per_codeword ); \
596 i_need += requantization.i_bits_per_codeword; \
597 ppf_sample_0[1][i_sb] = f_scalefactor_0 * \
598 (requantization.f_slope * (f_dummy = \
599 (float)(p_adec->bit_stream.fifo.buffer >> (32 - requantization.i_bits_per_codeword))) + \
600 requantization.f_offset); \
601 DumpBits( &p_adec->bit_stream, requantization.i_bits_per_codeword ); \
602 i_dump += requantization.i_bits_per_codeword; \
603 ppf_sample_1[1][i_sb] = f_scalefactor_1 * \
604 (requantization.f_slope * f_dummy + requantization.f_offset); \
606 NeedBits( &p_adec->bit_stream, requantization.i_bits_per_codeword ); \
607 i_need += requantization.i_bits_per_codeword; \
608 ppf_sample_0[2][i_sb] = f_scalefactor_0 * \
609 (requantization.f_slope * (f_dummy = \
610 (float)(p_adec->bit_stream.fifo.buffer >> (32 - requantization.i_bits_per_codeword))) + \
611 requantization.f_offset); \
612 DumpBits( &p_adec->bit_stream, requantization.i_bits_per_codeword ); \
613 i_dump += requantization.i_bits_per_codeword; \
614 ppf_sample_1[2][i_sb] = f_scalefactor_1 * \
615 (requantization.f_slope * f_dummy + requantization.f_offset); \
619 NeedBits( &p_adec->bit_stream, requantization.i_bits_per_codeword ); \
620 i_need += requantization.i_bits_per_codeword; \
621 pf_ungroup = requantization.pf_ungroup + 3 * \
622 (p_adec->bit_stream.fifo.buffer >> (32 - requantization.i_bits_per_codeword)); \
623 DumpBits( &p_adec->bit_stream, requantization.i_bits_per_codeword ); \
624 i_dump += requantization.i_bits_per_codeword; \
626 ppf_sample_0[0][i_sb] = (f_scalefactor_0 = (pf_scalefactor_0)[i_sb]) * pf_ungroup[0]; \
627 ppf_sample_0[1][i_sb] = f_scalefactor_0 * pf_ungroup[1]; \
628 ppf_sample_0[2][i_sb] = f_scalefactor_0 * pf_ungroup[2]; \
630 ppf_sample_1[0][i_sb] = (f_scalefactor_1 = (pf_scalefactor_1)[i_sb]) * pf_ungroup[0]; \
631 ppf_sample_1[1][i_sb] = f_scalefactor_1 * pf_ungroup[1]; \
632 ppf_sample_1[2][i_sb] = f_scalefactor_1 * pf_ungroup[2]; \
637 /* fprintf(stderr, "%p", p_s16); */ \
638 DCT32( ppf_sample_0[0], &p_adec->bank_0 ); \
639 PCM( &p_adec->bank_0, &p_s16, 2 ); \
640 /* fprintf(stderr, " %p", p_s16); */ \
642 /* fprintf(stderr, " %p\n", p_s16); */ \
644 /* fprintf(stderr, "%p", p_s16); */ \
645 DCT32( ppf_sample_1[0], &p_adec->bank_1 ); \
646 PCM( &p_adec->bank_1, &p_s16, 2 ); \
647 /* fprintf(stderr, " %p", p_s16); */ \
649 /* fprintf(stderr, " %p\n", p_s16); */ \
651 /* fprintf(stderr, "%p", p_s16); */ \
652 DCT32( ppf_sample_0[1], &p_adec->bank_0 ); \
653 PCM( &p_adec->bank_0, &p_s16, 2 ); \
654 /* fprintf(stderr, " %p", p_s16); */ \
656 /* fprintf(stderr, " %p\n", p_s16); */ \
658 /* fprintf(stderr, "%p", p_s16); */ \
659 DCT32( ppf_sample_1[1], &p_adec->bank_1 ); \
660 PCM( &p_adec->bank_1, &p_s16, 2 ); \
661 /* fprintf(stderr, " %p", p_s16); */ \
663 /* fprintf(stderr, " %p\n", p_s16); */ \
665 /* fprintf(stderr, "%p", p_s16); */ \
666 DCT32( ppf_sample_0[2], &p_adec->bank_0 ); \
667 PCM( &p_adec->bank_0, &p_s16, 2 ); \
668 /* fprintf(stderr, " %p", p_s16); */ \
670 /* fprintf(stderr, " %p\n", p_s16); */ \
672 /* fprintf(stderr, "%p", p_s16); */ \
673 DCT32( ppf_sample_1[2], &p_adec->bank_1 ); \
674 PCM( &p_adec->bank_1, &p_s16, 2 ); \
675 /* fprintf(stderr, " %p", p_s16); */ \
677 /* fprintf(stderr, " %p\n", p_s16); */ \
679 /* #define READ_SAMPLE_L2S */
681 l_end_frame = p_adec->p_aout_fifo->l_end_frame;
685 READ_SAMPLE_L2S( pf_scalefactor_0_0, pf_scalefactor_1_0, 2 )
688 READ_SAMPLE_L2S( pf_scalefactor_0_0, pf_scalefactor_1_0, 4 )
691 READ_SAMPLE_L2S( pf_scalefactor_0_1, pf_scalefactor_1_1, 6 )
694 READ_SAMPLE_L2S( pf_scalefactor_0_1, pf_scalefactor_1_1, 8 )
697 READ_SAMPLE_L2S( pf_scalefactor_0_2, pf_scalefactor_1_2, 10 )
700 READ_SAMPLE_L2S( pf_scalefactor_0_2, pf_scalefactor_1_2, 12 )
703 fprintf(stderr, "adec debug: layer == %i, padding_bit == %i, sampling_frequency == %i, bitrate_index == %i\n",
704 (i_header & ADEC_HEADER_LAYER_MASK) >> ADEC_HEADER_LAYER_SHIFT,
705 (i_header & ADEC_HEADER_PADDING_BIT_MASK) >> ADEC_HEADER_PADDING_BIT_SHIFT,
706 (i_header & ADEC_HEADER_SAMPLING_FREQUENCY_MASK) >> ADEC_HEADER_SAMPLING_FREQUENCY_SHIFT,
707 (i_header & ADEC_HEADER_BITRATE_INDEX_MASK) >> ADEC_HEADER_BITRATE_INDEX_SHIFT);
708 fprintf(stderr, "adec debug: framesize == %i, i_need == %i, i_dump == %i\n",
709 pi_framesize[ 128 * ((i_header & ADEC_HEADER_LAYER_MASK) >> ADEC_HEADER_LAYER_SHIFT) +
710 64 * ((i_header & ADEC_HEADER_PADDING_BIT_MASK) >> ADEC_HEADER_PADDING_BIT_SHIFT) +
711 16 * ((i_header & ADEC_HEADER_SAMPLING_FREQUENCY_MASK) >> ADEC_HEADER_SAMPLING_FREQUENCY_SHIFT) +
712 1 * ((i_header & ADEC_HEADER_BITRATE_INDEX_MASK) >> ADEC_HEADER_BITRATE_INDEX_SHIFT) ],
716 p_adec->bit_stream.fifo.buffer = 0;
717 p_adec->bit_stream.fifo.i_available = 0;
721 /*****************************************************************************
722 * InitThread : initialize an audio decoder thread
723 *****************************************************************************
724 * This function is called from RunThread and performs the second step of the
725 * initialization. It returns 0 on success.
726 *****************************************************************************/
727 static int InitThread( adec_thread_t * p_adec )
729 aout_fifo_t aout_fifo;
731 intf_DbgMsg("adec debug: initializing audio decoder thread %p\n", p_adec);
733 /* Our first job is to initialize the bit stream structure with the
734 * beginning of the input stream */
735 vlc_mutex_lock( &p_adec->fifo.data_lock );
736 while ( DECODER_FIFO_ISEMPTY(p_adec->fifo) )
740 vlc_mutex_unlock( &p_adec->fifo.data_lock );
743 vlc_cond_wait( &p_adec->fifo.data_wait, &p_adec->fifo.data_lock );
745 p_adec->bit_stream.p_ts = DECODER_FIFO_START( p_adec->fifo )->p_first_ts;
746 p_adec->bit_stream.p_byte = p_adec->bit_stream.p_ts->buffer + p_adec->bit_stream.p_ts->i_payload_start;
747 p_adec->bit_stream.p_end = p_adec->bit_stream.p_ts->buffer + p_adec->bit_stream.p_ts->i_payload_end;
748 vlc_mutex_unlock( &p_adec->fifo.data_lock );
750 /* Now we look for an audio frame header in the input stream */
751 if ( FindHeader(p_adec) )
753 return( -1 ); /* b_die or b_error is set */
757 * We have the header and all its informations : we must be able to create
758 * the audio output fifo.
761 /* Is the sound in mono mode or stereo mode ? */
762 if ( (p_adec->bit_stream.fifo.buffer & ADEC_HEADER_MODE_MASK) == ADEC_HEADER_MODE_MASK )
764 intf_DbgMsg("adec debug: mode == mono\n");
765 aout_fifo.i_type = AOUT_ADEC_MONO_FIFO;
766 aout_fifo.i_channels = 1;
767 aout_fifo.b_stereo = 0;
771 intf_DbgMsg("adec debug: mode == stereo\n");
772 aout_fifo.i_type = AOUT_ADEC_STEREO_FIFO;
773 aout_fifo.i_channels = 2;
774 aout_fifo.b_stereo = 1;
777 /* Checking the sampling frequency */
778 switch ( (p_adec->bit_stream.fifo.buffer & ADEC_HEADER_SAMPLING_FREQUENCY_MASK) \
779 >> ADEC_HEADER_SAMPLING_FREQUENCY_SHIFT )
782 intf_DbgMsg("adec debug: sampling_frequency == 44100 Hz\n");
783 aout_fifo.l_rate = 44100;
787 intf_DbgMsg("adec debug: sampling_frequency == 48000 Hz\n");
788 aout_fifo.l_rate = 48000;
792 intf_DbgMsg("adec debug: sampling_frequency == 32000 Hz\n");
793 aout_fifo.l_rate = 32000;
797 intf_ErrMsg("adec error: can't create audio output fifo (sampling_frequency == `reserved')\n");
801 aout_fifo.l_frame_size = ADEC_FRAME_SIZE;
803 /* Creating the audio output fifo */
804 if ( (p_adec->p_aout_fifo = aout_CreateFifo(p_adec->p_aout, &aout_fifo)) == NULL )
809 intf_DbgMsg("adec debug: audio decoder thread %p initialized\n", p_adec);
813 /*****************************************************************************
814 * RunThread : audio decoder thread
815 *****************************************************************************
816 * Audio decoder thread. This function does only returns when the thread is
818 *****************************************************************************/
819 static void RunThread( adec_thread_t * p_adec )
822 static const int pi_framesize[512] = ADEC_FRAME_SIZE;
828 intf_DbgMsg("adec debug: running audio decoder thread (%p) (pid == %i)\n", p_adec, getpid());
830 msleep( INPUT_PTS_DELAY );
832 /* Initializing the audio decoder thread */
833 if ( InitThread(p_adec) )
838 /* Audio decoder thread's main loop */
839 while ( (!p_adec->b_die) && (!p_adec->b_error) )
841 switch ( (p_adec->bit_stream.fifo.buffer & ADEC_HEADER_LAYER_MASK) >> ADEC_HEADER_LAYER_SHIFT )
845 intf_DbgMsg("adec debug: layer == 0 (reserved)\n");
846 p_adec->bit_stream.fifo.buffer = 0;
847 p_adec->bit_stream.fifo.i_available = 0;
852 p_adec->bit_stream.fifo.buffer = 0;
853 p_adec->bit_stream.fifo.i_available = 0;
858 if ( (p_adec->bit_stream.fifo.buffer & ADEC_HEADER_MODE_MASK) == ADEC_HEADER_MODE_MASK )
860 adec_Layer2_Mono( p_adec );
864 /* Waiting until there is enough free space in the audio output fifo
865 * in order to store the new decoded frames */
866 vlc_mutex_lock( &p_adec->p_aout_fifo->data_lock );
867 /* adec_Layer2_Stereo() produces 6 output frames (2*1152/384)...
868 * If these 6 frames were recorded in the audio output fifo, the
869 * l_end_frame index would be incremented 6 times. But, if after
870 * this operation the audio output fifo contains less than 6 frames,
871 * it would mean that we had not enough room to store the 6 frames :-P */
872 while ( (((p_adec->p_aout_fifo->l_end_frame + 6) - p_adec->p_aout_fifo->l_start_frame) & AOUT_FIFO_SIZE) < 6 ) /* XXX?? */
874 vlc_cond_wait( &p_adec->p_aout_fifo->data_wait, &p_adec->p_aout_fifo->data_lock );
876 if ( DECODER_FIFO_START(p_adec->fifo)->b_has_pts )
878 p_adec->p_aout_fifo->date[p_adec->p_aout_fifo->l_end_frame] = DECODER_FIFO_START(p_adec->fifo)->i_pts;
879 DECODER_FIFO_START(p_adec->fifo)->b_has_pts = 0;
883 p_adec->p_aout_fifo->date[p_adec->p_aout_fifo->l_end_frame] = LAST_MDATE;
885 vlc_mutex_unlock( &p_adec->p_aout_fifo->data_lock );
887 /* Decoding the frames */
888 if ( adec_Layer2_Stereo(p_adec) )
890 vlc_mutex_lock( &p_adec->p_aout_fifo->data_lock );
893 p_adec->p_aout_fifo->l_end_frame = (p_adec->p_aout_fifo->l_end_frame + 1) & AOUT_FIFO_SIZE;
896 p_adec->p_aout_fifo->date[p_adec->p_aout_fifo->l_end_frame] = LAST_MDATE;
897 p_adec->p_aout_fifo->l_end_frame = (p_adec->p_aout_fifo->l_end_frame + 1) & AOUT_FIFO_SIZE;
900 p_adec->p_aout_fifo->date[p_adec->p_aout_fifo->l_end_frame] = LAST_MDATE;
901 p_adec->p_aout_fifo->l_end_frame = (p_adec->p_aout_fifo->l_end_frame + 1) & AOUT_FIFO_SIZE;
904 p_adec->p_aout_fifo->date[p_adec->p_aout_fifo->l_end_frame] = LAST_MDATE;
905 p_adec->p_aout_fifo->l_end_frame = (p_adec->p_aout_fifo->l_end_frame + 1) & AOUT_FIFO_SIZE;
908 p_adec->p_aout_fifo->date[p_adec->p_aout_fifo->l_end_frame] = LAST_MDATE;
909 p_adec->p_aout_fifo->l_end_frame = (p_adec->p_aout_fifo->l_end_frame + 1) & AOUT_FIFO_SIZE;
912 p_adec->p_aout_fifo->date[p_adec->p_aout_fifo->l_end_frame] = LAST_MDATE;
913 p_adec->p_aout_fifo->l_end_frame = (p_adec->p_aout_fifo->l_end_frame + 1) & AOUT_FIFO_SIZE;
915 vlc_cond_signal( &p_adec->p_aout_fifo->data_wait );
917 vlc_mutex_unlock( &p_adec->p_aout_fifo->data_lock );
924 if ( (p_adec->bit_stream.fifo.buffer & ADEC_HEADER_MODE_MASK) == ADEC_HEADER_MODE_MASK )
926 adec_Layer1_Mono( p_adec );
930 adec_Layer1_Stereo( p_adec );
935 intf_DbgMsg("adec debug: layer == %i (unknown)\n",
936 (p_adec->bit_stream.fifo.buffer & ADEC_HEADER_LAYER_MASK) >> ADEC_HEADER_LAYER_SHIFT);
937 p_adec->bit_stream.fifo.buffer = 0;
938 p_adec->bit_stream.fifo.i_available = 0;
941 FindHeader( p_adec );
944 /* If b_error is set, the audio decoder thread enters the error loop */
945 if ( p_adec->b_error )
947 ErrorThread( p_adec );
950 /* End of the audio decoder thread */
954 /*****************************************************************************
955 * ErrorThread : audio decoder's RunThread() error loop
956 *****************************************************************************
957 * This function is called when an error occured during thread main's loop. The
958 * thread can still receive feed, but must be ready to terminate as soon as
960 *****************************************************************************/
961 static void ErrorThread( adec_thread_t *p_adec )
963 /* We take the lock, because we are going to read/write the start/end
964 * indexes of the decoder fifo */
965 vlc_mutex_lock( &p_adec->fifo.data_lock );
967 /* Wait until a `die' order is sent */
968 while( !p_adec->b_die )
970 /* Trash all received PES packets */
971 while( !DECODER_FIFO_ISEMPTY(p_adec->fifo) )
973 input_NetlistFreePES( p_adec->bit_stream.p_input, DECODER_FIFO_START(p_adec->fifo) );
974 DECODER_FIFO_INCSTART( p_adec->fifo );
977 /* Waiting for the input thread to put new PES packets in the fifo */
978 vlc_cond_wait( &p_adec->fifo.data_wait, &p_adec->fifo.data_lock );
981 /* We can release the lock before leaving */
982 vlc_mutex_unlock( &p_adec->fifo.data_lock );
985 /*****************************************************************************
986 * EndThread : audio decoder thread destruction
987 *****************************************************************************
988 * This function is called when the thread ends after a sucessfull
990 *****************************************************************************/
991 static void EndThread( adec_thread_t *p_adec )
993 intf_DbgMsg("adec debug: destroying audio decoder thread %p\n", p_adec);
995 /* If the audio output fifo was created, we destroy it */
996 if ( p_adec->p_aout_fifo != NULL )
998 aout_DestroyFifo( p_adec->p_aout_fifo );
1000 /* Make sure the output thread leaves the NextFrame() function */
1001 vlc_mutex_lock( &(p_adec->p_aout_fifo->data_lock) );
1002 vlc_cond_signal( &(p_adec->p_aout_fifo->data_wait) );
1003 vlc_mutex_unlock( &(p_adec->p_aout_fifo->data_lock) );
1005 /* Destroy descriptor */
1008 intf_DbgMsg("adec debug: audio decoder thread %p destroyed\n", p_adec);