wavpack: renamed variables and modified coding style slightly
This commit is contained in:
		 László Áshin
					László Áshin
				
			
				
					committed by
					
						 Max Kellermann
						Max Kellermann
					
				
			
			
				
	
			
			
			 Max Kellermann
						Max Kellermann
					
				
			
						parent
						
							7b7340f703
						
					
				
				
					commit
					ed6f60460d
				
			| @@ -46,13 +46,19 @@ static struct { | |||||||
| 	{ "disc", TAG_ITEM_DISC }, | 	{ "disc", TAG_ITEM_DISC }, | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | /** A pointer type for format converter function. */ | ||||||
|  | typedef void (*format_samples_t)( | ||||||
|  | 	int bytes_per_sample, | ||||||
|  | 	void *buffer, uint32_t count | ||||||
|  | ); | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  * This function has been borrowed from the tiny player found on |  * This function has been borrowed from the tiny player found on | ||||||
|  * wavpack.com. Modifications were required because mpd only handles |  * wavpack.com. Modifications were required because mpd only handles | ||||||
|  * max 24-bit samples. |  * max 24-bit samples. | ||||||
|  */ |  */ | ||||||
| static void | static void | ||||||
| format_samples_int(int bytes_per_sample, void *buffer, uint32_t samcnt) | format_samples_int(int bytes_per_sample, void *buffer, uint32_t count) | ||||||
| { | { | ||||||
| 	int32_t *src = buffer; | 	int32_t *src = buffer; | ||||||
|  |  | ||||||
| @@ -68,7 +74,7 @@ format_samples_int(int bytes_per_sample, void *buffer, uint32_t samcnt) | |||||||
| 		assert(sizeof(uchar) <= sizeof(uint32_t)); | 		assert(sizeof(uchar) <= sizeof(uint32_t)); | ||||||
|  |  | ||||||
| 		/* pass through and align 8-bit samples */ | 		/* pass through and align 8-bit samples */ | ||||||
| 		while (samcnt--) { | 		while (count--) { | ||||||
| 			*dst++ = *src++; | 			*dst++ = *src++; | ||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
| @@ -78,7 +84,7 @@ format_samples_int(int bytes_per_sample, void *buffer, uint32_t samcnt) | |||||||
| 		assert(sizeof(uint16_t) <= sizeof(uint32_t)); | 		assert(sizeof(uint16_t) <= sizeof(uint32_t)); | ||||||
|  |  | ||||||
| 		/* pass through and align 16-bit samples */ | 		/* pass through and align 16-bit samples */ | ||||||
| 		while (samcnt--) { | 		while (count--) { | ||||||
| 			*dst++ = *src++; | 			*dst++ = *src++; | ||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
| @@ -91,7 +97,7 @@ format_samples_int(int bytes_per_sample, void *buffer, uint32_t samcnt) | |||||||
| 		assert(sizeof(uint32_t) <= sizeof(uint32_t)); | 		assert(sizeof(uint32_t) <= sizeof(uint32_t)); | ||||||
|  |  | ||||||
| 		/* downsample to 24-bit */ | 		/* downsample to 24-bit */ | ||||||
| 		while (samcnt--) { | 		while (count--) { | ||||||
| 			*dst++ = *src++ >> 8; | 			*dst++ = *src++ >> 8; | ||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
| @@ -104,13 +110,13 @@ format_samples_int(int bytes_per_sample, void *buffer, uint32_t samcnt) | |||||||
|  */ |  */ | ||||||
| static void | static void | ||||||
| format_samples_float(mpd_unused int bytes_per_sample, void *buffer, | format_samples_float(mpd_unused int bytes_per_sample, void *buffer, | ||||||
| 		     uint32_t samcnt) | 		     uint32_t count) | ||||||
| { | { | ||||||
| 	int32_t *dst = buffer; | 	int32_t *dst = buffer; | ||||||
| 	float *src = buffer; | 	float *src = buffer; | ||||||
| 	assert(sizeof(int32_t) <= sizeof(float)); | 	assert(sizeof(int32_t) <= sizeof(float)); | ||||||
|  |  | ||||||
| 	while (samcnt--) { | 	while (count--) { | ||||||
| 		*dst++ = (int32_t)(*src++ + 0.5f); | 		*dst++ = (int32_t)(*src++ + 0.5f); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| @@ -120,18 +126,16 @@ format_samples_float(mpd_unused int bytes_per_sample, void *buffer, | |||||||
|  * Requires an already opened WavpackContext. |  * Requires an already opened WavpackContext. | ||||||
|  */ |  */ | ||||||
| static void | static void | ||||||
| wavpack_decode(struct decoder * decoder, WavpackContext *wpc, bool canseek, | wavpack_decode(struct decoder *decoder, WavpackContext *wpc, bool can_seek, | ||||||
| 	       struct replay_gain_info *replayGainInfo) | 	       struct replay_gain_info *replay_gain_info) | ||||||
| { | { | ||||||
| 	struct audio_format audio_format; | 	struct audio_format audio_format; | ||||||
| 	void (*format_samples)(int bytes_per_sample, | 	format_samples_t format_samples; | ||||||
| 			       void *buffer, uint32_t samcnt); |  | ||||||
| 	char chunk[CHUNK_SIZE]; | 	char chunk[CHUNK_SIZE]; | ||||||
| 	float file_time; | 	int samples_requested, samples_got; | ||||||
| 	int samplesreq, samplesgot; | 	float total_time, current_time; | ||||||
| 	int allsamples; | 	int bytes_per_sample, output_sample_size; | ||||||
| 	int position, outsamplesize; | 	int position; | ||||||
| 	int bytes_per_sample; |  | ||||||
|  |  | ||||||
| 	audio_format.sample_rate = WavpackGetSampleRate(wpc); | 	audio_format.sample_rate = WavpackGetSampleRate(wpc); | ||||||
| 	audio_format.channels = WavpackGetReducedChannels(wpc); | 	audio_format.channels = WavpackGetReducedChannels(wpc); | ||||||
| @@ -150,26 +154,30 @@ wavpack_decode(struct decoder * decoder, WavpackContext *wpc, bool canseek, | |||||||
| 		format_samples = format_samples_int; | 		format_samples = format_samples_int; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	allsamples = WavpackGetNumSamples(wpc); | 	total_time = WavpackGetNumSamples(wpc); | ||||||
|  | 	total_time /= audio_format.sample_rate; | ||||||
| 	bytes_per_sample = WavpackGetBytesPerSample(wpc); | 	bytes_per_sample = WavpackGetBytesPerSample(wpc); | ||||||
|  |  | ||||||
| 	outsamplesize = audio_format_frame_size(&audio_format); | 	output_sample_size = bytes_per_sample; | ||||||
|  | 	if (output_sample_size == 3) { | ||||||
|  | 		output_sample_size = 4; | ||||||
|  | 	} | ||||||
|  | 	output_sample_size *= audio_format.channels; | ||||||
|  |  | ||||||
| 	/* wavpack gives us all kind of samples in a 32-bit space */ | 	/* wavpack gives us all kind of samples in a 32-bit space */ | ||||||
| 	samplesreq = sizeof(chunk) / (4 * audio_format.channels); | 	samples_requested = sizeof(chunk) / (4 * audio_format.channels); | ||||||
|  |  | ||||||
| 	decoder_initialized(decoder, &audio_format, canseek, | 	decoder_initialized(decoder, &audio_format, can_seek, total_time); | ||||||
| 			    (float)allsamples / audio_format.sample_rate); |  | ||||||
|  |  | ||||||
| 	position = 0; | 	position = 0; | ||||||
|  |  | ||||||
| 	do { | 	do { | ||||||
| 		if (decoder_get_command(decoder) == DECODE_COMMAND_SEEK) { | 		if (decoder_get_command(decoder) == DECODE_COMMAND_SEEK) { | ||||||
| 			if (canseek) { | 			if (can_seek) { | ||||||
| 				int where; | 				int where; | ||||||
|  |  | ||||||
| 				where = decoder_seek_where(decoder) * | 				where = decoder_seek_where(decoder); | ||||||
| 					audio_format.sample_rate; | 				where *= audio_format.sample_rate; | ||||||
| 				if (WavpackSeekSample(wpc, where)) { | 				if (WavpackSeekSample(wpc, where)) { | ||||||
| 					position = where; | 					position = where; | ||||||
| 					decoder_command_finished(decoder); | 					decoder_command_finished(decoder); | ||||||
| @@ -185,23 +193,29 @@ wavpack_decode(struct decoder * decoder, WavpackContext *wpc, bool canseek, | |||||||
| 			break; | 			break; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		samplesgot = WavpackUnpackSamples(wpc, | 		samples_got = WavpackUnpackSamples( | ||||||
| 		                                  (int32_t *)chunk, samplesreq); | 			wpc, (int32_t *)chunk, samples_requested | ||||||
| 		if (samplesgot > 0) { | 		); | ||||||
|  | 		if (samples_got > 0) { | ||||||
| 			int bitrate = (int)(WavpackGetInstantBitrate(wpc) / | 			int bitrate = (int)(WavpackGetInstantBitrate(wpc) / | ||||||
| 			              1000 + 0.5); | 			              1000 + 0.5); | ||||||
| 			position += samplesgot; | 			position += samples_got; | ||||||
| 			file_time = (float)position / audio_format.sample_rate; | 			current_time = position; | ||||||
|  | 			current_time /= audio_format.sample_rate; | ||||||
|  |  | ||||||
| 			format_samples(bytes_per_sample, chunk, | 			format_samples( | ||||||
| 			               samplesgot * audio_format.channels); | 				bytes_per_sample, chunk, | ||||||
|  | 				samples_got * audio_format.channels | ||||||
|  | 			); | ||||||
|  |  | ||||||
| 			decoder_data(decoder, NULL, chunk, | 			decoder_data( | ||||||
| 				     samplesgot * outsamplesize, | 				decoder, NULL, chunk, | ||||||
| 				     file_time, bitrate, | 				samples_got * output_sample_size, | ||||||
| 				     replayGainInfo); | 				current_time, bitrate, | ||||||
|  | 				replay_gain_info | ||||||
|  | 			); | ||||||
| 		} | 		} | ||||||
| 	} while (samplesgot == samplesreq); | 	} while (samples_got != samples_requested); | ||||||
| } | } | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -230,17 +244,22 @@ wavpack_replaygain(WavpackContext *wpc) | |||||||
|  |  | ||||||
| 	replay_gain_info = replay_gain_info_new(); | 	replay_gain_info = replay_gain_info_new(); | ||||||
|  |  | ||||||
| 	found = wavpack_tag_float(wpc, "replaygain_track_gain", | 	found |= wavpack_tag_float( | ||||||
| 				  &replay_gain_info->tuples[REPLAY_GAIN_TRACK].gain) | 		wpc, "replaygain_track_gain", | ||||||
| 		|| | 		&replay_gain_info->tuples[REPLAY_GAIN_TRACK].gain | ||||||
| 		wavpack_tag_float(wpc, "replaygain_track_peak", | 	); | ||||||
| 				  &replay_gain_info->tuples[REPLAY_GAIN_TRACK].peak) | 	found |= wavpack_tag_float( | ||||||
| 		|| | 		wpc, "replaygain_track_peak", | ||||||
| 		wavpack_tag_float(wpc, "replaygain_album_gain", | 		&replay_gain_info->tuples[REPLAY_GAIN_TRACK].peak | ||||||
| 				  &replay_gain_info->tuples[REPLAY_GAIN_ALBUM].gain) | 	); | ||||||
| 		|| | 	found |= wavpack_tag_float( | ||||||
| 		wavpack_tag_float(wpc, "replaygain_album_peak", | 		wpc, "replaygain_album_gain", | ||||||
| 				  &replay_gain_info->tuples[REPLAY_GAIN_ALBUM].peak); | 		&replay_gain_info->tuples[REPLAY_GAIN_ALBUM].gain | ||||||
|  | 	); | ||||||
|  | 	found |= wavpack_tag_float( | ||||||
|  | 		wpc, "replaygain_album_peak", | ||||||
|  | 		&replay_gain_info->tuples[REPLAY_GAIN_ALBUM].peak | ||||||
|  | 	); | ||||||
|  |  | ||||||
| 	if (found) { | 	if (found) { | ||||||
| 		return replay_gain_info; | 		return replay_gain_info; | ||||||
| @@ -261,38 +280,39 @@ wavpack_tagdup(const char *fname) | |||||||
| 	struct tag *tag; | 	struct tag *tag; | ||||||
| 	char error[ERRORLEN]; | 	char error[ERRORLEN]; | ||||||
| 	char *s; | 	char *s; | ||||||
| 	int ssize; | 	int size, allocated_size; | ||||||
| 	int j; |  | ||||||
|  |  | ||||||
| 	wpc = WavpackOpenFileInput(fname, error, OPEN_TAGS, 0); | 	wpc = WavpackOpenFileInput(fname, error, OPEN_TAGS, 0); | ||||||
| 	if (wpc == NULL) { | 	if (wpc == NULL) { | ||||||
| 		g_warning("failed to open WavPack file \"%s\": %s\n", | 		g_warning( | ||||||
| 			  fname, error); | 			"failed to open WavPack file \"%s\": %s\n", | ||||||
|  | 			fname, error | ||||||
|  | 		); | ||||||
| 		return NULL; | 		return NULL; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	tag = tag_new(); | 	tag = tag_new(); | ||||||
| 	tag->time = | 	tag->time = WavpackGetNumSamples(wpc); | ||||||
| 		(float)WavpackGetNumSamples(wpc) / WavpackGetSampleRate(wpc); | 	tag->time /= WavpackGetSampleRate(wpc); | ||||||
|  |  | ||||||
| 	ssize = 0; | 	allocated_size = 0; | ||||||
| 	s = NULL; | 	s = NULL; | ||||||
|  |  | ||||||
| 	for (unsigned i = 0; i < G_N_ELEMENTS(tagtypes); ++i) { | 	for (unsigned i = 0; i < G_N_ELEMENTS(tagtypes); ++i) { | ||||||
| 		j = WavpackGetTagItem(wpc, tagtypes[i].name, NULL, 0); | 		size = WavpackGetTagItem(wpc, tagtypes[i].name, NULL, 0); | ||||||
| 		if (j > 0) { | 		if (size > 0) { | ||||||
| 			++j; | 			++size; /* EOS */ | ||||||
|  |  | ||||||
| 			if (s == NULL) { | 			if (s == NULL) { | ||||||
| 				s = g_malloc(j); | 				s = g_malloc(size); | ||||||
| 				ssize = j; | 				allocated_size = size; | ||||||
| 			} else if (j > ssize) { | 			} else if (size > allocated_size) { | ||||||
| 				char *t = (char *)g_realloc(s, j); | 				char *t = (char *)g_realloc(s, size); | ||||||
| 				ssize = j; | 				allocated_size = size; | ||||||
| 				s = t; | 				s = t; | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
| 			WavpackGetTagItem(wpc, tagtypes[i].name, s, j); | 			WavpackGetTagItem(wpc, tagtypes[i].name, s, size); | ||||||
| 			tag_add_item(tag, tagtypes[i].type, s); | 			tag_add_item(tag, tagtypes[i].type, s); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @@ -342,8 +362,9 @@ wavpack_input_read_bytes(void *id, void *data, int32_t bcount) | |||||||
| 	/* wavpack fails if we return a partial read, so we just wait | 	/* wavpack fails if we return a partial read, so we just wait | ||||||
| 	   until the buffer is full */ | 	   until the buffer is full */ | ||||||
| 	while (bcount > 0) { | 	while (bcount > 0) { | ||||||
| 		size_t nbytes = decoder_read(wpin(id)->decoder, wpin(id)->is, | 		size_t nbytes = decoder_read( | ||||||
| 					     buf, bcount); | 			wpin(id)->decoder, wpin(id)->is, buf, bcount | ||||||
|  | 		); | ||||||
| 		if (nbytes == 0) { | 		if (nbytes == 0) { | ||||||
| 			/* EOF, error or a decoder command */ | 			/* EOF, error or a decoder command */ | ||||||
| 			break; | 			break; | ||||||
| @@ -450,8 +471,9 @@ wavpack_open_wvc(struct decoder *decoder, struct input_stream *is_wvc, | |||||||
| 	 * And we try to buffer in order to get know | 	 * And we try to buffer in order to get know | ||||||
| 	 * about a possible 404 error. | 	 * about a possible 404 error. | ||||||
| 	 */ | 	 */ | ||||||
| 	nbytes = decoder_read(decoder, is_wvc, | 	nbytes = decoder_read( | ||||||
| 			      &first_byte, sizeof(first_byte)); | 		decoder, is_wvc, &first_byte, sizeof(first_byte) | ||||||
|  | 	); | ||||||
| 	if (nbytes == 0) { | 	if (nbytes == 0) { | ||||||
| 		input_stream_close(is_wvc); | 		input_stream_close(is_wvc); | ||||||
| 		return false; | 		return false; | ||||||
| @@ -474,23 +496,24 @@ wavpack_streamdecode(struct decoder * decoder, struct input_stream *is) | |||||||
| 	struct input_stream is_wvc; | 	struct input_stream is_wvc; | ||||||
| 	int open_flags = OPEN_2CH_MAX | OPEN_NORMALIZE /*| OPEN_STREAMING*/; | 	int open_flags = OPEN_2CH_MAX | OPEN_NORMALIZE /*| OPEN_STREAMING*/; | ||||||
| 	struct wavpack_input isp, isp_wvc; | 	struct wavpack_input isp, isp_wvc; | ||||||
| 	bool canseek = is->seekable; | 	bool can_seek = is->seekable; | ||||||
|  |  | ||||||
| 	if (wavpack_open_wvc(decoder, &is_wvc, &isp_wvc)) { | 	if (wavpack_open_wvc(decoder, &is_wvc, &isp_wvc)) { | ||||||
| 		open_flags |= OPEN_WVC; | 		open_flags |= OPEN_WVC; | ||||||
| 		canseek &= is_wvc.seekable; | 		can_seek &= is_wvc.seekable; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	wavpack_input_init(&isp, decoder, is); | 	wavpack_input_init(&isp, decoder, is); | ||||||
| 	wpc = WavpackOpenFileInputEx(&mpd_is_reader, &isp, &isp_wvc, error, | 	wpc = WavpackOpenFileInputEx( | ||||||
| 				     open_flags, 23); | 		&mpd_is_reader, &isp, &isp_wvc, error, open_flags, 23 | ||||||
|  | 	); | ||||||
|  |  | ||||||
| 	if (wpc == NULL) { | 	if (wpc == NULL) { | ||||||
| 		g_warning("failed to open WavPack stream: %s\n", error); | 		g_warning("failed to open WavPack stream: %s\n", error); | ||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	wavpack_decode(decoder, wpc, canseek, NULL); | 	wavpack_decode(decoder, wpc, can_seek, NULL); | ||||||
|  |  | ||||||
| 	WavpackCloseFile(wpc); | 	WavpackCloseFile(wpc); | ||||||
| 	if (open_flags & OPEN_WVC) { | 	if (open_flags & OPEN_WVC) { | ||||||
| @@ -508,12 +531,15 @@ wavpack_filedecode(struct decoder *decoder, const char *fname) | |||||||
| 	WavpackContext *wpc; | 	WavpackContext *wpc; | ||||||
| 	struct replay_gain_info *replay_gain_info; | 	struct replay_gain_info *replay_gain_info; | ||||||
|  |  | ||||||
| 	wpc = WavpackOpenFileInput(fname, error, | 	wpc = WavpackOpenFileInput( | ||||||
| 	                           OPEN_TAGS | OPEN_WVC | | 		fname, error, | ||||||
| 	                           OPEN_2CH_MAX | OPEN_NORMALIZE, 23); | 		OPEN_TAGS | OPEN_WVC | OPEN_2CH_MAX | OPEN_NORMALIZE, 23 | ||||||
|  | 	); | ||||||
| 	if (wpc == NULL) { | 	if (wpc == NULL) { | ||||||
| 		g_warning("failed to open WavPack file \"%s\": %s\n", | 		g_warning( | ||||||
| 			  fname, error); | 			"failed to open WavPack file \"%s\": %s\n", | ||||||
|  | 			fname, error | ||||||
|  | 		); | ||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -528,8 +554,15 @@ wavpack_filedecode(struct decoder *decoder, const char *fname) | |||||||
| 	WavpackCloseFile(wpc); | 	WavpackCloseFile(wpc); | ||||||
| } | } | ||||||
|  |  | ||||||
| static char const *const wavpack_suffixes[] = { "wv", NULL }; | static char const *const wavpack_suffixes[] = { | ||||||
| static char const *const wavpack_mime_types[] = { "audio/x-wavpack", NULL }; | 	"wv", | ||||||
|  | 	NULL | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | static char const *const wavpack_mime_types[] = { | ||||||
|  | 	"audio/x-wavpack", | ||||||
|  | 	NULL | ||||||
|  | }; | ||||||
|  |  | ||||||
| const struct decoder_plugin wavpack_plugin = { | const struct decoder_plugin wavpack_plugin = { | ||||||
| 	.name = "wavpack", | 	.name = "wavpack", | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user