FFmpeg
libavcodec
hwconfig.h
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
#ifndef AVCODEC_HWCONFIG_H
20
#define AVCODEC_HWCONFIG_H
21
22
#include "
avcodec.h
"
23
#include "
hwaccels.h
"
24
25
26
#define HWACCEL_CAP_ASYNC_SAFE (1 << 0)
27
28
29
typedef
struct
AVCodecHWConfigInternal
{
30
/**
31
* This is the structure which will be returned to the user by
32
* avcodec_get_hw_config().
33
*/
34
AVCodecHWConfig
public
;
35
/**
36
* If this configuration uses a hwaccel, a pointer to it.
37
* If not, NULL.
38
*/
39
const
AVHWAccel
*
hwaccel
;
40
}
AVCodecHWConfigInternal
;
41
42
43
// These macros are used to simplify AVCodecHWConfigInternal definitions.
44
45
#define HW_CONFIG_HWACCEL(device, frames, ad_hoc, format, device_type_, name) \
46
&(const AVCodecHWConfigInternal) { \
47
.public = { \
48
.pix_fmt = AV_PIX_FMT_ ## format, \
49
.methods = (device ? AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX : 0) | \
50
(frames ? AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX : 0) | \
51
(ad_hoc ? AV_CODEC_HW_CONFIG_METHOD_AD_HOC : 0), \
52
.device_type = AV_HWDEVICE_TYPE_ ## device_type_, \
53
}, \
54
.hwaccel = &name, \
55
}
56
57
#define HW_CONFIG_INTERNAL(format) \
58
&(const AVCodecHWConfigInternal) { \
59
.public = { \
60
.pix_fmt = AV_PIX_FMT_ ## format, \
61
.methods = AV_CODEC_HW_CONFIG_METHOD_INTERNAL, \
62
.device_type = AV_HWDEVICE_TYPE_NONE, \
63
}, \
64
.hwaccel = NULL, \
65
}
66
67
#define HWACCEL_DXVA2(codec) \
68
HW_CONFIG_HWACCEL(1, 1, 1, DXVA2_VLD, DXVA2, ff_ ## codec ## _dxva2_hwaccel)
69
#define HWACCEL_D3D11VA2(codec) \
70
HW_CONFIG_HWACCEL(1, 1, 0, D3D11, D3D11VA, ff_ ## codec ## _d3d11va2_hwaccel)
71
#define HWACCEL_NVDEC(codec) \
72
HW_CONFIG_HWACCEL(1, 1, 0, CUDA, CUDA, ff_ ## codec ## _nvdec_hwaccel)
73
#define HWACCEL_VAAPI(codec) \
74
HW_CONFIG_HWACCEL(1, 1, 1, VAAPI, VAAPI, ff_ ## codec ## _vaapi_hwaccel)
75
#define HWACCEL_VDPAU(codec) \
76
HW_CONFIG_HWACCEL(1, 1, 1, VDPAU, VDPAU, ff_ ## codec ## _vdpau_hwaccel)
77
#define HWACCEL_VIDEOTOOLBOX(codec) \
78
HW_CONFIG_HWACCEL(1, 1, 1, VIDEOTOOLBOX, VIDEOTOOLBOX, ff_ ## codec ## _videotoolbox_hwaccel)
79
#define HWACCEL_D3D11VA(codec) \
80
HW_CONFIG_HWACCEL(0, 0, 1, D3D11VA_VLD, NONE, ff_ ## codec ## _d3d11va_hwaccel)
81
82
#define HW_CONFIG_ENCODER(device, frames, ad_hoc, format, device_type_) \
83
&(const AVCodecHWConfigInternal) { \
84
.public = { \
85
.pix_fmt = AV_PIX_FMT_ ## format, \
86
.methods = (device ? AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX : 0) | \
87
(frames ? AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX : 0) | \
88
(ad_hoc ? AV_CODEC_HW_CONFIG_METHOD_AD_HOC : 0), \
89
.device_type = AV_HWDEVICE_TYPE_ ## device_type_, \
90
}, \
91
.hwaccel = NULL, \
92
}
93
94
#define HW_CONFIG_ENCODER_DEVICE(format, device_type_) \
95
HW_CONFIG_ENCODER(1, 0, 0, format, device_type_)
96
97
#define HW_CONFIG_ENCODER_FRAMES(format, device_type_) \
98
HW_CONFIG_ENCODER(0, 1, 0, format, device_type_)
99
100
#endif
/* AVCODEC_HWCONFIG_H */
hwaccels.h
AVHWAccel
Definition:
avcodec.h:2067
AVCodecHWConfigInternal
Definition:
hwconfig.h:29
avcodec.h
AVCodecHWConfigInternal::hwaccel
const AVHWAccel * hwaccel
If this configuration uses a hwaccel, a pointer to it.
Definition:
hwconfig.h:39
AVCodecHWConfig
Definition:
codec.h:350
Generated on Wed Aug 24 2022 21:41:29 for FFmpeg by
1.8.17