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
arm
h264dsp_init_arm.c
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2010 Mans Rullgard <mans@mansr.com>
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 <stdint.h>
22
23
#include "
libavutil/attributes.h
"
24
#include "
libavutil/arm/cpu.h
"
25
#include "
libavcodec/h264dsp.h
"
26
#include "
libavcodec/arm/startcode.h
"
27
28
void
ff_h264_v_loop_filter_luma_neon
(
uint8_t
*pix,
int
stride
,
int
alpha
,
29
int
beta, int8_t *tc0);
30
void
ff_h264_h_loop_filter_luma_neon
(
uint8_t
*pix,
int
stride
,
int
alpha
,
31
int
beta, int8_t *tc0);
32
void
ff_h264_v_loop_filter_chroma_neon
(
uint8_t
*pix,
int
stride
,
int
alpha
,
33
int
beta, int8_t *tc0);
34
void
ff_h264_h_loop_filter_chroma_neon
(
uint8_t
*pix,
int
stride
,
int
alpha
,
35
int
beta, int8_t *tc0);
36
37
void
ff_weight_h264_pixels_16_neon
(
uint8_t
*dst,
int
stride
,
int
height
,
38
int
log2_den,
int
weight
,
int
offset
);
39
void
ff_weight_h264_pixels_8_neon
(
uint8_t
*dst,
int
stride
,
int
height
,
40
int
log2_den,
int
weight
,
int
offset
);
41
void
ff_weight_h264_pixels_4_neon
(
uint8_t
*dst,
int
stride
,
int
height
,
42
int
log2_den,
int
weight
,
int
offset
);
43
44
void
ff_biweight_h264_pixels_16_neon
(
uint8_t
*dst,
uint8_t
*
src
,
int
stride
,
45
int
height
,
int
log2_den,
int
weightd,
46
int
weights,
int
offset
);
47
void
ff_biweight_h264_pixels_8_neon
(
uint8_t
*dst,
uint8_t
*
src
,
int
stride
,
48
int
height
,
int
log2_den,
int
weightd,
49
int
weights,
int
offset
);
50
void
ff_biweight_h264_pixels_4_neon
(
uint8_t
*dst,
uint8_t
*
src
,
int
stride
,
51
int
height
,
int
log2_den,
int
weightd,
52
int
weights,
int
offset
);
53
54
void
ff_h264_idct_add_neon
(
uint8_t
*dst, int16_t *
block
,
int
stride
);
55
void
ff_h264_idct_dc_add_neon
(
uint8_t
*dst, int16_t *
block
,
int
stride
);
56
void
ff_h264_idct_add16_neon
(
uint8_t
*dst,
const
int
*block_offset,
57
int16_t *
block
,
int
stride
,
58
const
uint8_t
nnzc[6*8]);
59
void
ff_h264_idct_add16intra_neon
(
uint8_t
*dst,
const
int
*block_offset,
60
int16_t *
block
,
int
stride
,
61
const
uint8_t
nnzc[6*8]);
62
void
ff_h264_idct_add8_neon
(
uint8_t
**dest,
const
int
*block_offset,
63
int16_t *
block
,
int
stride
,
64
const
uint8_t
nnzc[6*8]);
65
66
void
ff_h264_idct8_add_neon
(
uint8_t
*dst, int16_t *
block
,
int
stride
);
67
void
ff_h264_idct8_dc_add_neon
(
uint8_t
*dst, int16_t *
block
,
int
stride
);
68
void
ff_h264_idct8_add4_neon
(
uint8_t
*dst,
const
int
*block_offset,
69
int16_t *
block
,
int
stride
,
70
const
uint8_t
nnzc[6*8]);
71
72
static
av_cold
void
h264dsp_init_neon
(
H264DSPContext
*
c
,
const
int
bit_depth,
73
const
int
chroma_format_idc)
74
{
75
#if HAVE_NEON
76
if
(bit_depth == 8) {
77
c->
h264_v_loop_filter_luma
=
ff_h264_v_loop_filter_luma_neon
;
78
c->
h264_h_loop_filter_luma
=
ff_h264_h_loop_filter_luma_neon
;
79
if
(chroma_format_idc == 1){
80
c->
h264_v_loop_filter_chroma
=
ff_h264_v_loop_filter_chroma_neon
;
81
c->
h264_h_loop_filter_chroma
=
ff_h264_h_loop_filter_chroma_neon
;
82
}
83
84
c->
weight_h264_pixels_tab
[0] =
ff_weight_h264_pixels_16_neon
;
85
c->
weight_h264_pixels_tab
[1] =
ff_weight_h264_pixels_8_neon
;
86
c->
weight_h264_pixels_tab
[2] =
ff_weight_h264_pixels_4_neon
;
87
88
c->
biweight_h264_pixels_tab
[0] =
ff_biweight_h264_pixels_16_neon
;
89
c->
biweight_h264_pixels_tab
[1] =
ff_biweight_h264_pixels_8_neon
;
90
c->
biweight_h264_pixels_tab
[2] =
ff_biweight_h264_pixels_4_neon
;
91
92
c->
h264_idct_add
=
ff_h264_idct_add_neon
;
93
c->
h264_idct_dc_add
=
ff_h264_idct_dc_add_neon
;
94
c->
h264_idct_add16
=
ff_h264_idct_add16_neon
;
95
c->
h264_idct_add16intra
=
ff_h264_idct_add16intra_neon
;
96
if
(chroma_format_idc <= 1)
97
c->
h264_idct_add8
=
ff_h264_idct_add8_neon
;
98
c->
h264_idct8_add
=
ff_h264_idct8_add_neon
;
99
c->
h264_idct8_dc_add
=
ff_h264_idct8_dc_add_neon
;
100
c->
h264_idct8_add4
=
ff_h264_idct8_add4_neon
;
101
}
102
#endif // HAVE_NEON
103
}
104
105
av_cold
void
ff_h264dsp_init_arm
(
H264DSPContext
*
c
,
const
int
bit_depth,
106
const
int
chroma_format_idc)
107
{
108
int
cpu_flags =
av_get_cpu_flags
();
109
110
if
(
have_setend
(cpu_flags))
111
c->
startcode_find_candidate
=
ff_startcode_find_candidate_armv6
;
112
if
(
have_neon
(cpu_flags))
113
h264dsp_init_neon
(c, bit_depth, chroma_format_idc);
114
}
Generated on Sun Sep 14 2014 18:55:52 for FFmpeg by
1.8.2