From ce304ef5afaf596de5b2342d94e956a998a90b51 Mon Sep 17 00:00:00 2001 From: claude-noether Date: Tue, 12 May 2026 09:04:02 +0000 Subject: [PATCH] =?UTF-8?q?fresnel-fourier=20iter5b=20Phase=206=20commit?= =?UTF-8?q?=20A:=20NEW=20src/codec.{h,c}=20=E2=80=94=20pixelformat=5Ffor?= =?UTF-8?q?=5Fprofile=20helper?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a small helper that maps a VAProfile to its V4L2 OUTPUT-side pixel format FOURCC. Single source of truth, mirrors the per-profile probes in config.c::RequestQueryConfigProfiles (lines 138-188). Used by commits B + C in this series: - commit B: populate object_config->pixelformat at CreateConfig - commit C: surface.c reads the populated field to set OUTPUT format per-profile instead of hardcoded H264_SLICE Register in meson.build sources + headers. Signed-off-by: claude-noether --- src/codec.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++++ src/codec.h | 48 +++++++++++++++++++++++++++++++++++++++++++++++ src/meson.build | 6 ++++-- 3 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 src/codec.c create mode 100644 src/codec.h diff --git a/src/codec.c b/src/codec.c new file mode 100644 index 0000000..e408e6e --- /dev/null +++ b/src/codec.c @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2026 claude-noether + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "codec.h" + +#include + +unsigned int pixelformat_for_profile(VAProfile profile) +{ + switch (profile) { + case VAProfileMPEG2Simple: + case VAProfileMPEG2Main: + return V4L2_PIX_FMT_MPEG2_SLICE; + case VAProfileH264Main: + case VAProfileH264High: + case VAProfileH264ConstrainedBaseline: + case VAProfileH264MultiviewHigh: + case VAProfileH264StereoHigh: + return V4L2_PIX_FMT_H264_SLICE; + case VAProfileHEVCMain: + return V4L2_PIX_FMT_HEVC_SLICE; + case VAProfileVP8Version0_3: + return V4L2_PIX_FMT_VP8_FRAME; + case VAProfileVP9Profile0: + return V4L2_PIX_FMT_VP9_FRAME; + default: + return 0; + } +} diff --git a/src/codec.h b/src/codec.h new file mode 100644 index 0000000..dcbc0af --- /dev/null +++ b/src/codec.h @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2026 claude-noether + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef _CODEC_H_ +#define _CODEC_H_ + +#include + +/** + * pixelformat_for_profile - map a VA-API VAProfile to its V4L2 OUTPUT-side + * pixel format FOURCC. + * + * @profile: VAProfile enum value as passed to vaCreateConfig. + * + * Returns the V4L2_PIX_FMT_* constant that the V4L2 device's OUTPUT_MPLANE + * (bitstream-input) queue should be set to in order for the kernel + * stateless decoder to dispatch to the right codec_mode. Used at + * RequestCreateConfig to populate object_config->pixelformat, and read + * from there at RequestCreateSurfaces2 when computing the OUTPUT format + * for the V4L2 device. + * + * Returns 0 for an unhandled profile; caller is expected to either + * fall back to a safe default or refuse to proceed. + */ +unsigned int pixelformat_for_profile(VAProfile profile); + +#endif /* _CODEC_H_ */ diff --git a/src/meson.build b/src/meson.build index 0c1f020..c5fc6ac 100644 --- a/src/meson.build +++ b/src/meson.build @@ -49,7 +49,8 @@ sources = [ 'cap_pool.c', 'h265.c', 'vp8.c', - 'vp9.c' + 'vp9.c', + 'codec.c' ] headers = [ @@ -74,7 +75,8 @@ headers = [ 'cap_pool.h', 'h265.h', 'vp8.h', - 'vp9.h' + 'vp9.h', + 'codec.h' ] includes = [