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
h264pred_init_arm.c
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2009 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/avcodec.h
"
26
#include "
libavcodec/h264pred.h
"
27
28
void
ff_pred16x16_vert_neon
(
uint8_t
*
src
, ptrdiff_t
stride
);
29
void
ff_pred16x16_hor_neon
(
uint8_t
*
src
, ptrdiff_t
stride
);
30
void
ff_pred16x16_plane_neon
(
uint8_t
*
src
, ptrdiff_t
stride
);
31
void
ff_pred16x16_dc_neon
(
uint8_t
*
src
, ptrdiff_t
stride
);
32
void
ff_pred16x16_128_dc_neon
(
uint8_t
*
src
, ptrdiff_t
stride
);
33
void
ff_pred16x16_left_dc_neon
(
uint8_t
*
src
, ptrdiff_t
stride
);
34
void
ff_pred16x16_top_dc_neon
(
uint8_t
*
src
, ptrdiff_t
stride
);
35
36
void
ff_pred8x8_vert_neon
(
uint8_t
*
src
, ptrdiff_t
stride
);
37
void
ff_pred8x8_hor_neon
(
uint8_t
*
src
, ptrdiff_t
stride
);
38
void
ff_pred8x8_plane_neon
(
uint8_t
*
src
, ptrdiff_t
stride
);
39
void
ff_pred8x8_dc_neon
(
uint8_t
*
src
, ptrdiff_t
stride
);
40
void
ff_pred8x8_128_dc_neon
(
uint8_t
*
src
, ptrdiff_t
stride
);
41
void
ff_pred8x8_left_dc_neon
(
uint8_t
*
src
, ptrdiff_t
stride
);
42
void
ff_pred8x8_top_dc_neon
(
uint8_t
*
src
, ptrdiff_t
stride
);
43
void
ff_pred8x8_l0t_dc_neon
(
uint8_t
*
src
, ptrdiff_t
stride
);
44
void
ff_pred8x8_0lt_dc_neon
(
uint8_t
*
src
, ptrdiff_t
stride
);
45
void
ff_pred8x8_l00_dc_neon
(
uint8_t
*
src
, ptrdiff_t
stride
);
46
void
ff_pred8x8_0l0_dc_neon
(
uint8_t
*
src
, ptrdiff_t
stride
);
47
48
static
av_cold
void
h264_pred_init_neon
(
H264PredContext
*h,
int
codec_id
,
49
const
int
bit_depth,
50
const
int
chroma_format_idc)
51
{
52
#if HAVE_NEON
53
const
int
high_depth = bit_depth > 8;
54
55
if
(high_depth)
56
return
;
57
if
(chroma_format_idc == 1){
58
h->
pred8x8
[
VERT_PRED8x8
] =
ff_pred8x8_vert_neon
;
59
h->
pred8x8
[
HOR_PRED8x8
] =
ff_pred8x8_hor_neon
;
60
if
(codec_id !=
AV_CODEC_ID_VP7
&& codec_id !=
AV_CODEC_ID_VP8
)
61
h->
pred8x8
[
PLANE_PRED8x8
] =
ff_pred8x8_plane_neon
;
62
h->
pred8x8
[
DC_128_PRED8x8
] =
ff_pred8x8_128_dc_neon
;
63
if
(codec_id !=
AV_CODEC_ID_RV40
&& codec_id !=
AV_CODEC_ID_VP7
&&
64
codec_id !=
AV_CODEC_ID_VP8
) {
65
h->
pred8x8
[
DC_PRED8x8
] =
ff_pred8x8_dc_neon
;
66
h->
pred8x8
[
LEFT_DC_PRED8x8
] =
ff_pred8x8_left_dc_neon
;
67
h->
pred8x8
[
TOP_DC_PRED8x8
] =
ff_pred8x8_top_dc_neon
;
68
h->
pred8x8
[
ALZHEIMER_DC_L0T_PRED8x8
] =
ff_pred8x8_l0t_dc_neon
;
69
h->
pred8x8
[
ALZHEIMER_DC_0LT_PRED8x8
] =
ff_pred8x8_0lt_dc_neon
;
70
h->
pred8x8
[
ALZHEIMER_DC_L00_PRED8x8
] =
ff_pred8x8_l00_dc_neon
;
71
h->
pred8x8
[
ALZHEIMER_DC_0L0_PRED8x8
] =
ff_pred8x8_0l0_dc_neon
;
72
}
73
}
74
75
h->
pred16x16
[
DC_PRED8x8
] =
ff_pred16x16_dc_neon
;
76
h->
pred16x16
[
VERT_PRED8x8
] =
ff_pred16x16_vert_neon
;
77
h->
pred16x16
[
HOR_PRED8x8
] =
ff_pred16x16_hor_neon
;
78
h->
pred16x16
[
LEFT_DC_PRED8x8
] =
ff_pred16x16_left_dc_neon
;
79
h->
pred16x16
[
TOP_DC_PRED8x8
] =
ff_pred16x16_top_dc_neon
;
80
h->
pred16x16
[
DC_128_PRED8x8
] =
ff_pred16x16_128_dc_neon
;
81
if
(codec_id !=
AV_CODEC_ID_SVQ3
&& codec_id !=
AV_CODEC_ID_RV40
&&
82
codec_id !=
AV_CODEC_ID_VP7
&& codec_id !=
AV_CODEC_ID_VP8
)
83
h->
pred16x16
[
PLANE_PRED8x8
] =
ff_pred16x16_plane_neon
;
84
#endif // HAVE_NEON
85
}
86
87
av_cold
void
ff_h264_pred_init_arm
(
H264PredContext
*h,
int
codec_id
,
88
int
bit_depth,
const
int
chroma_format_idc)
89
{
90
int
cpu_flags =
av_get_cpu_flags
();
91
92
if
(
have_neon
(cpu_flags))
93
h264_pred_init_neon
(h, codec_id, bit_depth, chroma_format_idc);
94
}
Generated on Fri Dec 5 2014 04:41:50 for FFmpeg by
1.8.2