From c4f05bdf607b276cd18e7c86d2459e3dc8faffc1 Mon Sep 17 00:00:00 2001 From: Thong Thai Date: Wed, 14 Jan 2026 20:55:44 +0000 Subject: [PATCH] frontends/va: include picture_*.c based on selected codec Only add the appropriate picture_{h264,h264_enc,vc1,...}.c file when the corresponding codec is enabled via the -Dvideo-codecs flag. Add stub functions to va_private.h, so that the code in decode.c and encode.c remains untouched. Signed-off-by: Thong Thai Reviewed-by: David Rosca Part-of: --- src/gallium/frontends/va/meson.build | 56 ++++++- src/gallium/frontends/va/va_private.h | 205 +++++++++++++++++++------- 2 files changed, 203 insertions(+), 58 deletions(-) diff --git a/src/gallium/frontends/va/meson.build b/src/gallium/frontends/va/meson.build index 720dc2d2208..dab8fd99db5 100644 --- a/src/gallium/frontends/va/meson.build +++ b/src/gallium/frontends/va/meson.build @@ -1,15 +1,57 @@ # Copyright © 2017-2019 Intel Corporation # SPDX-License-Identifier: MIT +libva_files = files( + 'buffer.c', 'config.c', 'context.c', 'display.c', + 'picture.c', 'surface.c', 'decode.c', + 'image.c', 'postproc.c', 'subpicture.c' +) + +if _codecs.contains('jpegdec') + libva_files += files('picture_mjpeg.c') +endif +if _codecs.contains('mpeg12dec') + libva_files += files('picture_mpeg12.c') +endif +if _codecs.contains('mpeg4dec') + libva_files += files('picture_mpeg4.c') +endif +if _codecs.contains('vc1dec') + libva_files += files('picture_vc1.c') +endif +if _codecs.contains('vp9dec') + libva_files += files('picture_vp9.c') +endif +if _codecs.contains('h264dec') + libva_files += files('picture_h264.c') +endif +if _codecs.contains('h265dec') + libva_files += files('picture_hevc.c') +endif +if _codecs.contains('av1dec') + libva_files += files('picture_av1.c') +endif + +has_encode = false +if _codecs.contains('h264enc') + libva_files += files('picture_h264_enc.c') + has_encode = true +endif +if _codecs.contains('h265enc') + libva_files += files('picture_hevc_enc.c') + has_encode = true +endif +if _codecs.contains('av1enc') + libva_files += files('picture_av1_enc.c') + has_encode = true +endif +if has_encode + libva_files += files('encode.c') +endif + libva_st = static_library( 'va_st', - files( - 'buffer.c', 'config.c', 'context.c', 'display.c', 'image.c', 'picture.c', - 'picture_mpeg12.c', 'picture_h264.c', 'picture_hevc.c', - 'picture_vc1.c', 'picture_mjpeg.c', 'picture_vp9.c','picture_av1.c','postproc.c', - 'subpicture.c', 'surface.c', 'picture_h264_enc.c', 'picture_hevc_enc.c', - 'picture_av1_enc.c', 'encode.c', 'decode.c', - ), + libva_files, c_args : [ '-DVA_DRIVER_INIT_FUNC=__vaDriverInit_@0@_@1@'.format( libva_version[0], libva_version[1] diff --git a/src/gallium/frontends/va/va_private.h b/src/gallium/frontends/va/va_private.h index a4565f105bc..f38dc8a66d7 100644 --- a/src/gallium/frontends/va/va_private.h +++ b/src/gallium/frontends/va/va_private.h @@ -568,60 +568,163 @@ VAStatus vlVaPostProcCompositor(vlVaDriver *drv, struct pipe_video_buffer *src, enum vl_compositor_deinterlace deinterlace, struct pipe_vpp_desc *param); void vlVaGetReferenceFrame(vlVaDriver *drv, VASurfaceID surface_id, struct pipe_video_buffer **ref_frame); VAStatus vlVaHandleDecBufferType(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf); -void vlVaHandlePictureParameterBufferMPEG12(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf); -void vlVaHandleIQMatrixBufferMPEG12(vlVaContext *context, vlVaBuffer *buf); -void vlVaHandleSliceParameterBufferMPEG12(vlVaContext *context, vlVaBuffer *buf); -void vlVaHandlePictureParameterBufferH264(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf); -void vlVaHandleIQMatrixBufferH264(vlVaContext *context, vlVaBuffer *buf); -void vlVaHandleSliceParameterBufferH264(vlVaContext *context, vlVaBuffer *buf); -void vlVaHandlePictureParameterBufferVC1(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf); -void vlVaHandleSliceParameterBufferVC1(vlVaContext *context, vlVaBuffer *buf); -void vlVaGetJpegSliceHeader(vlVaContext *context); -void vlVaHandlePictureParameterBufferHEVC(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf); -void vlVaHandleIQMatrixBufferHEVC(vlVaContext *context, vlVaBuffer *buf); -void vlVaHandleSliceParameterBufferHEVC(vlVaContext *context, vlVaBuffer *buf); -void vlVaHandlePictureParameterBufferMJPEG(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf); -void vlVaHandleIQMatrixBufferMJPEG(vlVaContext *context, vlVaBuffer *buf); -void vlVaHandleHuffmanTableBufferType(vlVaContext *context, vlVaBuffer *buf); -void vlVaHandleSliceParameterBufferMJPEG(vlVaContext *context, vlVaBuffer *buf); -void vlVaHandlePictureParameterBufferVP9(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf); -void vlVaHandleSliceParameterBufferVP9(vlVaContext *context, vlVaBuffer *buf); -void vlVaDecoderVP9BitstreamHeader(vlVaContext *context, vlVaBuffer *buf); -void vlVaDecoderHEVCBitstreamHeader(vlVaContext *context, vlVaBuffer *buf); -VAStatus vlVaHandlePictureParameterBufferAV1(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf); -void vlVaHandleSliceParameterBufferAV1(vlVaContext *context, vlVaBuffer *buf); + +#if VIDEO_CODEC_MPEG12DEC +#define PROC +#define TAIL +#else +#define PROC static inline +#define TAIL {} +#endif +PROC void vlVaHandlePictureParameterBufferMPEG12(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf) TAIL; +PROC void vlVaHandleIQMatrixBufferMPEG12(vlVaContext *context, vlVaBuffer *buf) TAIL; +PROC void vlVaHandleSliceParameterBufferMPEG12(vlVaContext *context, vlVaBuffer *buf) TAIL; +#undef PROC +#undef TAIL + +#if VIDEO_CODEC_JPEGDEC +#define PROC +#define TAIL +#else +#define PROC static inline +#define TAIL {} +#endif +PROC void vlVaHandlePictureParameterBufferMJPEG(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf) TAIL; +PROC void vlVaHandleIQMatrixBufferMJPEG(vlVaContext *context, vlVaBuffer *buf) TAIL; +PROC void vlVaHandleHuffmanTableBufferType(vlVaContext *context, vlVaBuffer *buf) TAIL; +PROC void vlVaHandleSliceParameterBufferMJPEG(vlVaContext *context, vlVaBuffer *buf) TAIL; +PROC void vlVaGetJpegSliceHeader(vlVaContext *context) TAIL; +#undef PROC +#undef TAIL + +#if VIDEO_CODEC_VC1DEC +#define PROC +#define TAIL +#else +#define PROC static inline +#define TAIL {} +#endif +PROC void vlVaHandlePictureParameterBufferVC1(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf) TAIL; +PROC void vlVaHandleSliceParameterBufferVC1(vlVaContext *context, vlVaBuffer *buf) TAIL; +#undef PROC +#undef TAIL + +#if VIDEO_CODEC_VP9DEC +#define PROC +#define TAIL +#else +#define PROC static inline +#define TAIL {} +#endif +PROC void vlVaHandlePictureParameterBufferVP9(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf) TAIL; +PROC void vlVaHandleSliceParameterBufferVP9(vlVaContext *context, vlVaBuffer *buf) TAIL; +PROC void vlVaDecoderVP9BitstreamHeader(vlVaContext *context, vlVaBuffer *buf) TAIL; +#undef PROC +#undef TAIL + +#if VIDEO_CODEC_H264DEC +#define PROC +#define TAIL +#else +#define PROC static inline +#define TAIL {} +#endif +PROC void vlVaHandlePictureParameterBufferH264(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf) TAIL; +PROC void vlVaHandleIQMatrixBufferH264(vlVaContext *context, vlVaBuffer *buf) TAIL; +PROC void vlVaHandleSliceParameterBufferH264(vlVaContext *context, vlVaBuffer *buf) TAIL; +#undef PROC +#undef TAIL + +#if VIDEO_CODEC_H265DEC +#define PROC +#define TAIL +#else +#define PROC static inline +#define TAIL {} +#endif +PROC void vlVaHandlePictureParameterBufferHEVC(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf) TAIL; +PROC void vlVaHandleIQMatrixBufferHEVC(vlVaContext *context, vlVaBuffer *buf) TAIL; +PROC void vlVaHandleSliceParameterBufferHEVC(vlVaContext *context, vlVaBuffer *buf) TAIL; +PROC void vlVaDecoderHEVCBitstreamHeader(vlVaContext *context, vlVaBuffer *buf) TAIL; +#undef PROC +#undef TAIL + +#if VIDEO_CODEC_AV1DEC +#define PROC +#define TAIL +#define TAIL_S +#else +#define PROC static inline +#define TAIL {} +#define TAIL_S {return VA_STATUS_ERROR_UNIMPLEMENTED;} +#endif +PROC VAStatus vlVaHandlePictureParameterBufferAV1(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf) TAIL_S; +PROC void vlVaHandleSliceParameterBufferAV1(vlVaContext *context, vlVaBuffer *buf) TAIL; +#undef PROC +#undef TAIL +#undef TAIL_S + VAStatus vlVaHandleEncBufferType(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf); void vlVaHandleVAEncMiscParameterTypeQualityLevel(struct pipe_enc_quality_modes *p, vlVaQualityBits *in); -VAStatus vlVaHandleVAEncPictureParameterBufferTypeH264(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf); -VAStatus vlVaHandleVAEncSliceParameterBufferTypeH264(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf); -VAStatus vlVaHandleVAEncSequenceParameterBufferTypeH264(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf); -VAStatus vlVaHandleVAEncMiscParameterTypeRateControlH264(vlVaContext *context, VAEncMiscParameterBuffer *buf); -VAStatus vlVaHandleVAEncMiscParameterTypeFrameRateH264(vlVaContext *context, VAEncMiscParameterBuffer *buf); -VAStatus vlVaHandleVAEncPackedHeaderDataBufferTypeH264(vlVaContext *context, vlVaBuffer *buf); -VAStatus vlVaHandleVAEncMiscParameterTypeTemporalLayerH264(vlVaContext *context, VAEncMiscParameterBuffer *buf); -VAStatus vlVaHandleVAEncMiscParameterTypeQualityLevelH264(vlVaContext *context, VAEncMiscParameterBuffer *buf); -VAStatus vlVaHandleVAEncMiscParameterTypeMaxFrameSizeH264(vlVaContext *context, VAEncMiscParameterBuffer *buf); -VAStatus vlVaHandleVAEncMiscParameterTypeHRDH264(vlVaContext *context, VAEncMiscParameterBuffer *buf); -VAStatus vlVaHandleVAEncPictureParameterBufferTypeHEVC(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf); -VAStatus vlVaHandleVAEncSliceParameterBufferTypeHEVC(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf); -VAStatus vlVaHandleVAEncSequenceParameterBufferTypeHEVC(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf); -VAStatus vlVaHandleVAEncMiscParameterTypeRateControlHEVC(vlVaContext *context, VAEncMiscParameterBuffer *buf); -VAStatus vlVaHandleVAEncMiscParameterTypeFrameRateHEVC(vlVaContext *context, VAEncMiscParameterBuffer *buf); -VAStatus vlVaHandleVAEncPackedHeaderDataBufferTypeHEVC(vlVaContext *context, vlVaBuffer *buf); -VAStatus vlVaHandleVAEncMiscParameterTypeQualityLevelHEVC(vlVaContext *context, VAEncMiscParameterBuffer *buf); -VAStatus vlVaHandleVAEncMiscParameterTypeMaxFrameSizeHEVC(vlVaContext *context, VAEncMiscParameterBuffer *buf); -VAStatus vlVaHandleVAEncMiscParameterTypeHRDHEVC(vlVaContext *context, VAEncMiscParameterBuffer *buf); -VAStatus vlVaHandleVAEncMiscParameterTypeTemporalLayerHEVC(vlVaContext *context, VAEncMiscParameterBuffer *buf); + +#if VIDEO_CODEC_H264ENC +#define PROC +#define TAIL +#else +#define PROC static inline +#define TAIL {return VA_STATUS_ERROR_UNIMPLEMENTED;} +#endif +PROC VAStatus vlVaHandleVAEncPictureParameterBufferTypeH264(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf) TAIL; +PROC VAStatus vlVaHandleVAEncSliceParameterBufferTypeH264(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf) TAIL; +PROC VAStatus vlVaHandleVAEncSequenceParameterBufferTypeH264(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf) TAIL; +PROC VAStatus vlVaHandleVAEncMiscParameterTypeRateControlH264(vlVaContext *context, VAEncMiscParameterBuffer *buf) TAIL; +PROC VAStatus vlVaHandleVAEncMiscParameterTypeFrameRateH264(vlVaContext *context, VAEncMiscParameterBuffer *buf) TAIL; +PROC VAStatus vlVaHandleVAEncPackedHeaderDataBufferTypeH264(vlVaContext *context, vlVaBuffer *buf) TAIL; +PROC VAStatus vlVaHandleVAEncMiscParameterTypeTemporalLayerH264(vlVaContext *context, VAEncMiscParameterBuffer *buf) TAIL; +PROC VAStatus vlVaHandleVAEncMiscParameterTypeQualityLevelH264(vlVaContext *context, VAEncMiscParameterBuffer *buf) TAIL; +PROC VAStatus vlVaHandleVAEncMiscParameterTypeMaxFrameSizeH264(vlVaContext *context, VAEncMiscParameterBuffer *buf) TAIL; +PROC VAStatus vlVaHandleVAEncMiscParameterTypeHRDH264(vlVaContext *context, VAEncMiscParameterBuffer *buf) TAIL; +#undef PROC +#undef TAIL + +#if VIDEO_CODEC_H265ENC +#define PROC +#define TAIL +#else +#define PROC static inline +#define TAIL {return VA_STATUS_ERROR_UNIMPLEMENTED;} +#endif +PROC VAStatus vlVaHandleVAEncPictureParameterBufferTypeHEVC(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf) TAIL; +PROC VAStatus vlVaHandleVAEncSliceParameterBufferTypeHEVC(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf) TAIL; +PROC VAStatus vlVaHandleVAEncSequenceParameterBufferTypeHEVC(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf) TAIL; +PROC VAStatus vlVaHandleVAEncMiscParameterTypeRateControlHEVC(vlVaContext *context, VAEncMiscParameterBuffer *buf) TAIL; +PROC VAStatus vlVaHandleVAEncMiscParameterTypeFrameRateHEVC(vlVaContext *context, VAEncMiscParameterBuffer *buf) TAIL; +PROC VAStatus vlVaHandleVAEncPackedHeaderDataBufferTypeHEVC(vlVaContext *context, vlVaBuffer *buf) TAIL; +PROC VAStatus vlVaHandleVAEncMiscParameterTypeQualityLevelHEVC(vlVaContext *context, VAEncMiscParameterBuffer *buf) TAIL; +PROC VAStatus vlVaHandleVAEncMiscParameterTypeMaxFrameSizeHEVC(vlVaContext *context, VAEncMiscParameterBuffer *buf) TAIL; +PROC VAStatus vlVaHandleVAEncMiscParameterTypeHRDHEVC(vlVaContext *context, VAEncMiscParameterBuffer *buf) TAIL; +PROC VAStatus vlVaHandleVAEncMiscParameterTypeTemporalLayerHEVC(vlVaContext *context, VAEncMiscParameterBuffer *buf) TAIL; +#undef PROC +#undef TAIL #if VA_CHECK_VERSION(1, 16, 0) -VAStatus vlVaHandleVAEncSequenceParameterBufferTypeAV1(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf); -VAStatus vlVaHandleVAEncPictureParameterBufferTypeAV1(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf); -VAStatus vlVaHandleVAEncMiscParameterTypeRateControlAV1(vlVaContext *context, VAEncMiscParameterBuffer *buf); -VAStatus vlVaHandleVAEncPackedHeaderDataBufferTypeAV1(vlVaContext *context, vlVaBuffer *buf); -VAStatus vlVaHandleVAEncMiscParameterTypeFrameRateAV1(vlVaContext *context, VAEncMiscParameterBuffer *buf); -VAStatus vlVaHandleVAEncMiscParameterTypeQualityLevelAV1(vlVaContext *context, VAEncMiscParameterBuffer *buf); -VAStatus vlVaHandleVAEncMiscParameterTypeMaxFrameSizeAV1(vlVaContext *context, VAEncMiscParameterBuffer *buf); -VAStatus vlVaHandleVAEncMiscParameterTypeHRDAV1(vlVaContext *context, VAEncMiscParameterBuffer *buf); -VAStatus vlVaHandleVAEncSliceParameterBufferTypeAV1(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf); +#if VIDEO_CODEC_AV1ENC +#define PROC +#define TAIL +#else +#define PROC static inline +#define TAIL {return VA_STATUS_ERROR_UNIMPLEMENTED;} +#endif +PROC VAStatus vlVaHandleVAEncSequenceParameterBufferTypeAV1(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf) TAIL; +PROC VAStatus vlVaHandleVAEncPictureParameterBufferTypeAV1(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf) TAIL; +PROC VAStatus vlVaHandleVAEncMiscParameterTypeRateControlAV1(vlVaContext *context, VAEncMiscParameterBuffer *buf) TAIL; +PROC VAStatus vlVaHandleVAEncPackedHeaderDataBufferTypeAV1(vlVaContext *context, vlVaBuffer *buf) TAIL; +PROC VAStatus vlVaHandleVAEncMiscParameterTypeFrameRateAV1(vlVaContext *context, VAEncMiscParameterBuffer *buf) TAIL; +PROC VAStatus vlVaHandleVAEncMiscParameterTypeQualityLevelAV1(vlVaContext *context, VAEncMiscParameterBuffer *buf) TAIL; +PROC VAStatus vlVaHandleVAEncMiscParameterTypeMaxFrameSizeAV1(vlVaContext *context, VAEncMiscParameterBuffer *buf) TAIL; +PROC VAStatus vlVaHandleVAEncMiscParameterTypeHRDAV1(vlVaContext *context, VAEncMiscParameterBuffer *buf) TAIL; +PROC VAStatus vlVaHandleVAEncSliceParameterBufferTypeAV1(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf) TAIL; +#undef PROC +#undef TAIL #endif #endif //VA_PRIVATE_H