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