FFmpeg
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavcodec
x86
diracdsp_mmx.c
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2010 David Conrad
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 "
dsputil_mmx.h
"
22
#include "
diracdsp_mmx.h
"
23
24
void
ff_put_rect_clamped_mmx
(
uint8_t
*
dst
,
int
dst_stride,
const
int16_t *src,
int
src_stride,
int
width
,
int
height
);
25
void
ff_put_rect_clamped_sse2
(
uint8_t
*
dst
,
int
dst_stride,
const
int16_t *src,
int
src_stride,
int
width
,
int
height
);
26
void
ff_put_signed_rect_clamped_mmx
(
uint8_t
*
dst
,
int
dst_stride,
const
int16_t *src,
int
src_stride,
int
width
,
int
height
);
27
void
ff_put_signed_rect_clamped_sse2
(
uint8_t
*
dst
,
int
dst_stride,
const
int16_t *src,
int
src_stride,
int
width
,
int
height
);
28
29
#define HPEL_FILTER(MMSIZE, EXT) \
30
void ff_dirac_hpel_filter_v_ ## EXT(uint8_t *, const uint8_t *, int, int); \
31
void ff_dirac_hpel_filter_h_ ## EXT(uint8_t *, const uint8_t *, int); \
32
\
33
static void dirac_hpel_filter_ ## EXT(uint8_t *dsth, uint8_t *dstv, uint8_t *dstc, \
34
const uint8_t *src, int stride, int width, int height) \
35
{ \
36
while( height-- ) \
37
{ \
38
ff_dirac_hpel_filter_v_ ## EXT(dstv-MMSIZE, src-MMSIZE, stride, width+MMSIZE+5); \
39
ff_dirac_hpel_filter_h_ ## EXT(dsth, src, width); \
40
ff_dirac_hpel_filter_h_ ## EXT(dstc, dstv, width); \
41
\
42
dsth += stride; \
43
dstv += stride; \
44
dstc += stride; \
45
src += stride; \
46
} \
47
}
48
49
#if !ARCH_X86_64
50
HPEL_FILTER
(8, mmx)
51
#endif
52
HPEL_FILTER
(16, sse2)
53
54
#define PIXFUNC(PFX, IDX, EXT) \
55
/*MMXDISABLEDc->PFX ## _dirac_pixels_tab[0][IDX] = ff_ ## PFX ## _dirac_pixels8_ ## EXT;*/
\
56
c->PFX ## _dirac_pixels_tab[1][IDX] = ff_ ## PFX ## _dirac_pixels16_ ## EXT; \
57
c->PFX ## _dirac_pixels_tab[2][IDX] = ff_ ## PFX ## _dirac_pixels32_ ## EXT
58
59
void
ff_diracdsp_init_mmx
(
DiracDSPContext
*
c
)
60
{
61
int
mm_flags =
av_get_cpu_flags
();
62
63
#if HAVE_YASM
64
c->
add_dirac_obmc
[0] =
ff_add_dirac_obmc8_mmx
;
65
#if !ARCH_X86_64
66
c->
add_dirac_obmc
[1] =
ff_add_dirac_obmc16_mmx
;
67
c->
add_dirac_obmc
[2] =
ff_add_dirac_obmc32_mmx
;
68
c->
dirac_hpel_filter
= dirac_hpel_filter_mmx;
69
c->
add_rect_clamped
=
ff_add_rect_clamped_mmx
;
70
c->
put_signed_rect_clamped
=
ff_put_signed_rect_clamped_mmx
;
71
#endif
72
#endif
73
74
#if HAVE_MMX_INLINE
75
PIXFUNC
(
put
, 0, mmx);
76
PIXFUNC
(
avg
, 0, mmx);
77
#endif
78
79
#if HAVE_MMXEXT_INLINE
80
if
(mm_flags &
AV_CPU_FLAG_MMX2
) {
81
PIXFUNC
(
avg
, 0, mmxext);
82
}
83
#endif
84
85
if
(mm_flags &
AV_CPU_FLAG_SSE2
) {
86
#if HAVE_YASM
87
c->
dirac_hpel_filter
= dirac_hpel_filter_sse2;
88
c->
add_rect_clamped
=
ff_add_rect_clamped_sse2
;
89
c->
put_signed_rect_clamped
=
ff_put_signed_rect_clamped_sse2
;
90
91
c->
add_dirac_obmc
[1] =
ff_add_dirac_obmc16_sse2
;
92
c->
add_dirac_obmc
[2] =
ff_add_dirac_obmc32_sse2
;
93
#endif
94
#if HAVE_SSE2_INLINE
95
c->
put_dirac_pixels_tab
[1][0] =
ff_put_dirac_pixels16_sse2
;
96
c->
avg_dirac_pixels_tab
[1][0] =
ff_avg_dirac_pixels16_sse2
;
97
c->
put_dirac_pixels_tab
[2][0] =
ff_put_dirac_pixels32_sse2
;
98
c->
avg_dirac_pixels_tab
[2][0] =
ff_avg_dirac_pixels32_sse2
;
99
#endif
100
}
101
}
Generated on Sat May 25 2013 03:58:43 for FFmpeg by
1.8.2