decoder/flac: moved code to flac_pcm.c
This commit is contained in:
		| @@ -84,6 +84,7 @@ mpd_headers = \ | ||||
| 	src/decoder_list.h \ | ||||
| 	src/decoder_print.h \ | ||||
| 	src/decoder/flac_metadata.h \ | ||||
| 	src/decoder/flac_pcm.h \ | ||||
| 	src/decoder/_flac_common.h \ | ||||
| 	src/decoder/_ogg_common.h \ | ||||
| 	src/input_plugin.h \ | ||||
| @@ -442,6 +443,7 @@ endif | ||||
| if HAVE_FLAC_COMMON | ||||
| DECODER_SRC += \ | ||||
| 	src/decoder/flac_metadata.c \ | ||||
| 	src/decoder/flac_pcm.c \ | ||||
| 	src/decoder/_flac_common.c | ||||
| endif | ||||
|  | ||||
|   | ||||
| @@ -23,6 +23,7 @@ | ||||
|  | ||||
| #include "_flac_common.h" | ||||
| #include "flac_metadata.h" | ||||
| #include "flac_pcm.h" | ||||
|  | ||||
| #include <glib.h> | ||||
|  | ||||
| @@ -102,87 +103,6 @@ void flac_error_common_cb(const char *plugin, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| static void flac_convert_stereo16(int16_t *dest, | ||||
| 				  const FLAC__int32 * const buf[], | ||||
| 				  unsigned int position, unsigned int end) | ||||
| { | ||||
| 	for (; position < end; ++position) { | ||||
| 		*dest++ = buf[0][position]; | ||||
| 		*dest++ = buf[1][position]; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| static void | ||||
| flac_convert_16(int16_t *dest, | ||||
| 		unsigned int num_channels, | ||||
| 		const FLAC__int32 * const buf[], | ||||
| 		unsigned int position, unsigned int end) | ||||
| { | ||||
| 	unsigned int c_chan; | ||||
|  | ||||
| 	for (; position < end; ++position) | ||||
| 		for (c_chan = 0; c_chan < num_channels; c_chan++) | ||||
| 			*dest++ = buf[c_chan][position]; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Note: this function also handles 24 bit files! | ||||
|  */ | ||||
| static void | ||||
| flac_convert_32(int32_t *dest, | ||||
| 		unsigned int num_channels, | ||||
| 		const FLAC__int32 * const buf[], | ||||
| 		unsigned int position, unsigned int end) | ||||
| { | ||||
| 	unsigned int c_chan; | ||||
|  | ||||
| 	for (; position < end; ++position) | ||||
| 		for (c_chan = 0; c_chan < num_channels; c_chan++) | ||||
| 			*dest++ = buf[c_chan][position]; | ||||
| } | ||||
|  | ||||
| static void | ||||
| flac_convert_8(int8_t *dest, | ||||
| 	       unsigned int num_channels, | ||||
| 	       const FLAC__int32 * const buf[], | ||||
| 	       unsigned int position, unsigned int end) | ||||
| { | ||||
| 	unsigned int c_chan; | ||||
|  | ||||
| 	for (; position < end; ++position) | ||||
| 		for (c_chan = 0; c_chan < num_channels; c_chan++) | ||||
| 			*dest++ = buf[c_chan][position]; | ||||
| } | ||||
|  | ||||
| static void | ||||
| flac_convert(void *dest, | ||||
| 	     unsigned int num_channels, unsigned sample_format, | ||||
| 	     const FLAC__int32 *const buf[], | ||||
| 	     unsigned int position, unsigned int end) | ||||
| { | ||||
| 	switch (sample_format) { | ||||
| 	case 16: | ||||
| 		if (num_channels == 2) | ||||
| 			flac_convert_stereo16((int16_t*)dest, buf, | ||||
| 					      position, end); | ||||
| 		else | ||||
| 			flac_convert_16((int16_t*)dest, num_channels, buf, | ||||
| 					position, end); | ||||
| 		break; | ||||
|  | ||||
| 	case 24: | ||||
| 	case 32: | ||||
| 		flac_convert_32((int32_t*)dest, num_channels, buf, | ||||
| 				position, end); | ||||
| 		break; | ||||
|  | ||||
| 	case 8: | ||||
| 		flac_convert_8((int8_t*)dest, num_channels, buf, | ||||
| 			       position, end); | ||||
| 		break; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| FLAC__StreamDecoderWriteStatus | ||||
| flac_common_write(struct flac_data *data, const FLAC__Frame * frame, | ||||
| 		  const FLAC__int32 *const buf[]) | ||||
|   | ||||
							
								
								
									
										101
									
								
								src/decoder/flac_pcm.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								src/decoder/flac_pcm.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,101 @@ | ||||
| /* | ||||
|  * Copyright (C) 2003-2009 The Music Player Daemon Project | ||||
|  * http://www.musicpd.org | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation; either version 2 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * This program 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 General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License along | ||||
|  * with this program; if not, write to the Free Software Foundation, Inc., | ||||
|  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||||
|  */ | ||||
|  | ||||
| #include "flac_pcm.h" | ||||
|  | ||||
| static void flac_convert_stereo16(int16_t *dest, | ||||
| 				  const FLAC__int32 * const buf[], | ||||
| 				  unsigned int position, unsigned int end) | ||||
| { | ||||
| 	for (; position < end; ++position) { | ||||
| 		*dest++ = buf[0][position]; | ||||
| 		*dest++ = buf[1][position]; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| static void | ||||
| flac_convert_16(int16_t *dest, | ||||
| 		unsigned int num_channels, | ||||
| 		const FLAC__int32 * const buf[], | ||||
| 		unsigned int position, unsigned int end) | ||||
| { | ||||
| 	unsigned int c_chan; | ||||
|  | ||||
| 	for (; position < end; ++position) | ||||
| 		for (c_chan = 0; c_chan < num_channels; c_chan++) | ||||
| 			*dest++ = buf[c_chan][position]; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Note: this function also handles 24 bit files! | ||||
|  */ | ||||
| static void | ||||
| flac_convert_32(int32_t *dest, | ||||
| 		unsigned int num_channels, | ||||
| 		const FLAC__int32 * const buf[], | ||||
| 		unsigned int position, unsigned int end) | ||||
| { | ||||
| 	unsigned int c_chan; | ||||
|  | ||||
| 	for (; position < end; ++position) | ||||
| 		for (c_chan = 0; c_chan < num_channels; c_chan++) | ||||
| 			*dest++ = buf[c_chan][position]; | ||||
| } | ||||
|  | ||||
| static void | ||||
| flac_convert_8(int8_t *dest, | ||||
| 	       unsigned int num_channels, | ||||
| 	       const FLAC__int32 * const buf[], | ||||
| 	       unsigned int position, unsigned int end) | ||||
| { | ||||
| 	unsigned int c_chan; | ||||
|  | ||||
| 	for (; position < end; ++position) | ||||
| 		for (c_chan = 0; c_chan < num_channels; c_chan++) | ||||
| 			*dest++ = buf[c_chan][position]; | ||||
| } | ||||
|  | ||||
| void | ||||
| flac_convert(void *dest, | ||||
| 	     unsigned int num_channels, unsigned sample_format, | ||||
| 	     const FLAC__int32 *const buf[], | ||||
| 	     unsigned int position, unsigned int end) | ||||
| { | ||||
| 	switch (sample_format) { | ||||
| 	case 16: | ||||
| 		if (num_channels == 2) | ||||
| 			flac_convert_stereo16((int16_t*)dest, buf, | ||||
| 					      position, end); | ||||
| 		else | ||||
| 			flac_convert_16((int16_t*)dest, num_channels, buf, | ||||
| 					position, end); | ||||
| 		break; | ||||
|  | ||||
| 	case 24: | ||||
| 	case 32: | ||||
| 		flac_convert_32((int32_t*)dest, num_channels, buf, | ||||
| 				position, end); | ||||
| 		break; | ||||
|  | ||||
| 	case 8: | ||||
| 		flac_convert_8((int8_t*)dest, num_channels, buf, | ||||
| 			       position, end); | ||||
| 		break; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										31
									
								
								src/decoder/flac_pcm.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								src/decoder/flac_pcm.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| /* | ||||
|  * Copyright (C) 2003-2009 The Music Player Daemon Project | ||||
|  * http://www.musicpd.org | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation; either version 2 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * This program 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 General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License along | ||||
|  * with this program; if not, write to the Free Software Foundation, Inc., | ||||
|  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||||
|  */ | ||||
|  | ||||
| #ifndef MPD_FLAC_PCM_H | ||||
| #define MPD_FLAC_PCM_H | ||||
|  | ||||
| #include <FLAC/ordinals.h> | ||||
|  | ||||
| void | ||||
| flac_convert(void *dest, | ||||
| 	     unsigned int num_channels, unsigned sample_format, | ||||
| 	     const FLAC__int32 *const buf[], | ||||
| 	     unsigned int position, unsigned int end); | ||||
|  | ||||
| #endif | ||||
		Reference in New Issue
	
	Block a user
	 Max Kellermann
					Max Kellermann