]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/cllc.c
avcodec: Constify AVCodecs
[ffmpeg] / libavcodec / cllc.c
index 1f2c98ef735fcd86b7f5419cfc69ae4b7aa458cc..41b3a4ef83f3bbbf0569b348091d414435a37063 100644 (file)
@@ -46,19 +46,15 @@ static int read_code_table(CLLCContext *ctx, GetBitContext *gb, VLC *vlc)
 {
     uint8_t symbols[256];
     uint8_t bits[256];
-    uint16_t codes[256];
-    int num_lens, num_codes, num_codes_sum, prefix;
+    int num_lens, num_codes, num_codes_sum;
     int i, j, count;
 
-    prefix        = 0;
     count         = 0;
     num_codes_sum = 0;
 
     num_lens = get_bits(gb, 5);
 
     if (num_lens > VLC_BITS * VLC_DEPTH) {
-        vlc->table = NULL;
-
         av_log(ctx->avctx, AV_LOG_ERROR, "To long VLCs %d\n", num_lens);
         return AVERROR_INVALIDDATA;
     }
@@ -68,8 +64,6 @@ static int read_code_table(CLLCContext *ctx, GetBitContext *gb, VLC *vlc)
         num_codes_sum += num_codes;
 
         if (num_codes_sum > 256) {
-            vlc->table = NULL;
-
             av_log(ctx->avctx, AV_LOG_ERROR,
                    "Too many VLCs (%d) to be read.\n", num_codes_sum);
             return AVERROR_INVALIDDATA;
@@ -78,20 +72,13 @@ static int read_code_table(CLLCContext *ctx, GetBitContext *gb, VLC *vlc)
         for (j = 0; j < num_codes; j++) {
             symbols[count] = get_bits(gb, 8);
             bits[count]    = i + 1;
-            codes[count]   = prefix++;
 
             count++;
         }
-        if (prefix > (65535 - 256)/2) {
-            vlc->table = NULL;
-            return AVERROR_INVALIDDATA;
-        }
-
-        prefix <<= 1;
     }
 
-    return ff_init_vlc_sparse(vlc, VLC_BITS, count, bits, 1, 1,
-                              codes, 2, 2, symbols, 1, 1, 0);
+    return ff_init_vlc_from_lengths(vlc, VLC_BITS, count, bits, 1,
+                                    symbols, 1, 1, 0, 0, ctx->avctx);
 }
 
 /*
@@ -247,7 +234,7 @@ static int decode_argb_frame(CLLCContext *ctx, GetBitContext *gb, AVFrame *pic)
     for (i = 0; i < 4; i++) {
         ret = read_code_table(ctx, gb, &vlc[i]);
         if (ret < 0) {
-            for (j = 0; j <= i; j++)
+            for (j = 0; j < i; j++)
                 ff_free_vlc(&vlc[j]);
 
             av_log(ctx->avctx, AV_LOG_ERROR,
@@ -290,7 +277,7 @@ static int decode_rgb24_frame(CLLCContext *ctx, GetBitContext *gb, AVFrame *pic)
     for (i = 0; i < 3; i++) {
         ret = read_code_table(ctx, gb, &vlc[i]);
         if (ret < 0) {
-            for (j = 0; j <= i; j++)
+            for (j = 0; j < i; j++)
                 ff_free_vlc(&vlc[j]);
 
             av_log(ctx->avctx, AV_LOG_ERROR,
@@ -343,7 +330,7 @@ static int decode_yuv_frame(CLLCContext *ctx, GetBitContext *gb, AVFrame *pic)
     for (i = 0; i < 2; i++) {
         ret = read_code_table(ctx, gb, &vlc[i]);
         if (ret < 0) {
-            for (j = 0; j <= i; j++)
+            for (j = 0; j < i; j++)
                 ff_free_vlc(&vlc[j]);
 
             av_log(ctx->avctx, AV_LOG_ERROR,
@@ -506,7 +493,7 @@ static av_cold int cllc_decode_init(AVCodecContext *avctx)
     return 0;
 }
 
-AVCodec ff_cllc_decoder = {
+const AVCodec ff_cllc_decoder = {
     .name           = "cllc",
     .long_name      = NULL_IF_CONFIG_SMALL("Canopus Lossless Codec"),
     .type           = AVMEDIA_TYPE_VIDEO,