Support for unsigned 8-bit audio.
authorCarl Hetherington <cth@carlh.net>
Sat, 8 Mar 2014 01:48:04 +0000 (01:48 +0000)
committerCarl Hetherington <cth@carlh.net>
Sat, 8 Mar 2014 01:48:04 +0000 (01:48 +0000)
ChangeLog
src/lib/ffmpeg_decoder.cc

index 420486e1fc22a121ef673ac84a437e0f42f1a36a..0bfcdd4d928df5f6055bb6346ee4e249e009c514 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2014-03-08  Carl Hetherington  <cth@carlh.net>
+
+       * Support for unsigned 8-bit audio (hmm!).
+
 2014-03-06  Carl Hetherington  <cth@carlh.net>
 
        * Version 1.65.0 released.
index 16da64c6014e5998e4fc581d838c9e3419a3c15f..347d8cc08c86b0489795747a621c034fd9a8c74d 100644 (file)
@@ -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]);