tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

vpx_arith.h (1777B)


      1 /**
      2 * VP5 and VP6 compatible video decoder (arith decoder)
      3 *
      4 * Copyright (C) 2006  Aurelien Jacobs <aurel@gnuage.org>
      5 * Copyright (C) 2010  Eli Friedman
      6 *
      7 * This file is part of FFmpeg.
      8 *
      9 * FFmpeg is free software; you can redistribute it and/or
     10 * modify it under the terms of the GNU Lesser General Public
     11 * License as published by the Free Software Foundation; either
     12 * version 2.1 of the License, or (at your option) any later version.
     13 *
     14 * FFmpeg is distributed in the hope that it will be useful,
     15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     17 * Lesser General Public License for more details.
     18 *
     19 * You should have received a copy of the GNU Lesser General Public
     20 * License along with FFmpeg; if not, write to the Free Software
     21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
     22 */
     23 
     24 #ifndef AVCODEC_X86_VPX_ARITH_H
     25 #define AVCODEC_X86_VPX_ARITH_H
     26 
     27 #include "libavutil/x86/asm.h"
     28 
     29 #if HAVE_INLINE_ASM && HAVE_FAST_CMOV && HAVE_6REGS
     30 #include "libavutil/attributes.h"
     31 
     32 #define vpx_rac_get_prob vpx_rac_get_prob
     33 static av_always_inline int vpx_rac_get_prob(VPXRangeCoder *c, uint8_t prob)
     34 {
     35    unsigned int code_word = vpx_rac_renorm(c);
     36    unsigned int low = 1 + (((c->high - 1) * prob) >> 8);
     37    unsigned int low_shift = low << 16;
     38    int bit = 0;
     39    c->code_word = code_word;
     40 
     41    __asm__(
     42        "subl  %4, %1      \n\t"
     43        "subl  %3, %2      \n\t"
     44        "setae %b0         \n\t"
     45        "cmovb %4, %1      \n\t"
     46        "cmovb %5, %2      \n\t"
     47        : "+q"(bit), "+&r"(c->high), "+&r"(c->code_word)
     48        : "r"(low_shift), "r"(low), "r"(code_word)
     49    );
     50 
     51    return bit;
     52 }
     53 #endif
     54 
     55 #endif /* AVCODEC_X86_VPX_ARITH_H */