[Bug 796786] New: v4l2videodec: trickmode-key-frame hangs on second frame with imx6
GStreamer (GNOME Bugzilla)
bugzilla at gnome.org
Wed Jul 11 09:37:13 UTC 2018
https://bugzilla.gnome.org/show_bug.cgi?id=796786
Bug ID: 796786
Summary: v4l2videodec: trickmode-key-frame hangs on second
frame with imx6
Classification: Platform
Product: GStreamer
Version: 1.14.1
OS: Linux
Status: NEW
Severity: normal
Priority: Normal
Component: gst-plugins-good
Assignee: gstreamer-bugs at lists.freedesktop.org
Reporter: m.tretter at pengutronix.de
QA Contact: gstreamer-bugs at lists.freedesktop.org
GNOME version: ---
Video decoding in trickmode-key-frame fails with GStreamer 1.14.1 on imx6,
because the v4l2videodec sends a STREAMOFF-STREAMON sequence to the V4L2
driver when draining the decoder.
I can reproduce the issue using the following pipeline and scenario:
Pipeline:
gst-validate-1.0 --set-scenario trickmode-seek-fast-forward \
filesrc location=${FILENAME} ! \
h264parse ! v4l2h264dec ! \
waylandsink
Scenario:
description, duration=25.0, seek=true, need-clock-sync=true
seek, playback-time=0.0, rate=8.0, start=0.0,
flags=trickmode-key-units+key-unit+flush
wait, duration=10.0
stop
The first frame after the seek event is decoded fine, but CODA decoder hangs
on the second frame and the CODA driver prints a message that SEQ_INIT failed.
The decoder expects an SPS/PPS NAL unit for the initialization, but the
decoder starts with the IDR without sending the SPS/PPS first.
If I set config-interval=-1 on the h264parse to send the SPS/PPS for every
keyframe the decoding works. This only works for lower decoding rates (e.g.
2.0). For higher rates the sink starts to drop frames because the buffers are
too late.
In trickmode-key-frame, the videodecoder drains the decoder after every frame.
The problem is that the v4l2videodec flushes while draining the decoder in
addition to run CMD_STOP, which runs a STREAMOFF-STREAMON sequence. The
STREAMOFF-STREAMON causes the driver to reset/reinitialize the CODA and thus
requiring the SPS/PPS NAL units for a proper initialization.
My understanding is that the STREAMOFF-STREAMON during the drain implies a
seek which requires a resume point for continuing and violates the assumption
that sub-classes should be prepared to handle new data after the drain.
Instead the v4l2videodec should not flush the decoder while draining but use
the CMD_START to restart the decoder once all buffers are drained. I have not
found many users or implementers of CMD_START and I am not sure if this is the
right solution.
--
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.
More information about the gstreamer-bugs
mailing list