summaryrefslogtreecommitdiff
path: root/src/lib/ffmpeg_decoder.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2014-03-08 01:48:04 +0000
committerCarl Hetherington <cth@carlh.net>2014-03-08 01:48:04 +0000
commit04bfeac6ccfe4e4c981a241f53138c765a0864a7 (patch)
treed4f57ca22ccbf1bcc4ad61532a3476ba6a6a426d /src/lib/ffmpeg_decoder.cc
parent9ea5d42439564f462d1aaa74e46c0f9656886818 (diff)
Support for unsigned 8-bit audio.
Diffstat (limited to 'src/lib/ffmpeg_decoder.cc')
-rw-r--r--src/lib/ffmpeg_decoder.cc17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/lib/ffmpeg_decoder.cc b/src/lib/ffmpeg_decoder.cc
index 16da64c60..347d8cc08 100644
--- a/src/lib/ffmpeg_decoder.cc
+++ b/src/lib/ffmpeg_decoder.cc
@@ -199,6 +199,23 @@ FFmpegDecoder::deinterleave_audio (uint8_t** data, int size)
shared_ptr<AudioBuffers> audio (new AudioBuffers (_ffmpeg_content->audio_channels(), frames));
switch (audio_sample_format()) {
+ case AV_SAMPLE_FMT_U8:
+ {
+ uint8_t* p = reinterpret_cast<uint8_t *> (data[0]);
+ int sample = 0;
+ int channel = 0;
+ for (int i = 0; i < total_samples; ++i) {
+ audio->data(channel)[sample] = float(*p++) / (1 << 23);
+
+ ++channel;
+ if (channel == _ffmpeg_content->audio_channels()) {
+ channel = 0;
+ ++sample;
+ }
+ }
+ }
+ break;
+
case AV_SAMPLE_FMT_S16:
{
int16_t* p = reinterpret_cast<int16_t *> (data[0]);