]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/on2avc.c
avformat/aviobuf: End grace period of allowing 0 from read_packet
[ffmpeg] / libavcodec / on2avc.c
index 2db42e2bf20867e112da76a936096c7bd34232a8..d7a3e4945a160350332ce96b7aee3b169d91fa02 100644 (file)
@@ -23,6 +23,8 @@
 #include "libavutil/channel_layout.h"
 #include "libavutil/ffmath.h"
 #include "libavutil/float_dsp.h"
+#include "libavutil/mem_internal.h"
+
 #include "avcodec.h"
 #include "bytestream.h"
 #include "fft.h"
@@ -169,7 +171,7 @@ static int on2avc_decode_band_scales(On2AVCContext *c, GetBitContext *gb)
                 scale = get_bits(gb, 7);
                 first = 0;
             } else {
-                scale += get_vlc2(gb, c->scale_diff.table, 9, 3) - 60;
+                scale += get_vlc2(gb, c->scale_diff.table, 9, 3);
             }
             if (scale < 0 || scale > 127) {
                 av_log(c->avctx, AV_LOG_ERROR, "Invalid scale value %d\n",
@@ -906,6 +908,8 @@ static av_cold void on2avc_free_vlcs(On2AVCContext *c)
 static av_cold int on2avc_decode_init(AVCodecContext *avctx)
 {
     On2AVCContext *c = avctx->priv_data;
+    const uint8_t  *lens = ff_on2avc_cb_lens;
+    const uint16_t *syms = ff_on2avc_cb_syms;
     int i, ret;
 
     if (avctx->channels > 2U) {
@@ -958,16 +962,18 @@ static av_cold int on2avc_decode_init(AVCodecContext *avctx)
 
     ret = ff_init_vlc_from_lengths(&c->scale_diff, 9, ON2AVC_SCALE_DIFFS,
                                    ff_on2avc_scale_diff_bits, 1,
-                                   ff_on2avc_scale_diff_syms, 1, 1, 0, 0, avctx);
+                                   ff_on2avc_scale_diff_syms, 1, 1, -60, 0, avctx);
     if (ret < 0)
         goto vlc_fail;
     for (i = 1; i < 16; i++) {
         int idx = i - 1;
         ret = ff_init_vlc_from_lengths(&c->cb_vlc[i], 9, ff_on2avc_cb_elems[idx],
-                                       ff_on2avc_cb_bits[idx], 1,
-                                       ff_on2avc_cb_syms[idx], 2, 2, 0, 0, avctx);
+                                       lens, 1,
+                                       syms, 2, 2, 0, 0, avctx);
         if (ret < 0)
             goto vlc_fail;
+        lens += ff_on2avc_cb_elems[idx];
+        syms += ff_on2avc_cb_elems[idx];
     }
 
     return 0;