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_list.h \ | ||||||
| 	src/decoder_print.h \ | 	src/decoder_print.h \ | ||||||
| 	src/decoder/flac_metadata.h \ | 	src/decoder/flac_metadata.h \ | ||||||
|  | 	src/decoder/flac_pcm.h \ | ||||||
| 	src/decoder/_flac_common.h \ | 	src/decoder/_flac_common.h \ | ||||||
| 	src/decoder/_ogg_common.h \ | 	src/decoder/_ogg_common.h \ | ||||||
| 	src/input_plugin.h \ | 	src/input_plugin.h \ | ||||||
| @@ -442,6 +443,7 @@ endif | |||||||
| if HAVE_FLAC_COMMON | if HAVE_FLAC_COMMON | ||||||
| DECODER_SRC += \ | DECODER_SRC += \ | ||||||
| 	src/decoder/flac_metadata.c \ | 	src/decoder/flac_metadata.c \ | ||||||
|  | 	src/decoder/flac_pcm.c \ | ||||||
| 	src/decoder/_flac_common.c | 	src/decoder/_flac_common.c | ||||||
| endif | endif | ||||||
|  |  | ||||||
|   | |||||||
| @@ -23,6 +23,7 @@ | |||||||
|  |  | ||||||
| #include "_flac_common.h" | #include "_flac_common.h" | ||||||
| #include "flac_metadata.h" | #include "flac_metadata.h" | ||||||
|  | #include "flac_pcm.h" | ||||||
|  |  | ||||||
| #include <glib.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__StreamDecoderWriteStatus | ||||||
| flac_common_write(struct flac_data *data, const FLAC__Frame * frame, | flac_common_write(struct flac_data *data, const FLAC__Frame * frame, | ||||||
| 		  const FLAC__int32 *const buf[]) | 		  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