FFmpeg
2.6.9
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Modules
Pages
libavcodec
x86
blockdsp_init.c
Go to the documentation of this file.
1
/*
2
* This file is part of FFmpeg.
3
*
4
* FFmpeg is free software; you can redistribute it and/or
5
* modify it under the terms of the GNU Lesser General Public
6
* License as published by the Free Software Foundation; either
7
* version 2.1 of the License, or (at your option) any later version.
8
*
9
* FFmpeg is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
* Lesser General Public License for more details.
13
*
14
* You should have received a copy of the GNU Lesser General Public
15
* License along with FFmpeg; if not, write to the Free Software
16
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
*/
18
19
#include <stdint.h>
20
21
#include "
config.h
"
22
#include "
libavutil/attributes.h
"
23
#include "
libavutil/internal.h
"
24
#include "
libavutil/cpu.h
"
25
#include "
libavutil/x86/cpu.h
"
26
#include "
libavcodec/blockdsp.h
"
27
#include "
libavcodec/version.h
"
28
29
void
ff_clear_block_mmx
(int16_t *
block
);
30
void
ff_clear_block_sse
(int16_t *
block
);
31
void
ff_clear_blocks_mmx
(int16_t *blocks);
32
void
ff_clear_blocks_sse
(int16_t *blocks);
33
34
#if FF_API_XVMC
35
av_cold
void
ff_blockdsp_init_x86
(
BlockDSPContext
*
c
,
unsigned
high_bit_depth,
36
AVCodecContext
*avctx)
37
#else
38
av_cold
void
ff_blockdsp_init_x86
(
BlockDSPContext
*c,
unsigned
high_bit_depth)
39
#endif
/* FF_API_XVMC */
40
{
41
#if HAVE_YASM
42
int
cpu_flags =
av_get_cpu_flags
();
43
44
if
(!high_bit_depth) {
45
if
(
EXTERNAL_MMX
(cpu_flags)) {
46
c->
clear_block
=
ff_clear_block_mmx
;
47
c->
clear_blocks
=
ff_clear_blocks_mmx
;
48
}
49
50
/* XvMCCreateBlocks() may not allocate 16-byte aligned blocks */
51
if
(
CONFIG_XVMC
&& avctx->
hwaccel
&& avctx->
hwaccel
->
decode_mb
)
52
return
;
53
54
if
(
EXTERNAL_SSE
(cpu_flags)) {
55
c->
clear_block
=
ff_clear_block_sse
;
56
c->
clear_blocks
=
ff_clear_blocks_sse
;
57
}
58
}
59
#endif
/* HAVE_YASM */
60
}
EXTERNAL_MMX
#define EXTERNAL_MMX(flags)
Definition:
cpu.h:47
blockdsp.h
BlockDSPContext::clear_block
void(* clear_block)(int16_t *block)
Definition:
blockdsp.h:35
CONFIG_XVMC
#define CONFIG_XVMC
Definition:
config.h:465
BlockDSPContext::clear_blocks
void(* clear_blocks)(int16_t *blocks)
Definition:
blockdsp.h:36
cpu.h
EXTERNAL_SSE
#define EXTERNAL_SSE(flags)
Definition:
cpu.h:49
attributes.h
Macro definitions for various function/variable attributes.
AVCodecContext::hwaccel
struct AVHWAccel * hwaccel
Hardware accelerator in use.
Definition:
avcodec.h:2642
config.h
av_cold
#define av_cold
Definition:
attributes.h:74
ff_clear_block_sse
void ff_clear_block_sse(int16_t *block)
AVHWAccel::decode_mb
void(* decode_mb)(struct MpegEncContext *s)
Called for every Macroblock in a slice.
Definition:
avcodec.h:3383
version.h
Libavcodec version macros.
ff_clear_block_mmx
void ff_clear_block_mmx(int16_t *block)
internal.h
common internal API header
ff_blockdsp_init_x86
av_cold void ff_blockdsp_init_x86(BlockDSPContext *c, unsigned high_bit_depth)
Definition:
blockdsp_init.c:38
BlockDSPContext
Definition:
blockdsp.h:34
ff_clear_blocks_sse
void ff_clear_blocks_sse(int16_t *blocks)
cpu.h
AVCodecContext
main external API structure.
Definition:
avcodec.h:1239
av_get_cpu_flags
int av_get_cpu_flags(void)
Return the flags which specify extensions supported by the CPU.
Definition:
cpu.c:75
ff_clear_blocks_mmx
void ff_clear_blocks_mmx(int16_t *blocks)
c
static double c[64]
Definition:
vsrc_mptestsrc.c:87
block
static int16_t block[64]
Definition:
dct-test.c:110
Generated on Mon May 27 2019 05:45:07 for FFmpeg by
1.8.8