| 
									
										
										
										
											2007-11-02 06:40:42 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Musepack decoder | 
					
						
							|  |  |  |  * Copyright (c) 2006 Konstantin Shishkov | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This file is part of FFmpeg. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * FFmpeg is free software; you can redistribute it and/or | 
					
						
							|  |  |  |  * modify it under the terms of the GNU Lesser General Public | 
					
						
							|  |  |  |  * License as published by the Free Software Foundation; either | 
					
						
							|  |  |  |  * version 2.1 of the License, or (at your option) any later version. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * FFmpeg is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
					
						
							|  |  |  |  * Lesser General Public License for more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * You should have received a copy of the GNU Lesser General Public | 
					
						
							|  |  |  |  * License along with FFmpeg; if not, write to the Free Software | 
					
						
							|  |  |  |  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2010-04-20 14:45:34 +00:00
										 |  |  |  * @file | 
					
						
							|  |  |  |  * Musepack decoder | 
					
						
							| 
									
										
										
										
											2007-11-02 06:40:42 +00:00
										 |  |  |  * MPEG Audio Layer 1/2 -like codec with frames of 1152 samples | 
					
						
							|  |  |  |  * divided into 32 subbands. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-31 07:39:47 +00:00
										 |  |  | #ifndef AVCODEC_MPC_H
 | 
					
						
							|  |  |  | #define AVCODEC_MPC_H
 | 
					
						
							| 
									
										
										
										
											2007-11-02 06:40:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-08 16:37:57 +00:00
										 |  |  | #include "libavutil/lfg.h"
 | 
					
						
							| 
									
										
										
										
											2007-11-02 06:40:42 +00:00
										 |  |  | #include "avcodec.h"
 | 
					
						
							| 
									
										
										
										
											2009-04-13 16:20:26 +00:00
										 |  |  | #include "get_bits.h"
 | 
					
						
							| 
									
										
										
										
											2007-11-02 06:40:42 +00:00
										 |  |  | #include "dsputil.h"
 | 
					
						
							|  |  |  | #include "mpegaudio.h"
 | 
					
						
							| 
									
										
										
										
											2011-06-04 16:58:31 +02:00
										 |  |  | #include "mpegaudiodsp.h"
 | 
					
						
							| 
									
										
										
										
											2007-11-02 06:40:42 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define BANDS            32
 | 
					
						
							|  |  |  | #define SAMPLES_PER_BAND 36
 | 
					
						
							|  |  |  | #define MPC_FRAME_SIZE   (BANDS * SAMPLES_PER_BAND)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** Subband structure - hold all variables for each subband */ | 
					
						
							|  |  |  | typedef struct { | 
					
						
							|  |  |  |     int msf; ///< mid-stereo flag
 | 
					
						
							|  |  |  |     int res[2]; | 
					
						
							|  |  |  |     int scfi[2]; | 
					
						
							|  |  |  |     int scf_idx[2][3]; | 
					
						
							|  |  |  |     int Q[2]; | 
					
						
							|  |  |  | }Band; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct { | 
					
						
							| 
									
										
										
										
											2011-09-06 12:17:45 -04:00
										 |  |  |     AVFrame frame; | 
					
						
							| 
									
										
										
										
											2007-11-02 06:40:42 +00:00
										 |  |  |     DSPContext dsp; | 
					
						
							| 
									
										
										
										
											2011-05-16 16:52:01 +01:00
										 |  |  |     MPADSPContext mpadsp; | 
					
						
							| 
									
										
										
										
											2007-11-02 06:40:42 +00:00
										 |  |  |     GetBitContext gb; | 
					
						
							|  |  |  |     int IS, MSS, gapless; | 
					
						
							|  |  |  |     int lastframelen; | 
					
						
							|  |  |  |     int maxbands, last_max_band; | 
					
						
							|  |  |  |     int last_bits_used; | 
					
						
							|  |  |  |     int oldDSCF[2][BANDS]; | 
					
						
							|  |  |  |     Band bands[BANDS]; | 
					
						
							|  |  |  |     int Q[2][MPC_FRAME_SIZE]; | 
					
						
							|  |  |  |     int cur_frame, frames; | 
					
						
							|  |  |  |     uint8_t *bits; | 
					
						
							|  |  |  |     int buf_size; | 
					
						
							| 
									
										
										
										
											2009-03-08 16:37:57 +00:00
										 |  |  |     AVLFG rnd; | 
					
						
							| 
									
										
										
										
											2007-11-02 06:40:42 +00:00
										 |  |  |     int frames_to_skip; | 
					
						
							|  |  |  |     /* for synthesis */ | 
					
						
							| 
									
										
										
										
											2010-03-06 14:24:59 +00:00
										 |  |  |     DECLARE_ALIGNED(16, MPA_INT, synth_buf)[MPA_MAX_CHANNELS][512*2]; | 
					
						
							| 
									
										
										
										
											2007-11-02 06:40:42 +00:00
										 |  |  |     int synth_buf_offset[MPA_MAX_CHANNELS]; | 
					
						
							| 
									
										
										
										
											2010-03-06 14:24:59 +00:00
										 |  |  |     DECLARE_ALIGNED(16, int32_t, sb_samples)[MPA_MAX_CHANNELS][36][SBLIMIT]; | 
					
						
							| 
									
										
										
										
											2007-11-02 06:40:42 +00:00
										 |  |  | } MPCContext; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-30 18:38:25 +00:00
										 |  |  | void ff_mpc_init(void); | 
					
						
							| 
									
										
										
										
											2010-11-21 20:42:06 +00:00
										 |  |  | void ff_mpc_dequantize_and_synth(MPCContext *c, int maxband, void *dst, int channels); | 
					
						
							| 
									
										
										
										
											2007-11-02 06:40:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-31 07:39:47 +00:00
										 |  |  | #endif /* AVCODEC_MPC_H */
 |