Merge commit '6d7ab09788bdafffb3f3fc4f7feb262eb8cdf0b1' into release/2.2
authorMichael Niedermayer <michaelni@gmx.at>
Tue, 11 Mar 2014 11:16:27 +0000 (12:16 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Tue, 11 Mar 2014 11:16:27 +0000 (12:16 +0100)
* commit '6d7ab09788bdafffb3f3fc4f7feb262eb8cdf0b1':
  golomb: Add a get_se_golomb_long

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/golomb.h

diff --combined libavcodec/golomb.h
@@@ -3,20 -3,20 +3,20 @@@
   * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
   * Copyright (c) 2004 Alex Beregszaszi
   *
 - * This file is part of Libav.
 + * This file is part of FFmpeg.
   *
 - * Libav is free software; you can redistribute it and/or
 + * FFmpeg 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.
   *
 - * Libav is distributed in the hope that it will be useful,
 + * FFmpeg 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 Libav; if not, write to the Free Software
 + * License along with FFmpeg; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
@@@ -66,14 -66,10 +66,14 @@@ static inline int get_ue_golomb(GetBitC
          return ff_ue_golomb_vlc_code[buf];
      } else {
          int log = 2 * av_log2(buf) - 31;
 -        buf >>= log;
 -        buf--;
          LAST_SKIP_BITS(re, gb, 32 - log);
          CLOSE_READER(re, gb);
 +        if (CONFIG_FTRAPV && log < 0) {
 +            av_log(0, AV_LOG_ERROR, "Invalid UE golomb code\n");
 +            return AVERROR_INVALIDDATA;
 +        }
 +        buf >>= log;
 +        buf--;
  
          return buf;
      }
@@@ -142,7 -138,7 +142,7 @@@ static inline unsigned svq3_get_ue_golo
              ret = (ret << 4) | ff_interleaved_dirac_golomb_vlc_code[buf];
              UPDATE_CACHE(re, gb);
              buf = GET_CACHE(re, gb);
 -        } while (HAVE_BITS_REMAINING(re, gb));
 +        } while (ret<0x8000000U && HAVE_BITS_REMAINING(re, gb));
  
          CLOSE_READER(re, gb);
          return ret - 1;
   */
  static inline int get_te0_golomb(GetBitContext *gb, int range)
  {
 -    assert(range >= 1);
 +    av_assert2(range >= 1);
  
      if (range == 1)
          return 0;
   */
  static inline int get_te_golomb(GetBitContext *gb, int range)
  {
 -    assert(range >= 1);
 +    av_assert2(range >= 1);
  
      if (range == 2)
          return get_bits1(gb) ^ 1;
@@@ -195,11 -191,7 +195,11 @@@ static inline int get_se_golomb(GetBitC
  
          return ff_se_golomb_vlc_code[buf];
      } else {
 -        int log = 2 * av_log2(buf) - 31;
 +        int log = av_log2(buf);
 +        LAST_SKIP_BITS(re, gb, 31 - log);
 +        UPDATE_CACHE(re, gb);
 +        buf = GET_CACHE(re, gb);
 +
          buf >>= log;
  
          LAST_SKIP_BITS(re, gb, 32 - log);
      }
  }
  
+ static inline int get_se_golomb_long(GetBitContext *gb)
+ {
+     unsigned int buf = get_ue_golomb_long(gb);
+     if (buf & 1)
+         buf = -(buf >> 1);
+     else
+         buf = (buf >> 1);
+     return buf;
+ }
  static inline int svq3_get_se_golomb(GetBitContext *gb)
  {
      unsigned int buf;
@@@ -324,9 -328,7 +336,9 @@@ static inline int get_ur_golomb_jpegls(
          return buf;
      } else {
          int i;
 -        for (i = 0; i < limit && SHOW_UBITS(re, gb, 1) == 0 && HAVE_BITS_REMAINING(re, gb); i++) {
 +        for (i = 0; i < limit && SHOW_UBITS(re, gb, 1) == 0; i++) {
 +            if (gb->size_in_bits <= re_index)
 +                return -1;
              LAST_SKIP_BITS(re, gb, 1);
              UPDATE_CACHE(re, gb);
          }
@@@ -465,7 -467,7 +477,7 @@@ static inline int get_te(GetBitContext 
   */
  static inline void set_ue_golomb(PutBitContext *pb, int i)
  {
 -    assert(i >= 0);
 +    av_assert2(i >= 0);
  
  #if 0
      if (i = 0) {
   */
  static inline void set_te_golomb(PutBitContext *pb, int i, int range)
  {
 -    assert(range >= 1);
 -    assert(i <= range);
 +    av_assert2(range >= 1);
 +    av_assert2(i <= range);
  
      if (range == 2)
          put_bits(pb, 1, i ^ 1);
@@@ -524,7 -526,7 +536,7 @@@ static inline void set_ur_golomb(PutBit
  {
      int e;
  
 -    assert(i >= 0);
 +    av_assert2(i >= 0);
  
      e = i >> k;
      if (e < limit)
@@@ -541,7 -543,7 +553,7 @@@ static inline void set_ur_golomb_jpegls
  {
      int e;
  
 -    assert(i >= 0);
 +    av_assert2(i >= 0);
  
      e = (i >> k) + 1;
      if (e < limit) {