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