mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-29 05:44:11 +00:00
media: imx-jpeg: notify source chagne event when the first picture parsed
After gstreamer rework the dynamic resolution change handling, gstreamer
stop doing capture buffer allocation based on guesses and wait for the
source change event when available. It requires driver always notify
source change event in the initialization, even if the size parsed is
equal to the size set on capture queue. otherwise, the pipeline will be
stalled.
Currently driver may not notify source change event if the parsed format
and size are equal to those previously established, but it may stall the
gstreamer pipeline.
The link of gstreamer patch is
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4437
Fixes: b4e1fb8643
("media: imx-jpeg: Support dynamic resolution change")
Signed-off-by: Ming Qian <ming.qian@nxp.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
This commit is contained in:
parent
63c5f1d8a8
commit
b833b17849
2 changed files with 7 additions and 1 deletions
|
@ -1348,7 +1348,8 @@ static bool mxc_jpeg_source_change(struct mxc_jpeg_ctx *ctx,
|
|||
q_data_cap = mxc_jpeg_get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE);
|
||||
if (mxc_jpeg_compare_format(q_data_cap->fmt, jpeg_src_buf->fmt))
|
||||
jpeg_src_buf->fmt = q_data_cap->fmt;
|
||||
if (q_data_cap->fmt != jpeg_src_buf->fmt ||
|
||||
if (ctx->need_initial_source_change_evt ||
|
||||
q_data_cap->fmt != jpeg_src_buf->fmt ||
|
||||
q_data_cap->w != jpeg_src_buf->w ||
|
||||
q_data_cap->h != jpeg_src_buf->h) {
|
||||
dev_dbg(dev, "Detected jpeg res=(%dx%d)->(%dx%d), pixfmt=%c%c%c%c\n",
|
||||
|
@ -1392,6 +1393,7 @@ static bool mxc_jpeg_source_change(struct mxc_jpeg_ctx *ctx,
|
|||
mxc_jpeg_sizeimage(q_data_cap);
|
||||
notify_src_chg(ctx);
|
||||
ctx->source_change = 1;
|
||||
ctx->need_initial_source_change_evt = false;
|
||||
if (vb2_is_streaming(v4l2_m2m_get_dst_vq(ctx->fh.m2m_ctx)))
|
||||
mxc_jpeg_set_last_buffer(ctx);
|
||||
}
|
||||
|
@ -1611,6 +1613,9 @@ static int mxc_jpeg_queue_setup(struct vb2_queue *q,
|
|||
for (i = 0; i < *nplanes; i++)
|
||||
sizes[i] = mxc_jpeg_get_plane_size(q_data, i);
|
||||
|
||||
if (V4L2_TYPE_IS_OUTPUT(q->type))
|
||||
ctx->need_initial_source_change_evt = true;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -99,6 +99,7 @@ struct mxc_jpeg_ctx {
|
|||
enum mxc_jpeg_enc_state enc_state;
|
||||
int slot;
|
||||
unsigned int source_change;
|
||||
bool need_initial_source_change_evt;
|
||||
bool header_parsed;
|
||||
struct v4l2_ctrl_handler ctrl_handler;
|
||||
u8 jpeg_quality;
|
||||
|
|
Loading…
Reference in a new issue