]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/wmadec.c
aacenc: fix typo in sync extension constant in 8ae0fa2
[ffmpeg] / libavcodec / wmadec.c
index 5e04e512f11bc0539b57e00006b9697fb97aa703..694b15d1fb8b876e6e69dfb0a34d851278693a1e 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 /**
- * @file libavcodec/wmadec.c
+ * @file
  * WMA compatible decoder.
  * This decoder handles Microsoft Windows Media Audio data, versions 1 & 2.
  * WMA v1 is identified by audio format 0x160 in Microsoft media files
@@ -116,14 +116,14 @@ static int wma_decode_init(AVCodecContext * avctx)
     }
 
     if (s->use_exp_vlc) {
-        init_vlc(&s->exp_vlc, EXPVLCBITS, sizeof(ff_wma_scale_huffbits), //FIXME move out of context
-                 ff_wma_scale_huffbits, 1, 1,
-                 ff_wma_scale_huffcodes, 4, 4, 0);
+        init_vlc(&s->exp_vlc, EXPVLCBITS, sizeof(ff_aac_scalefactor_bits), //FIXME move out of context
+                 ff_aac_scalefactor_bits, 1, 1,
+                 ff_aac_scalefactor_code, 4, 4, 0);
     } else {
         wma_lsp_to_curve_init(s, s->frame_len);
     }
 
-    avctx->sample_fmt = SAMPLE_FMT_S16;
+    avctx->sample_fmt = AV_SAMPLE_FMT_S16;
     return 0;
 }
 
@@ -790,17 +790,28 @@ static int wma_decode_frame(WMACodecContext *s, int16_t *samples)
     /* convert frame to integer */
     n = s->frame_len;
     incr = s->nb_channels;
-    for(ch = 0; ch < s->nb_channels; ch++) {
-        ptr = samples + ch;
-        iptr = s->frame_out[ch];
+    if (s->dsp.float_to_int16_interleave == ff_float_to_int16_interleave_c) {
+        for(ch = 0; ch < s->nb_channels; ch++) {
+            ptr = samples + ch;
+            iptr = s->frame_out[ch];
 
-        for(i=0;i<n;i++) {
-            *ptr = av_clip_int16(lrintf(*iptr++));
-            ptr += incr;
+            for(i=0;i<n;i++) {
+                *ptr = av_clip_int16(lrintf(*iptr++));
+                ptr += incr;
+            }
+            /* prepare for next block */
+            memmove(&s->frame_out[ch][0], &s->frame_out[ch][s->frame_len],
+                    s->frame_len * sizeof(float));
+        }
+    } else {
+        const float *output[MAX_CHANNELS];
+        for (ch = 0; ch < MAX_CHANNELS; ch++)
+            output[ch] = s->frame_out[ch];
+        s->dsp.float_to_int16_interleave(samples, output, n, incr);
+        for(ch = 0; ch < incr; ch++) {
+            /* prepare for next block */
+            memmove(&s->frame_out[ch][0], &s->frame_out[ch][n], n * sizeof(float));
         }
-        /* prepare for next block */
-        memmove(&s->frame_out[ch][0], &s->frame_out[ch][s->frame_len],
-                s->frame_len * sizeof(float));
     }
 
 #ifdef TRACE
@@ -931,7 +942,7 @@ static av_cold void flush(AVCodecContext *avctx)
 AVCodec wmav1_decoder =
 {
     "wmav1",
-    CODEC_TYPE_AUDIO,
+    AVMEDIA_TYPE_AUDIO,
     CODEC_ID_WMAV1,
     sizeof(WMACodecContext),
     wma_decode_init,
@@ -945,7 +956,7 @@ AVCodec wmav1_decoder =
 AVCodec wmav2_decoder =
 {
     "wmav2",
-    CODEC_TYPE_AUDIO,
+    AVMEDIA_TYPE_AUDIO,
     CODEC_ID_WMAV2,
     sizeof(WMACodecContext),
     wma_decode_init,