fresnel-fourier iter5b Phase 6 commit B: state-tracking — request.h field + config.c wire-up
request.h: add last_output_pixelformat to struct request_data, alongside
the existing last_output_{width,height} V4L2 device state cache. Gates
re-S_FMT on codec change in addition to resolution change.
config.c::RequestCreateConfig: wire up object_config->pixelformat
(previously dead field at config.h:46) by calling pixelformat_for_profile
on the active profile. The pixelformat field becomes the source of truth
that surface.c reads in commit C.
Signed-off-by: claude-noether <claude-noether@reauktion.de>
This commit is contained in:
@@ -36,6 +36,7 @@
|
|||||||
|
|
||||||
#include <hevc-ctrls.h>
|
#include <hevc-ctrls.h>
|
||||||
|
|
||||||
|
#include "codec.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "v4l2.h"
|
#include "v4l2.h"
|
||||||
|
|
||||||
@@ -97,6 +98,15 @@ VAStatus RequestCreateConfig(VADriverContextP context, VAProfile profile,
|
|||||||
|
|
||||||
config_object->profile = profile;
|
config_object->profile = profile;
|
||||||
config_object->entrypoint = entrypoint;
|
config_object->entrypoint = entrypoint;
|
||||||
|
/*
|
||||||
|
* iter5b: cache the V4L2 OUTPUT-side FOURCC for this profile so
|
||||||
|
* surface.c::CreateSurfaces2 can read it without re-running the
|
||||||
|
* profile→pixelformat mapping. Wires up the previously-dead
|
||||||
|
* pixelformat field at config.h:46. Returns 0 for unhandled
|
||||||
|
* profiles, which the switch above already rejects via
|
||||||
|
* VA_STATUS_ERROR_UNSUPPORTED_PROFILE.
|
||||||
|
*/
|
||||||
|
config_object->pixelformat = pixelformat_for_profile(profile);
|
||||||
config_object->attributes[0].type = VAConfigAttribRTFormat;
|
config_object->attributes[0].type = VAConfigAttribRTFormat;
|
||||||
config_object->attributes[0].value = VA_RT_FORMAT_YUV420;
|
config_object->attributes[0].value = VA_RT_FORMAT_YUV420;
|
||||||
config_object->attributes_count = 1;
|
config_object->attributes_count = 1;
|
||||||
|
|||||||
@@ -96,9 +96,23 @@ struct request_data {
|
|||||||
* probes with small surfaces then re-allocates at real
|
* probes with small surfaces then re-allocates at real
|
||||||
* resolution; we re-set the OUTPUT format whenever this pair
|
* resolution; we re-set the OUTPUT format whenever this pair
|
||||||
* changes).
|
* changes).
|
||||||
|
*
|
||||||
|
* iter5b: extended with last_output_pixelformat so the gate
|
||||||
|
* also fires on codec change (consumer decodes H.264 first,
|
||||||
|
* HEVC second on the same driver_data). Pre-iter5b the OUTPUT
|
||||||
|
* pixel format was hardcoded V4L2_PIX_FMT_H264_SLICE in
|
||||||
|
* CreateSurfaces2, so codec change was silent and HEVC / VP9 /
|
||||||
|
* VP8 saw the kernel hantro driver substitute MPEG2_DECODER
|
||||||
|
* codec_mode (when bound to hantro) or rkvdec silently drop
|
||||||
|
* the decode (when bound to rkvdec). Same bug class as iter4's
|
||||||
|
* unconditional h264_start_code; both fixes thread the active
|
||||||
|
* profile into codec-specific kernel state.
|
||||||
|
*
|
||||||
|
* 0 = uninitialized; non-zero = FOURCC of current OUTPUT format.
|
||||||
*/
|
*/
|
||||||
unsigned int last_output_width;
|
unsigned int last_output_width;
|
||||||
unsigned int last_output_height;
|
unsigned int last_output_height;
|
||||||
|
unsigned int last_output_pixelformat;
|
||||||
};
|
};
|
||||||
|
|
||||||
VAStatus VA_DRIVER_INIT_FUNC(VADriverContextP context);
|
VAStatus VA_DRIVER_INIT_FUNC(VADriverContextP context);
|
||||||
|
|||||||
Reference in New Issue
Block a user