From: Brandon Brnich <b-brnich@ti.com>
To: Jackson.lee <jackson.lee@chipsnmedia.com>, <mchehab@kernel.org>,
<hverkuil-cisco@xs4all.nl>, <nicolas.dufresne@collabora.com>,
<bob.beckett@collabora.com>
Cc: <linux-media@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<lafley.kim@chipsnmedia.com>, <hverkuil@xs4all.nl>,
<nas.chung@chipsnmedia.com>
Subject: Re: [PATCH v1 0/9] fix decoder corruption, stalls and seek issues
Date: Tue, 27 Oct 2026 13:27:23 -0500 [thread overview]
Message-ID: <f65b11ad-318b-4cc8-847b-0db7a5ec2e92@ti.com> (raw)
In-Reply-To: <20261007015946.53-1-jackson.lee@chipsnmedia.com>
Hi Jackson,
Thanks for sending this series.
On 10/6/26 20:59, Jackson.lee wrote:
> From: Jackson Lee <jackson.lee@chipsnmedia.com>
>
> This series fixes a set of decoder problems in the wave5 driver that show
> up as corrupted output, stalled or crashed instances, and lost frames
> across seeks. All of them carry a Fixes: tag.
I have tested this series in multistream scenarios as well as seeking
and looping cases. It has made the latter 2 far more robust and I no
longer see corruption, stalls, or warnings from gstreamer. For the series:
Tested-by: Brandon Brnich <b-brnich@ti.com>
>
> Locking and job ownership
> 1. Serialise removal of OUTPUT buffers between finish_decode(),
> streamoff_output() and the start_decode() error path.
> 4. Acknowledge the interrupt only after it has been dispatched, so a
> completion the VPU adds meanwhile is no longer dropped and does not
> leave an instance waiting forever.
> 5. Finish each m2m job exactly once. A second v4l2_m2m_job_finish() from
> the same context could clear curr_ctx under v4l2_m2m_try_run() and
> oops in the m2m worker.
>
> Decode scheduling
> 6. Issue DEC_PIC only when the ring buffer holds bitstream that no queued
> command will consume. The current check compares two unrelated
> counters, which sends commands against an empty ring or duplicates
> one already in flight and corrupts the output. A delayed work restarts
> an instance left idle with data still buffered.
>
> Seek / flush
> 2. Drop the consumed-byte tally on OUTPUT streamoff, so it is not
> credited to the first buffers queued after a seek.
> 3. Wait between FLUSH retries instead of spending the retry budget in
> microseconds, and ignore dec_info when reading it failed.
> 8. Re-establish the display flags from the vb2 buffer states after a
> flush, so buffers held by userspace are not decoded into.
> 9. Do not reset the frame buffers on a CAPTURE streamoff that is only
> part of a seek.
>
> Timestamps
> 7. Hand OUTPUT timestamps to decoded pictures in decode order. One
> completion can consume several source buffers, and keeping only the
> last timestamp lost the others ("Too old frames, bug in decoder" in
> GStreamer).
>
> Testing
> -------
> Tested on a TI J721S2 EVM (Wave521C, product code 0x521c, firmware
> revision 363254) with GStreamer 1.24.13 and the v4l2h264dec/v4l2h265dec
> elements.
>
> fluster (GStreamer-H.264-V4L2-Gst1.0 / GStreamer-H.265-V4L2-Gst1.0):
>
> JVT-AVC_V1 77/135 (-j1 and -j3, identical per vector)
> JCT-VC-HEVC_V1 133/147 (-j1 and -j3, identical per vector)
>
> The remaining AVC failures are interlaced, MBAFF/PAFF, FMO and SP slice
> streams. 11 of the 14 HEVC failures are Main10 streams, which this SoC
> does not decode ("no support for 10 bit depth"); the others are
> PICSIZE_A_Bossen_1, PICSIZE_B_Bossen_1 and DELTAQP_A_BRCM_4.
>
> No oops, call trace, workqueue warning or "invalid display frame index"
> message was logged during the runs.
>
> v4l2-compliance 1.28.1-5233, SHA: fc15e229d9d3:
>
> Total for wave5-dec device /dev/video0: 47, Succeeded: 47, Failed: 0, Warnings: 2
> Total for wave5-enc device /dev/video1: 47, Succeeded: 47, Failed: 0, Warnings: 0
>
> Brandon Brnich (2):
> media: chips-media: wave5: Ensure Atomic Access to src_buf list
> media: chips-media: wave5: Stop FrameBuf Reset During Seek
>
> Jackson Lee (7):
> media: chips-media: wave5: drop the consumed-byte tally on OUTPUT
> streamoff
> media: chips-media: wave5: wait before retrying a refused flush
> media: chips-media: wave5: ack the interrupt after dispatching it
> media: chips-media: wave5: finish a job only once
> media: chips-media: wave5: decode only when the ring holds unclaimed
> bitstream
> media: chips-media: wave5: stamp decoded pictures from a decode-order
> queue
> media: chips-media: wave5: restore the display flags after a flush
>
> .../chips-media/wave5/wave5-vpu-dec.c | 312 +++++++++++++++---
> .../platform/chips-media/wave5/wave5-vpu.c | 28 +-
> .../platform/chips-media/wave5/wave5-vpuapi.c | 18 +-
> .../platform/chips-media/wave5/wave5-vpuapi.h | 13 +
> 4 files changed, 310 insertions(+), 61 deletions(-)
>
>
> base-commit: 58348f64125e9a3e44d3abb275ca7f4e6c9641e5
Best,
Brandon
prev parent reply other threads:[~2026-10-27 18:27 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-07 1:59 Jackson.lee
2026-10-07 1:59 ` [PATCH v1 1/9] media: chips-media: wave5: Ensure Atomic Access to src_buf list Jackson.lee
2026-10-07 1:59 ` [PATCH v1 2/9] media: chips-media: wave5: drop the consumed-byte tally on OUTPUT streamoff Jackson.lee
2026-10-07 1:59 ` [PATCH v1 3/9] media: chips-media: wave5: wait before retrying a refused flush Jackson.lee
2026-10-07 1:59 ` [PATCH v1 4/9] media: chips-media: wave5: ack the interrupt after dispatching it Jackson.lee
2026-10-07 1:59 ` [PATCH v1 5/9] media: chips-media: wave5: finish a job only once Jackson.lee
2026-10-07 1:59 ` [PATCH v1 6/9] media: chips-media: wave5: decode only when the ring holds unclaimed bitstream Jackson.lee
2026-10-07 1:59 ` [PATCH v1 7/9] media: chips-media: wave5: stamp decoded pictures from a decode-order queue Jackson.lee
2026-10-07 1:59 ` [PATCH v1 8/9] media: chips-media: wave5: restore the display flags after a flush Jackson.lee
2026-10-07 1:59 ` [PATCH v1 9/9] media: chips-media: wave5: Stop FrameBuf Reset During Seek Jackson.lee
2026-10-27 18:27 ` Brandon Brnich [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=f65b11ad-318b-4cc8-847b-0db7a5ec2e92@ti.com \
--to=b-brnich@ti.com \
--cc=bob.beckett@collabora.com \
--cc=hverkuil-cisco@xs4all.nl \
--cc=hverkuil@xs4all.nl \
--cc=jackson.lee@chipsnmedia.com \
--cc=lafley.kim@chipsnmedia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=nas.chung@chipsnmedia.com \
--cc=nicolas.dufresne@collabora.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®