From beaa914680fcd8748b4b41e31ddacbcbd39503e9 Mon Sep 17 00:00:00 2001 From: claude-noether Date: Sun, 10 May 2026 06:48:49 +0000 Subject: [PATCH] fresnel-fourier iter4 Phase 6 commit C: picture.c VP9 dispatch + 2 buffer-type cases MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 5 sites: 1. include block: add #include "vp9.h". 2. codec_set_controls: add VP9 case calling vp9_set_controls(). 3. codec_store_buffer VAPictureParameterBufferType: VP9 inner case memcpy'ing into surface_object->params.vp9.picture. 4. codec_store_buffer VASliceParameterBufferType: VP9 inner case memcpy'ing into surface_object->params.vp9.slice. 5. (No reset in RequestBeginPicture — VP9 has no iqmatrix_set/ probability_set-style flag, Picture/Slice are unconditionally populated by VAAPI consumer per frame.) Per Phase 2 B12: NO buffer.c changes — VP9 uses Picture+Slice+Data which are already in the iter3 allow-list. Per memory feedback_runtime_enumerates_allowlists.md plan for Commit D fix-forward if a runtime miss surfaces; predicted clean. Verified end-to-end on fresnel: - vainfo enumerates VAProfileVP9Profile0 alongside H.264 + HEVC. - LIBVA_DRIVER_NAME=v4l2_request ffmpeg -hwaccel vaapi VP9 decode exits 0 (criterion 3 PASS): 5 frames decoded at 0.307x speed, cap_pool_init OK, no kernel ioctl errors. - mpv vp9-vaapi engagement still SW-fallback (iter4-B2 backlog — mpv-DRM device-create path doesn't honor LIBVA_DRIVER_NAME the way ffmpeg-vaapi does; investigation deferred). Co-Authored-By: Claude Opus 4.7 (1M context) --- src/picture.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/picture.c b/src/picture.c index 4508adb..c126a64 100644 --- a/src/picture.c +++ b/src/picture.c @@ -35,6 +35,7 @@ #include "h265.h" #include "mpeg2.h" #include "vp8.h" +#include "vp9.h" #include #include @@ -114,6 +115,12 @@ static VAStatus codec_store_buffer(struct request_data *driver_data, sizeof(surface_object->params.vp8.picture)); break; + case VAProfileVP9Profile0: + memcpy(&surface_object->params.vp9.picture, + buffer_object->data, + sizeof(surface_object->params.vp9.picture)); + break; + default: break; } @@ -153,6 +160,12 @@ static VAStatus codec_store_buffer(struct request_data *driver_data, sizeof(surface_object->params.vp8.slice)); break; + case VAProfileVP9Profile0: + memcpy(&surface_object->params.vp9.slice, + buffer_object->data, + sizeof(surface_object->params.vp9.slice)); + break; + default: break; } @@ -257,6 +270,12 @@ static VAStatus codec_set_controls(struct request_data *driver_data, return VA_STATUS_ERROR_OPERATION_FAILED; break; + case VAProfileVP9Profile0: + rc = vp9_set_controls(driver_data, context, surface_object); + if (rc < 0) + return VA_STATUS_ERROR_OPERATION_FAILED; + break; + default: return VA_STATUS_ERROR_UNSUPPORTED_PROFILE; }