vaapi_decode.h (3010B)
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_VAAPI_DECODE_H 20 #define AVCODEC_VAAPI_DECODE_H 21 22 #include <va/va.h> 23 24 #include "libavutil/frame.h" 25 #include "libavutil/hwcontext.h" 26 #include "libavutil/hwcontext_vaapi.h" 27 28 #include "avcodec.h" 29 30 static inline VASurfaceID ff_vaapi_get_surface_id(AVFrame *pic) 31 { 32 return (uintptr_t)pic->data[3]; 33 } 34 35 typedef struct VAAPIDecodePicture { 36 VASurfaceID output_surface; 37 38 int nb_param_buffers; 39 VABufferID *param_buffers; 40 int nb_param_buffers_allocated; 41 42 int nb_slices; 43 VABufferID *slice_buffers; 44 int nb_slice_buffers_allocated; 45 } VAAPIDecodePicture; 46 47 typedef struct VAAPIDecodeContext { 48 VAConfigID va_config; 49 VAContextID va_context; 50 51 AVHWDeviceContext *device; 52 AVVAAPIDeviceContext *hwctx; 53 54 AVHWFramesContext *frames; 55 AVVAAPIFramesContext *hwfc; 56 57 enum AVPixelFormat surface_format; 58 int surface_count; 59 60 VASurfaceAttrib pixel_format_attribute; 61 } VAAPIDecodeContext; 62 63 64 int ff_vaapi_decode_make_param_buffer(AVCodecContext *avctx, 65 VAAPIDecodePicture *pic, 66 int type, 67 const void *data, 68 size_t size); 69 70 int ff_vaapi_decode_make_slice_buffer(AVCodecContext *avctx, 71 VAAPIDecodePicture *pic, 72 const void *params_data, 73 int nb_params, 74 size_t params_size, 75 const void *slice_data, 76 size_t slice_size); 77 78 int ff_vaapi_decode_issue(AVCodecContext *avctx, 79 VAAPIDecodePicture *pic); 80 int ff_vaapi_decode_cancel(AVCodecContext *avctx, 81 VAAPIDecodePicture *pic); 82 83 int ff_vaapi_decode_init(AVCodecContext *avctx); 84 int ff_vaapi_decode_uninit(AVCodecContext *avctx); 85 86 int ff_vaapi_common_frame_params(AVCodecContext *avctx, 87 AVBufferRef *hw_frames_ctx); 88 89 #endif /* AVCODEC_VAAPI_DECODE_H */