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 = [