FFmpeg
4.0
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 && HAVE_6REGS
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
low = 1 + (((c->
high
- 1) * prob) >> 8);
33
unsigned
int
low_shift = low << 16;
34
int
bit = 0;
35
c->
code_word
= code_word;
36
37
__asm__(
38
"subl %4, %1 \n\t"
39
"subl %3, %2 \n\t"
40
"setae %b0 \n\t"
41
"cmovb %4, %1 \n\t"
42
"cmovb %5, %2 \n\t"
43
:
"+q"
(bit),
"+&r"
(c->
high
),
"+&r"
(c->
code_word
)
44
:
"r"
(low_shift),
"r"
(low),
"r"
(code_word)
45
);
46
47
return
bit;
48
}
49
#endif
50
51
#endif
/* AVCODEC_X86_VP56_ARITH_H */
VP56RangeCoder::code_word
unsigned int code_word
Definition:
vp56.h:91
uint8_t
uint8_t
Definition:
audio_convert.c:194
vp56_rac_get_prob
#define vp56_rac_get_prob
Definition:
vp56.h:254
vp56_rac_renorm
static av_always_inline unsigned int vp56_rac_renorm(VP56RangeCoder *c)
Definition:
vp56.h:230
c
static double c[64]
Definition:
vsrc_mptestsrc.c:87
VP56RangeCoder
Definition:
vp56.h:85
av_always_inline
#define av_always_inline
Definition:
attributes.h:39
VP56RangeCoder::high
int high
Definition:
vp56.h:86
Generated on Tue May 22 2018 07:06:28 for FFmpeg by
1.8.13