[SCM] libav/experimental: Make read_line() do not depend on put_bits.h and speed up it.

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 16:44:50 UTC 2013


The following commit has been merged in the experimental branch:
commit 297b5a3f99d7da6307f164973d0d6d375ea3fbb7
Author: Stefano Sabatini <stefano.sabatini-lala at poste.it>
Date:   Wed Apr 22 00:04:17 2009 +0000

    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

diff --git a/libavcodec/pixdesc.h b/libavcodec/pixdesc.h
index a8ca484..6660ea1 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 {

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list