decoder/pcm: always supply host byte order samples
Don't use audio_format.reverse_endian.
This commit is contained in:
parent
62218fe59d
commit
7ebf8e66c9
@ -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 @@
|
|||||||
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)
|
|||||||
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)
|
||||||
|
Loading…
Reference in New Issue
Block a user