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
alpha
pixblockdsp_alpha.c
Go to the documentation of this file.
1
/*
2
* SIMD-optimized pixel operations
3
*
4
* This file is part of FFmpeg.
5
*
6
* FFmpeg is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Lesser General Public
8
* License as published by the Free Software Foundation; either
9
* version 2.1 of the License, or (at your option) any later version.
10
*
11
* FFmpeg is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Lesser General Public License for more details.
15
*
16
* You should have received a copy of the GNU Lesser General Public
17
* License along with FFmpeg; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
*/
20
21
#include "
libavutil/attributes.h
"
22
#include "
libavcodec/pixblockdsp.h
"
23
#include "
asm.h
"
24
25
static
void
get_pixels_mvi
(int16_t *restrict
block
,
26
const
uint8_t
*restrict
pixels
, ptrdiff_t line_size)
27
{
28
int
h
= 8;
29
30
do
{
31
uint64_t p;
32
33
p =
ldq
(pixels);
34
stq
(
unpkbw
(p), block);
35
stq
(
unpkbw
(p >> 32), block + 4);
36
37
pixels += line_size;
38
block += 8;
39
}
while
(--h);
40
}
41
42
static
void
diff_pixels_mvi
(int16_t *
block
,
const
uint8_t
*
s1
,
const
uint8_t
*
s2
,
43
int
stride
) {
44
int
h
= 8;
45
uint64_t
mask
= 0x4040;
46
47
mask |= mask << 16;
48
mask |= mask << 32;
49
do
{
50
uint64_t x, y,
c
, d,
a
;
51
uint64_t signs;
52
53
x =
ldq
(s1);
54
y =
ldq
(s2);
55
c =
cmpbge
(x, y);
56
d = x - y;
57
a =
zap
(mask, c);
/* We use 0x4040404040404040 here... */
58
d += 4 *
a
;
/* ...so we can use s4addq here. */
59
signs =
zap
(-1, c);
60
61
stq
(
unpkbw
(d) | (
unpkbw
(signs) << 8), block);
62
stq
(
unpkbw
(d >> 32) | (
unpkbw
(signs >> 32) << 8), block + 4);
63
64
s1 +=
stride
;
65
s2 +=
stride
;
66
block += 8;
67
}
while
(--h);
68
}
69
70
av_cold
void
ff_pixblockdsp_init_alpha
(
PixblockDSPContext
*
c
,
AVCodecContext
*avctx,
71
unsigned
high_bit_depth)
72
{
73
if
(
amask
(
AMASK_MVI
) == 0) {
74
if
(!high_bit_depth)
75
c->
get_pixels
=
get_pixels_mvi
;
76
c->
diff_pixels
=
diff_pixels_mvi
;
77
}
78
}
pixblockdsp.h
h
h
Definition:
vp9dsp_template.c:2093
ldq
#define ldq(p)
Definition:
asm.h:59
cmpbge
#define cmpbge
Definition:
asm.h:92
ff_pixblockdsp_init_alpha
av_cold void ff_pixblockdsp_init_alpha(PixblockDSPContext *c, AVCodecContext *avctx, unsigned high_bit_depth)
Definition:
pixblockdsp_alpha.c:70
attributes.h
Macro definitions for various function/variable attributes.
block
static int16_t block[64]
Definition:
dct.c:113
uint8_t
uint8_t
Definition:
audio_convert.c:194
av_cold
#define av_cold
Definition:
attributes.h:82
PixblockDSPContext::get_pixels
void(* get_pixels)(int16_t *block, const uint8_t *pixels, ptrdiff_t line_size)
Definition:
pixblockdsp.h:27
AMASK_MVI
#define AMASK_MVI
Definition:
asm.h:40
s2
#define s2
Definition:
regdef.h:39
diff_pixels_mvi
static void diff_pixels_mvi(int16_t *block, const uint8_t *s1, const uint8_t *s2, int stride)
Definition:
pixblockdsp_alpha.c:42
amask
#define amask
Definition:
asm.h:99
mask
static const uint16_t mask[17]
Definition:
lzw.c:38
get_pixels_mvi
static void get_pixels_mvi(int16_t *restrict block, const uint8_t *restrict pixels, ptrdiff_t line_size)
Definition:
pixblockdsp_alpha.c:25
AVCodecContext
main external API structure.
Definition:
avcodec.h:1676
zap
#define zap
Definition:
asm.h:97
PixblockDSPContext
Definition:
pixblockdsp.h:26
s1
#define s1
Definition:
regdef.h:38
stride
GLint GLenum GLboolean GLsizei stride
Definition:
opengl_enc.c:105
c
static double c[64]
Definition:
vsrc_mptestsrc.c:87
unpkbw
#define unpkbw(a)
Definition:
asm.h:146
stq
#define stq(l, p)
Definition:
asm.h:69
PixblockDSPContext::diff_pixels
void(* diff_pixels)(int16_t *block, const uint8_t *s1, const uint8_t *s2, int stride)
Definition:
pixblockdsp.h:30
pixels
int pixels
Definition:
avisynth_c.h:429
stride
#define stride
asm.h
a
a
Definition:
h264pred_template.c:468
Generated on Thu Oct 27 2016 19:33:21 for FFmpeg by
1.8.6