aboutsummaryrefslogtreecommitdiff
path: root/src/pcm_export.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pcm_export.c')
-rw-r--r--src/pcm_export.c56
1 files changed, 6 insertions, 50 deletions
diff --git a/src/pcm_export.c b/src/pcm_export.c
index b430318e..b6773d4c 100644
--- a/src/pcm_export.c
+++ b/src/pcm_export.c
@@ -22,6 +22,8 @@
#include "pcm_pack.h"
#include "util/byte_reverse.h"
+#include <libavutil/samplefmt.h>
+
void
pcm_export_init(struct pcm_export_state *state)
{
@@ -35,23 +37,15 @@ void pcm_export_deinit(struct pcm_export_state *state)
pcm_buffer_deinit(&state->pack_buffer);
}
-void
-pcm_export_open(struct pcm_export_state *state,
- enum sample_format sample_format,
- bool shift8, bool pack, bool reverse_endian)
+void pcm_export_open(struct pcm_export_state *state,
+ enum AVSampleFormat sample_format,
+ bool pack, bool reverse_endian)
{
assert(audio_valid_sample_format(sample_format));
- state->shift8 = shift8 && sample_format == SAMPLE_FORMAT_S24_P32;
- state->pack24 = pack && sample_format == SAMPLE_FORMAT_S24_P32;
-
- assert(!state->shift8 || !state->pack24);
-
state->reverse_endian = 0;
if (reverse_endian) {
- size_t sample_size = state->pack24
- ? 3
- : sample_format_size(sample_format);
+ size_t sample_size = av_get_bytes_per_sample(sample_format);
assert(sample_size <= 0xff);
if (sample_size > 1)
@@ -66,10 +60,6 @@ pcm_export_frame_size(const struct pcm_export_state *state,
assert(state != NULL);
assert(audio_format != NULL);
- if (state->pack24)
- /* packed 24 bit samples (3 bytes per sample) */
- return audio_format->channels * 3;
-
return audio_format_frame_size(audio_format);
}
@@ -77,36 +67,6 @@ const void *
pcm_export(struct pcm_export_state *state, const void *data, size_t size,
size_t *dest_size_r)
{
- if (state->pack24) {
- assert(size % 4 == 0);
-
- const size_t num_samples = size / 4;
- const size_t dest_size = num_samples * 3;
-
- const uint8_t *src8 = data, *src_end8 = src8 + size;
- uint8_t *dest = pcm_buffer_get(&state->pack_buffer, dest_size);
- assert(dest != NULL);
-
- pcm_pack_24(dest, (const int32_t *)src8,
- (const int32_t *)src_end8);
-
- data = dest;
- size = dest_size;
- } else if (state->shift8) {
- assert(size % 4 == 0);
-
- const uint8_t *src8 = data, *src_end8 = src8 + size;
- const uint32_t *src = (const uint32_t *)src8;
- const uint32_t *const src_end = (const uint32_t *)src_end8;
-
- uint32_t *dest = pcm_buffer_get(&state->pack_buffer, size);
- data = dest;
-
- while (src < src_end)
- *dest++ = *src++ << 8;
- }
-
-
if (state->reverse_endian > 0) {
assert(state->reverse_endian >= 2);
@@ -126,9 +86,5 @@ pcm_export(struct pcm_export_state *state, const void *data, size_t size,
size_t
pcm_export_source_size(const struct pcm_export_state *state, size_t size)
{
- if (state->pack24)
- /* 32 bit to 24 bit conversion (4 to 3 bytes) */
- size = (size / 3) * 4;
-
return size;
}