- int state = get_bits(gb, 12);
- int rem = srcsize - get_bits_count(gb);
- while((state & 0xFFF) != 1){
- state = (state << 1) | get_bits1(gb);
- if(--rem <= 0)
- return -1;
- }
- return 0;
-}
-
-int ff_ccitt_unpack_1d(AVCodecContext *avctx,
- const uint8_t *src, int srcsize,
- uint8_t *dst, int height, int stride)
-{
- int j;
- GetBitContext gb;
- int *runs, *last;
-
- runs = av_malloc(avctx->width * sizeof(runs[0]));
- last = av_malloc(avctx->width * sizeof(last[0]));
- init_get_bits(&gb, src, srcsize*8);
- for(j = 0; j < height; j++){
- if(find_group3_syncmarker(&gb, srcsize*8) < 0)
- break;
- if(decode_group3_1d_line(avctx, &gb, avctx->width, runs) < 0){
- put_line(dst, stride, avctx->width, last);
- }else{
- put_line(dst, stride, avctx->width, runs);
- FFSWAP(int*, last, runs);
- }
- dst += stride;
+ unsigned int state = -1;
+ srcsize -= get_bits_count(gb);
+ while(srcsize-- > 0){
+ state+= state + get_bits1(gb);
+ if((state & 0xFFF) == 1)
+ return 0;