aboutsummaryrefslogtreecommitdiff
path: root/src/pcm_export.c
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2012-04-23 21:36:50 +0200
committerMax Kellermann <max@duempel.org>2012-04-23 21:54:09 +0200
commitdf1c5ce3145253fa3cd0611cefac11ee6f85a063 (patch)
tree8840796e1d96cc4c67672f10da546ad4bea9df59 /src/pcm_export.c
parenta0e4b6e26683903065102e5f5b4035eddf4a3a60 (diff)
pcm_export: add _frame_size()
Move code from the ALSA output plugin.
Diffstat (limited to 'src/pcm_export.c')
-rw-r--r--src/pcm_export.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/pcm_export.c b/src/pcm_export.c
index e586b51d..824b41b1 100644
--- a/src/pcm_export.c
+++ b/src/pcm_export.c
@@ -70,6 +70,27 @@ pcm_export_open(struct pcm_export_state *state,
}
}
+size_t
+pcm_export_frame_size(const struct pcm_export_state *state,
+ const struct audio_format *audio_format)
+{
+ assert(state != NULL);
+ assert(audio_format != NULL);
+
+ if (state->pack24)
+ /* packed 24 bit samples (3 bytes per sample) */
+ return audio_format->channels * 3;
+
+ if (state->dsd_usb)
+ /* the DSD-over-USB draft says that DSD 1-bit samples
+ are enclosed within 24 bit samples, and MPD's
+ representation of 24 bit is padded to 32 bit (4
+ bytes per sample) */
+ return audio_format->channels * 4;
+
+ return audio_format_frame_size(audio_format);
+}
+
const void *
pcm_export(struct pcm_export_state *state, const void *data, size_t size,
size_t *dest_size_r)