Try to add support for signed 16-bit planar; tidy a couple of C-style casts.
authorCarl Hetherington <cth@carlh.net>
Tue, 18 Dec 2012 23:14:03 +0000 (23:14 +0000)
committerCarl Hetherington <cth@carlh.net>
Tue, 18 Dec 2012 23:14:03 +0000 (23:14 +0000)
src/lib/ffmpeg_decoder.cc

index 3c607a7fb260f741392b42d221177e9857a72848..b96e2b67c3f96a3d7f635e99cd62094b4484f7c8 100644 (file)
@@ -408,7 +408,7 @@ FFmpegDecoder::deinterleave_audio (uint8_t* data, int size)
        switch (audio_sample_format()) {
        case AV_SAMPLE_FMT_S16:
        {
-               int16_t* p = (int16_t *) data;
+               int16_t* p = reinterpret_cast<int16_t *> (data);
                int sample = 0;
                int channel = 0;
                for (int i = 0; i < total_samples; ++i) {
@@ -423,13 +423,24 @@ FFmpegDecoder::deinterleave_audio (uint8_t* data, int size)
        }
        break;
 
+       case AV_SAMPLE_FMT_S16P:
+       {
+               int16_t* p = reinterpret_cast<int16_t *> (data);
+               for (int i = 0; i < _film->audio_channels(); ++i) {
+                       for (int j = 0; j < frames; ++j) {
+                               audio->data(i)[j] = static_cast<float>(*p++) / (1 << 15);
+                       }
+               }
+       }
+       break;
+       
        case AV_SAMPLE_FMT_S32:
        {
-               int32_t* p = (int32_t *) data;
+               int32_t* p = reinterpret_cast<int32_t *> (data);
                int sample = 0;
                int channel = 0;
                for (int i = 0; i < total_samples; ++i) {
-                       audio->data(channel)[sample] = float(*p++) / (1 << 31);
+                       audio->data(channel)[sample] = static_cast<float>(*p++) / (1 << 31);
 
                        ++channel;
                        if (channel == _film->audio_channels()) {