forked from marfrit/libva-v4l2-request-fourier
c6f81c653f
Imports the minimal "vainfo lists VAProfileAV1Profile0" layer from the operator's in-progress av1-iter1 branch (Phase 2 steps 1, 2 — commitsbed75c0+61db76eon av1-iter1). The Phase 3-5 bit-exact decode-side work stays in av1-iter1; this commit gives master the enumeration + fd-routing layer so consumers (ffmpeg-vaapi, firefox-fourier, chromium- fourier) at least see VAProfileAV1Profile0 today on RK3588. What this commit adds: - video_fd_vpu981 + media_fd_vpu981 slots to struct request_data (named to match av1-iter1's convention so the operator's Phase 3-5 merge resolves cleanly) - 4th-decoder probe loop in VA_DRIVER_INIT that walks hantro-vpu media nodes for an instance advertising V4L2_PIX_FMT_AV1_FRAME (AV1F) as OUTPUT pixfmt. RK3588 has 3 hantro-vpu instances all reporting driver="hantro-vpu" + model="hantro-vpu", so OUTPUT- format probe is the only DTS-independent discriminator. - 'a' kind in request_device_kind_for_profile (VAProfileAV1Profile0) + 'a' branch in request_switch_device_for_profile. - video_fd_vpu981 added to any_fd_supports_output_format helper (existing 3-slot loop missed the new fd; same off-by-one trap that bit ampere's av1-iter1 enumeration for a week). - VAProfileAV1Profile0 → V4L2_PIX_FMT_AV1_FRAME in pixelformat_for _profile. - VAProfileAV1Profile0 push in RequestQueryConfigProfiles + RequestQueryConfigEntrypoints + RequestCreateConfig switch. - vpu981 fd cleanup in RequestTerminate. - rpi_hevc_dec fd cleanup added at the same time (was already missing in master — fixed defensively). - V4L2_REQUEST_MAX_PROFILES bumped 13 → 14. Defensively sized for the post-Option-B-revert future: with iter39 Option B reverted (Hi10P + Main10 back in enumeration) plus AV1, max possible enumeration is 13. The per-group guards use `index < MAX - N` pattern; for a singleton push to succeed at index=13 we need MAX >= 14. Bumping now avoids the same off-by-one bug from silently dropping AV1 when Option B eventually reverts. What this commit does NOT add: - av1.{c,h} decode-side scaffolding (Phase 2 step 4 on av1-iter1 — ~177 LoC including a stub av1_set_controls that returns -1). When the operator's av1-iter1 Phase 3-5 work lands on master, those 500+ LoC + the stub will follow. Without them, consumers calling vaCreateContext(VAProfileAV1Profile0) succeed at the libva layer but ffmpeg-vaapi will fail at the first vaRenderPicture with an AV1-buffer-type rejection — clean error, no crash. Verified 2026-05-18 on ampere: $ env LIBVA_DRIVER_NAME=v4l2_request vainfo | grep VAProfile ... (10 prior profiles, unchanged) ... VAProfileAV1Profile0 : VAEntrypointVLD ✓ Probe log: "ampere-av1: vpu981 AV1 decoder at /dev/video4 + /dev/media3" Build clean on ampere with GCC 16.1.1; no warnings introduced. ampere's running module restored to the av1-iter1 build after the verification — this commit's .so was NOT permanently installed. Closes the headline acceptance criterion in marfrit/libva-v4l2-request-fourier#2 ("vainfo on ampere lists VAProfileAV1"). End-to-end AV1 decode bit-exactness is iter4 work that the av1-iter1 branch continues to drive. Co-Authored-By: claude-noether <claude-noether@reauktion.de>
67 lines
2.5 KiB
C
67 lines
2.5 KiB
C
/*
|
|
* Copyright (C) 2026 claude-noether <claude-noether@reauktion.de>
|
|
*
|
|
* 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 <linux/videodev2.h>
|
|
|
|
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:
|
|
case VAProfileH264High10:
|
|
return V4L2_PIX_FMT_H264_SLICE;
|
|
case VAProfileHEVCMain:
|
|
case VAProfileHEVCMain10:
|
|
return V4L2_PIX_FMT_HEVC_SLICE;
|
|
case VAProfileVP8Version0_3:
|
|
return V4L2_PIX_FMT_VP8_FRAME;
|
|
case VAProfileVP9Profile0:
|
|
return V4L2_PIX_FMT_VP9_FRAME;
|
|
case VAProfileAV1Profile0:
|
|
/*
|
|
* ampere-av1-enablement Phase 2: AV1 Profile 0 routes to
|
|
* vpu981 (RK3588's dedicated AV1 hantro). Per-codec ctrl
|
|
* dispatch (V4L2_CID_STATELESS_AV1_*) is NOT YET WIRED on
|
|
* master — vainfo lists the profile + RequestCreateConfig
|
|
* succeeds, but consumers that submit decode buffers hit
|
|
* a NOP path until the per-codec dispatch lands. The
|
|
* av1-iter1 operator branch has Phase 3 bit-exact bring-up
|
|
* underway; this commit gives master the bare enumeration +
|
|
* fd-routing layer so consumers like ffmpeg-vaapi at least
|
|
* see VAProfileAV1Profile0 today.
|
|
*/
|
|
return V4L2_PIX_FMT_AV1_FRAME;
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|