summaryrefslogtreecommitdiff
path: root/src/lib/ffmpeg_decoder.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2014-03-08 13:15:06 +0000
committerCarl Hetherington <cth@carlh.net>2014-03-08 13:15:06 +0000
commita4c19a34244aeaf183c25878933b570fc5c0ee34 (patch)
tree9fd6f8d17dfde7969da1f166b7b25e85b252f450 /src/lib/ffmpeg_decoder.cc
parentcab9a1d569396065a6e9eb39386736908564d6b4 (diff)
parent04bfeac6ccfe4e4c981a241f53138c765a0864a7 (diff)
Merge master.
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 dc2a5590b..d37399eb3 100644
--- a/src/lib/ffmpeg_decoder.cc
+++ b/src/lib/ffmpeg_decoder.cc
@@ -182,6 +182,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]);