alac: fix channel pointer assignment for 24 and 32-bit
authorJustin Ruggles <justin.ruggles@gmail.com>
Thu, 19 Jul 2012 23:47:08 +0000 (19:47 -0400)
committerJustin Ruggles <justin.ruggles@gmail.com>
Fri, 20 Jul 2012 00:14:29 +0000 (20:14 -0400)
Needs to be done separately for each element.

libavcodec/alac.c

index 310a1f0..aa2e6c8 100644 (file)
@@ -322,16 +322,16 @@ static int decode_element(AVCodecContext *avctx, void *data, int ch_index,
             av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
             return ret;
         }
-        if (alac->sample_size > 16) {
-            for (ch = 0; ch < channels; ch++)
-                alac->output_samples_buffer[ch] = (int32_t *)alac->frame.extended_data[ch_index + ch];
-        }
     } else if (output_samples != alac->nb_samples) {
         av_log(avctx, AV_LOG_ERROR, "sample count mismatch: %u != %d\n",
                output_samples, alac->nb_samples);
         return AVERROR_INVALIDDATA;
     }
     alac->nb_samples = output_samples;
+    if (alac->sample_size > 16) {
+        for (ch = 0; ch < channels; ch++)
+            alac->output_samples_buffer[ch] = (int32_t *)alac->frame.extended_data[ch_index + ch];
+    }
 
     if (is_compressed) {
         int16_t lpc_coefs[2][32];