X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Ffaxcompr.c;h=e59dad676abf7e132623a0a155792ded103d03a6;hb=53107041907f482ee941122d3bbe44683b74cb23;hp=e7f7706b94b9ef81db7a4c7490d90b9c85163989;hpb=a56f82eaf87143d346c391737f5436be9f777a09;p=ffmpeg diff --git a/libavcodec/faxcompr.c b/libavcodec/faxcompr.c index e7f7706b94b..e59dad676ab 100644 --- a/libavcodec/faxcompr.c +++ b/libavcodec/faxcompr.c @@ -2,30 +2,31 @@ * CCITT Fax Group 3 and 4 decompression * Copyright (c) 2008 Konstantin Shishkov * - * This file is part of FFmpeg. + * This file is part of Libav. * - * FFmpeg is free software; you can redistribute it and/or + * Libav is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * - * FFmpeg is distributed in the hope that it will be useful, + * Libav is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software + * License along with Libav; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** + * @file * CCITT Fax Group 3 and 4 decompression - * @file faxcompr.c * @author Konstantin Shishkov */ #include "avcodec.h" -#include "bitstream.h" +#include "get_bits.h" +#include "put_bits.h" #include "faxcompr.h" #define CCITT_SYMS 104 @@ -95,7 +96,7 @@ 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() +av_cold void ff_ccitt_unpack_init(void) { static VLC_TYPE code_table1[528][2]; static VLC_TYPE code_table2[648][2]; @@ -252,6 +253,7 @@ static void put_line(uint8_t *dst, int size, int width, const int *runs) if(run) put_sbits(&pb, run, mode); } + flush_put_bits(&pb); } static int find_group3_syncmarker(GetBitContext *gb, int srcsize) @@ -267,8 +269,9 @@ static int find_group3_syncmarker(GetBitContext *gb, int srcsize) } int ff_ccitt_unpack(AVCodecContext *avctx, - const uint8_t *src, int srcsize, - uint8_t *dst, int height, int stride, enum TiffCompr compr) + const uint8_t *src, int srcsize, + uint8_t *dst, int height, int stride, + enum TiffCompr compr, int opts) { int j; GetBitContext gb; @@ -292,12 +295,15 @@ int ff_ccitt_unpack(AVCodecContext *avctx, return -1; } }else{ - if(find_group3_syncmarker(&gb, srcsize*8) < 0) + int g3d1 = (compr == TIFF_G3) && !(opts & 1); + if(compr!=TIFF_CCITT_RLE && find_group3_syncmarker(&gb, srcsize*8) < 0) break; - if(compr==TIFF_CCITT_RLE || get_bits1(&gb)) + if(compr==TIFF_CCITT_RLE || g3d1 || get_bits1(&gb)) ret = decode_group3_1d_line(avctx, &gb, avctx->width, runs, runend); else ret = decode_group3_2d_line(avctx, &gb, avctx->width, runs, runend, ref); + if(compr==TIFF_CCITT_RLE) + align_get_bits(&gb); } if(ret < 0){ put_line(dst, stride, avctx->width, ref);