]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/faxcompr.c
avcodec: Constify all the AVCodecParsers
[ffmpeg] / libavcodec / faxcompr.c
index 2a1d2bc3f6ca1365c65696a1ca977ed08dbd1356..7bf11d80ca11e3d6fa19a111f26572ad6dd0f22b 100644 (file)
@@ -24,6 +24,7 @@
  * CCITT Fax Group 3 and 4 decompression
  * @author Konstantin Shishkov
  */
+#include "libavutil/thread.h"
 #include "avcodec.h"
 #include "get_bits.h"
 #include "put_bits.h"
@@ -96,15 +97,12 @@ static const uint8_t ccitt_group3_2d_lens[11] = {
 
 static VLC ccitt_vlc[2], ccitt_group3_2d_vlc;
 
-av_cold void ff_ccitt_unpack_init(void)
+static av_cold void ccitt_unpack_init(void)
 {
     static VLC_TYPE code_table1[528][2];
     static VLC_TYPE code_table2[648][2];
     int i;
-    static int initialized = 0;
 
-    if (initialized)
-        return;
     ccitt_vlc[0].table = code_table1;
     ccitt_vlc[0].table_allocated = 528;
     ccitt_vlc[1].table = code_table2;
@@ -119,7 +117,12 @@ av_cold void ff_ccitt_unpack_init(void)
     INIT_VLC_STATIC(&ccitt_group3_2d_vlc, 9, 11,
                     ccitt_group3_2d_lens, 1, 1,
                     ccitt_group3_2d_bits, 1, 1, 512);
-    initialized = 1;
+}
+
+av_cold void ff_ccitt_unpack_init(void)
+{
+    static AVOnce init_static_once = AV_ONCE_INIT;
+    ff_thread_once(&init_static_once, ccitt_unpack_init);
 }
 
 static int decode_uncompressed(AVCodecContext *avctx, GetBitContext *gb,
@@ -224,7 +227,7 @@ static int decode_group3_1d_line(AVCodecContext *avctx, GetBitContext *gb,
             run       = 0;
             mode      = !mode;
         } else if ((int)t == -1) {
-            if (show_bits(gb, 12) == 15) {
+            if (get_bits_left(gb) > 12 && show_bits(gb, 12) == 15) {
                 int ret;
                 skip_bits(gb, 12);
                 ret = decode_uncompressed(avctx, gb, &pix_left, &runs, runend, &mode);