On Wed Nov 5 11:17:37 2025 +0530, Dikshita Agarwal wrote:
> Improve the condition used to determine when input internal buffers need
> to be reconfigured during streamon on the capture port. Previously, the
> check relied on the INPUT_PAUSE sub-state, which was also being set
> during seek operations. This led to input buffers being queued multiple
> times to the firmware, causing session errors due to duplicate buffer
> submissions.
> 
> This change introduces a more accurate check using the FIRST_IPSC and
> DRC sub-states to ensure that input buffer reconfiguration is triggered
> only during resolution change scenarios, such as streamoff/on on the
> capture port. This avoids duplicate buffer queuing during seek
> operations.
> 
> Fixes: c1f8b2cc72ec ("media: iris: handle streamoff/on from client in dynamic 
> resolution change")
> Cc: [email protected]
> Reported-by: Val Packett <[email protected]>
> Closes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4700
> Signed-off-by: Dikshita Agarwal <[email protected]>
> Reviewed-by: Vikash Garodia <[email protected]>
> Signed-off-by: Bryan O'Donoghue <[email protected]>
> Signed-off-by: Hans Verkuil <[email protected]>

Patch committed.

Thanks,
Hans Verkuil

 drivers/media/platform/qcom/iris/iris_common.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

---

diff --git a/drivers/media/platform/qcom/iris/iris_common.c 
b/drivers/media/platform/qcom/iris/iris_common.c
index 9fc663bdaf3f..7f1c7fe144f7 100644
--- a/drivers/media/platform/qcom/iris/iris_common.c
+++ b/drivers/media/platform/qcom/iris/iris_common.c
@@ -91,12 +91,14 @@ int iris_process_streamon_input(struct iris_inst *inst)
 int iris_process_streamon_output(struct iris_inst *inst)
 {
        const struct iris_hfi_command_ops *hfi_ops = inst->core->hfi_ops;
-       bool drain_active = false, drc_active = false;
        enum iris_inst_sub_state clear_sub_state = 0;
+       bool drain_active, drc_active, first_ipsc;
        int ret = 0;
 
        iris_scale_power(inst);
 
+       first_ipsc = inst->sub_state & IRIS_INST_SUB_FIRST_IPSC;
+
        drain_active = inst->sub_state & IRIS_INST_SUB_DRAIN &&
                inst->sub_state & IRIS_INST_SUB_DRAIN_LAST;
 
@@ -108,7 +110,8 @@ int iris_process_streamon_output(struct iris_inst *inst)
        else if (drain_active)
                clear_sub_state = IRIS_INST_SUB_DRAIN | 
IRIS_INST_SUB_DRAIN_LAST;
 
-       if (inst->domain == DECODER && inst->sub_state & 
IRIS_INST_SUB_INPUT_PAUSE) {
+       /* Input internal buffer reconfiguration required in case of resolution 
change */
+       if (first_ipsc || drc_active) {
                ret = iris_alloc_and_queue_input_int_bufs(inst);
                if (ret)
                        return ret;
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to