golomb: Fix the implementation of get_se_golomb_long
authorMartin Storsjö <martin@martin.st>
Sat, 29 Mar 2014 10:35:11 +0000 (12:35 +0200)
committerMartin Storsjö <martin@martin.st>
Sat, 29 Mar 2014 22:28:27 +0000 (00:28 +0200)
This was only used in hevc muxing code so far.

This makes the return values match what get_se_golomb returns for
the same bitstream reader instances.

The logic for producing a signed golomb code out of an unsigned one
was based on the corresponding code in get_se_golomb, which operated
directly on the bitstream reader buffer - not on the equivalent
return value from get_ue_golomb.

CC: libav-stable@libav.org
Signed-off-by: Martin Storsjö <martin@martin.st>
libavcodec/golomb.h

index ce3500f..1754706 100644 (file)
@@ -211,9 +211,9 @@ static inline int get_se_golomb_long(GetBitContext *gb)
     unsigned int buf = get_ue_golomb_long(gb);
 
     if (buf & 1)
-        buf = -(buf >> 1);
+        buf = (buf + 1) >> 1;
     else
-        buf = (buf >> 1);
+        buf = -(buf >> 1);
 
     return buf;
 }