From 297b5a3f99d7da6307f164973d0d6d375ea3fbb7 Mon Sep 17 00:00:00 2001 From: Stefano Sabatini <stefano.sabatini-lala@poste.it> Date: Wed, 22 Apr 2009 00:04:17 +0000 Subject: [PATCH] Make read_line() do not depend on put_bits.h and speed up it. Originally committed as revision 18653 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/pixdesc.h | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/libavcodec/pixdesc.h b/libavcodec/pixdesc.h index a8ca48454cb..6660ea1710f 100644 --- a/libavcodec/pixdesc.h +++ b/libavcodec/pixdesc.h @@ -25,7 +25,6 @@ #include <inttypes.h> #include "libavutil/intreadwrite.h" -#include "get_bits.h" typedef struct AVComponentDescriptor{ uint16_t plane :2; ///< which of the 4 planes contains the component @@ -114,15 +113,17 @@ static inline void read_line(uint16_t *dst, const uint8_t *data[4], const int li int flags= desc->flags; if (flags & PIX_FMT_BITSTREAM){ - GetBitContext gb; - init_get_bits(&gb, data[plane] + y*linesize[plane], linesize[plane]*8); - skip_bits_long(&gb, x*step + comp.offset_plus1-1); + int skip = x*step + comp.offset_plus1-1; + const uint8_t *p = data[plane] + y*linesize[plane] + (skip>>3); + int shift = 8 - depth - (skip&7); while(w--){ - int val = show_bits(&gb, depth); + int val = (*p >> shift) & mask; if(read_pal_component) val= data[1][4*val + c]; - skip_bits(&gb, step); + shift -= step; + p -= shift>>3; + shift &= 7; *dst++= val; } } else { -- GitLab