]> git.sesse.net Git - ffmpeg/blob - libavfilter/vaapi_vpp.h
Merge commit 'f25117a4286505b38c12466ef04459471de3c1b0'
[ffmpeg] / libavfilter / vaapi_vpp.h
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 AVFILTER_VAAPI_VPP_H
20 #define AVFILTER_VAAPI_VPP_H
21
22 #include <va/va.h>
23 #include <va/va_vpp.h>
24
25 #include "libavutil/hwcontext.h"
26 #include "libavutil/hwcontext_vaapi.h"
27
28 #include "avfilter.h"
29
30 typedef struct VAAPIVPPContext {
31     const AVClass *class;
32
33     AVVAAPIDeviceContext *hwctx;
34     AVBufferRef *device_ref;
35
36     int valid_ids;
37     VAConfigID  va_config;
38     VAContextID va_context;
39
40     AVBufferRef       *input_frames_ref;
41     AVHWFramesContext *input_frames;
42
43     enum AVPixelFormat output_format;
44     int output_width;   // computed width
45     int output_height;  // computed height
46
47     VABufferID         filter_buffers[VAProcFilterCount];
48     int                nb_filter_buffers;
49
50     int (*build_filter_params)(AVFilterContext *avctx);
51
52     void (*pipeline_uninit)(AVFilterContext *avctx);
53 } VAAPIVPPContext;
54
55 void ff_vaapi_vpp_ctx_init(AVFilterContext *avctx);
56
57 void ff_vaapi_vpp_ctx_uninit(AVFilterContext *avctx);
58
59 int ff_vaapi_vpp_query_formats(AVFilterContext *avctx);
60
61 void ff_vaapi_vpp_pipeline_uninit(AVFilterContext *avctx);
62
63 int ff_vaapi_vpp_config_input(AVFilterLink *inlink);
64
65 int ff_vaapi_vpp_config_output(AVFilterLink *outlink);
66
67 int ff_vaapi_vpp_colour_standard(enum AVColorSpace av_cs);
68
69 int ff_vaapi_vpp_make_param_buffers(AVFilterContext *avctx,
70                                     int type,
71                                     const void *data,
72                                     size_t size,
73                                     int count);
74
75 int ff_vaapi_vpp_render_picture(AVFilterContext *avctx,
76                                 VAProcPipelineParameterBuffer *params,
77                                 VASurfaceID output_surface);
78
79 #endif /* AVFILTER_VAAPI_VPP_H */