FFmpeg
2.6.3
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Modules
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 && 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:90
uint8_t
uint8_t
Definition:
audio_convert.c:194
vp56_rac_get_prob
#define vp56_rac_get_prob
Definition:
vp56.h:250
vp56_rac_renorm
static av_always_inline unsigned int vp56_rac_renorm(VP56RangeCoder *c)
Definition:
vp56.h:226
c
static double c[64]
Definition:
vsrc_mptestsrc.c:87
VP56RangeCoder
Definition:
vp56.h:84
av_always_inline
#define av_always_inline
Definition:
attributes.h:37
VP56RangeCoder::high
int high
Definition:
vp56.h:85
Generated on Sun May 24 2015 19:50:34 for FFmpeg by
1.8.8