Commit 7ebf8e66 authored by Max Kellermann's avatar Max Kellermann

decoder/pcm: always supply host byte order samples

Don't use audio_format.reverse_endian.
parent 62218fe5
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include "config.h" #include "config.h"
#include "decoder/pcm_decoder_plugin.h" #include "decoder/pcm_decoder_plugin.h"
#include "decoder_api.h" #include "decoder_api.h"
#include "util/byte_reverse.h"
#include <glib.h> #include <glib.h>
#include <unistd.h> #include <unistd.h>
...@@ -31,35 +32,25 @@ ...@@ -31,35 +32,25 @@
static void static void
pcm_stream_decode(struct decoder *decoder, struct input_stream *is) pcm_stream_decode(struct decoder *decoder, struct input_stream *is)
{ {
static const struct audio_format host_audio_format = { static const struct audio_format audio_format = {
.sample_rate = 44100, .sample_rate = 44100,
.format = SAMPLE_FORMAT_S16, .format = SAMPLE_FORMAT_S16,
.channels = 2, .channels = 2,
}; };
static const struct audio_format reverse_audio_format = { const bool reverse_endian = is->mime != NULL &&
.sample_rate = 44100, strcmp(is->mime, "audio/x-mpd-cdda-pcm-reverse") == 0;
.format = SAMPLE_FORMAT_S16,
.channels = 2,
.reverse_endian = true,
};
const struct audio_format *audio_format =
(is->mime == NULL ||
strcmp(is->mime, "audio/x-mpd-cdda-pcm-reverse") != 0)
? &host_audio_format
: &reverse_audio_format;
GError *error = NULL; GError *error = NULL;
enum decoder_command cmd; enum decoder_command cmd;
double time_to_size = audio_format_time_to_size(audio_format); double time_to_size = audio_format_time_to_size(&audio_format);
float total_time = -1; float total_time = -1;
if (is->size >= 0) if (is->size >= 0)
total_time = is->size / time_to_size; total_time = is->size / time_to_size;
decoder_initialized(decoder, audio_format, is->seekable, total_time); decoder_initialized(decoder, &audio_format, is->seekable, total_time);
do { do {
char buffer[4096]; char buffer[4096];
...@@ -70,6 +61,12 @@ pcm_stream_decode(struct decoder *decoder, struct input_stream *is) ...@@ -70,6 +61,12 @@ pcm_stream_decode(struct decoder *decoder, struct input_stream *is)
if (nbytes == 0 && input_stream_lock_eof(is)) if (nbytes == 0 && input_stream_lock_eof(is))
break; break;
if (reverse_endian)
/* make sure we deliver samples in host byte order */
reverse_bytes_16((uint16_t *)buffer,
(uint16_t *)buffer,
(uint16_t *)(buffer + nbytes));
cmd = nbytes > 0 cmd = nbytes > 0
? decoder_data(decoder, is, ? decoder_data(decoder, is,
buffer, nbytes, 0) buffer, nbytes, 0)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment