On Tue Aug 18 21:24:18 2026 +0530, Vishnu Reddy wrote:
> iris_enum_frameintervals() advertised frame intervals using
> V4L2_FRMIVAL_TYPE_STEPWISE with step=1/MAXIMUM_FPS where MAXIMUM_FPS
> is 480. This caused client to enumerate only framerates of the form
> MAXIMUM_FPS/n (where n is a positive integer), restricting support to
> exact divisors of MAXIMUM_FPS (e.g., 480, 240, 160, 120, 96, 80, 60,
> 30, 24, 1).
>
> Framerates that are not exact divisors of MAXIMUM_FPS, such as 29 fps,
> 25 fps, were excluded from the enumerated list. There is no hardware
> restriction to framerates that are exact divisors of MAXIMUM_FPS. This
> caused GStreamer caps negotiation to fail with an "internal data
> stream error" when encoding content at such framerates.
>
> Fix this by using V4L2_FRMIVAL_TYPE_CONTINUOUS. With CONTINUOUS type,
> GStreamer creates a continuous framerate range [1, max_fps], allowing
> any integer framerate within the range to pass caps negotiation. The
> step field is set to 1/1 as required by the V4L2 specification for
> continuous frame intervals.
>
> Fixes: a6882431a138 ("media: iris: Add support for
> ENUM_FRAMESIZES/FRAMEINTERVALS for encoder")
> Cc: [email protected]
> Reviewed-by: Bryan O'Donoghue <[email protected]>
> Signed-off-by: Vishnu Reddy <[email protected]>
> Signed-off-by: Bryan O'Donoghue <[email protected]>
Patch committed.
Thanks,
Bryan O'Donoghue
drivers/media/platform/qcom/iris/iris_vidc.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
---
diff --git a/drivers/media/platform/qcom/iris/iris_vidc.c
b/drivers/media/platform/qcom/iris/iris_vidc.c
index d39ac71a25aa..f1d7f186002d 100644
--- a/drivers/media/platform/qcom/iris/iris_vidc.c
+++ b/drivers/media/platform/qcom/iris/iris_vidc.c
@@ -438,14 +438,14 @@ static int iris_enum_frameintervals(struct file *filp,
void *fh,
mbpf = NUM_MBS_PER_FRAME(fival->height, fival->width);
fps = DIV_ROUND_UP(core->iris_platform_data->max_core_mbps, mbpf);
- fival->type = V4L2_FRMIVAL_TYPE_STEPWISE;
+ fival->type = V4L2_FRMIVAL_TYPE_CONTINUOUS;
fival->stepwise.min.numerator = 1;
fival->stepwise.min.denominator =
min_t(u32, fps, MAXIMUM_FPS);
fival->stepwise.max.numerator = 1;
fival->stepwise.max.denominator = 1;
fival->stepwise.step.numerator = 1;
- fival->stepwise.step.denominator = MAXIMUM_FPS;
+ fival->stepwise.step.denominator = 1;
return 0;
}
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]