* 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"
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;
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,
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);