FFmpeg
4.0
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
stride
)
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 +=
stride
;
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
ptrdiff_t
stride
)
44
{
45
int
h
= 8;
46
uint64_t
mask
= 0x4040;
47
48
mask |= mask << 16;
49
mask |= mask << 32;
50
do
{
51
uint64_t x, y,
c
, d,
a
;
52
uint64_t signs;
53
54
x =
ldq
(s1);
55
y =
ldq
(s2);
56
c =
cmpbge
(x, y);
57
d = x - y;
58
a =
zap
(mask, c);
/* We use 0x4040404040404040 here... */
59
d += 4 *
a
;
/* ...so we can use s4addq here. */
60
signs =
zap
(-1, c);
61
62
stq
(
unpkbw
(d) | (
unpkbw
(signs) << 8), block);
63
stq
(
unpkbw
(d >> 32) | (
unpkbw
(signs >> 32) << 8), block + 4);
64
65
s1 +=
stride
;
66
s2 +=
stride
;
67
block += 8;
68
}
while
(--h);
69
}
70
71
av_cold
void
ff_pixblockdsp_init_alpha
(
PixblockDSPContext
*
c
,
AVCodecContext
*avctx,
72
unsigned
high_bit_depth)
73
{
74
if
(
amask
(
AMASK_MVI
) == 0) {
75
if
(!high_bit_depth)
76
c->
get_pixels
=
get_pixels_mvi
;
77
c->
diff_pixels
=
diff_pixels_mvi
;
78
}
79
}
pixblockdsp.h
h
h
Definition:
vp9dsp_template.c:2038
ldq
#define ldq(p)
Definition:
asm.h:59
cmpbge
#define cmpbge
Definition:
asm.h:92
stride
int stride
Definition:
mace.c:144
ff_pixblockdsp_init_alpha
av_cold void ff_pixblockdsp_init_alpha(PixblockDSPContext *c, AVCodecContext *avctx, unsigned high_bit_depth)
Definition:
pixblockdsp_alpha.c:71
attributes.h
Macro definitions for various function/variable attributes.
block
static int16_t block[64]
Definition:
dct.c:115
uint8_t
uint8_t
Definition:
audio_convert.c:194
av_cold
#define av_cold
Definition:
attributes.h:82
PixblockDSPContext::diff_pixels
void(* diff_pixels)(int16_t *av_restrict block, const uint8_t *s1, const uint8_t *s2, ptrdiff_t stride)
Definition:
pixblockdsp.h:32
AMASK_MVI
#define AMASK_MVI
Definition:
asm.h:40
s2
#define s2
Definition:
regdef.h:39
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 stride)
Definition:
pixblockdsp_alpha.c:25
diff_pixels_mvi
static void diff_pixels_mvi(int16_t *block, const uint8_t *s1, const uint8_t *s2, ptrdiff_t stride)
Definition:
pixblockdsp_alpha.c:42
AVCodecContext
main external API structure.
Definition:
avcodec.h:1518
zap
#define zap
Definition:
asm.h:97
PixblockDSPContext
Definition:
pixblockdsp.h:28
s1
#define s1
Definition:
regdef.h:38
PixblockDSPContext::get_pixels
void(* get_pixels)(int16_t *av_restrict block, const uint8_t *pixels, ptrdiff_t stride)
Definition:
pixblockdsp.h:29
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
pixels
int pixels
Definition:
avisynth_c.h:429
asm.h
a
a
Definition:
h264pred_template.c:468
Generated on Tue May 22 2018 07:06:27 for FFmpeg by
1.8.13