[FFmpeg-cvslog] r18291 - trunk/libavcodec/pixdesc.h

stefano subversion
Wed Apr 1 00:52:30 CEST 2009


Author: stefano
Date: Wed Apr  1 00:52:30 2009
New Revision: 18291

Log:
Add/fix support for bitstream formats reading in read_line().

Modified:
   trunk/libavcodec/pixdesc.h

Modified: trunk/libavcodec/pixdesc.h
==============================================================================
--- trunk/libavcodec/pixdesc.h	Wed Apr  1 00:48:18 2009	(r18290)
+++ trunk/libavcodec/pixdesc.h	Wed Apr  1 00:52:30 2009	(r18291)
@@ -22,6 +22,7 @@
 #include <inttypes.h>
 
 #include "libavutil/intreadwrite.h"
+#include "libavcodec/bitstream.h"
 
 typedef struct AVComponentDescriptor{
     uint16_t plane        :2;            ///< which of the 4 planes contains the component
@@ -103,9 +104,21 @@ static inline void read_line(uint16_t *d
     int shift= comp.shift;
     int step = comp.step_minus1+1;
     int flags= desc->flags;
-    const uint8_t *p= data[plane]+y*linesize[plane] + x * step + comp.offset_plus1 - 1;
 
-    //FIXME initial x in case of PIX_FMT_BITSTREAM is wrong
+    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);
+
+        while(w--){
+            int val = show_bits(&gb, depth);
+            if(flags & PIX_FMT_PAL)
+                val= data[1][4*val + c];
+            skip_bits(&gb, step);
+            *dst++= val;
+        }
+    } else {
+    const uint8_t *p = data[plane]+ y*linesize[plane] + x*step + comp.offset_plus1-1;
 
     while(w--){
         int val;
@@ -114,14 +127,8 @@ static inline void read_line(uint16_t *d
         val = (val>>shift) & mask;
         if(flags & PIX_FMT_PAL)
             val= data[1][4*val + c];
-        if(flags & PIX_FMT_BITSTREAM){
-            shift-=depth;
-            while(shift<0){
-                shift+=8;
-                p++;
-            }
-        }else
             p+= step;
         *dst++= val;
     }
+    }
 }



More information about the ffmpeg-cvslog mailing list