FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavcodec
x86
vp56_arith.h
Go to the documentation of this file.
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_VP56_ARITH_H
25
#define AVCODEC_X86_VP56_ARITH_H
26
27
#if HAVE_INLINE_ASM && HAVE_FAST_CMOV
28
#define vp56_rac_get_prob vp56_rac_get_prob
29
static
av_always_inline
int
vp56_rac_get_prob
(
VP56RangeCoder
*
c
,
uint8_t
prob)
30
{
31
unsigned
int
code_word =
vp56_rac_renorm
(c);
32
unsigned
int
high = c->
high
;
33
unsigned
int
low = 1 + (((high - 1) * prob) >> 8);
34
unsigned
int
low_shift = low << 16;
35
int
bit = 0;
36
37
__asm__(
38
"subl %4, %1 \n\t"
39
"subl %3, %2 \n\t"
40
"leal (%2, %3), %3 \n\t"
41
"setae %b0 \n\t"
42
"cmovb %4, %1 \n\t"
43
"cmovb %3, %2 \n\t"
44
:
"+q"
(bit),
"+r"
(high),
"+r"
(code_word),
"+r"
(low_shift)
45
:
"r"
(low)
46
);
47
48
c->
high
= high;
49
c->
code_word
= code_word;
50
return
bit;
51
}
52
#endif
53
54
#endif
/* AVCODEC_X86_VP56_ARITH_H */
Generated on Sun Mar 23 2014 23:49:51 for FFmpeg by
1.8.2