media: amphion: sync buffer status with firmware during abort
1. prevent to allocate buffer to firmware during abort 2. release buffer when clear the slots Fixes: 6de8d628df6ef ("media: amphion: add v4l2 m2m vpu decoder stateful driver") Signed-off-by: Ming Qian <ming.qian@nxp.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
This commit is contained in:
parent
177d841fa1
commit
d8f1eb105e
@ -63,6 +63,7 @@ struct vdec_t {
|
||||
bool is_source_changed;
|
||||
u32 source_change;
|
||||
u32 drain;
|
||||
bool aborting;
|
||||
};
|
||||
|
||||
static const struct vpu_format vdec_formats[] = {
|
||||
@ -948,6 +949,9 @@ static int vdec_response_frame(struct vpu_inst *inst, struct vb2_v4l2_buffer *vb
|
||||
if (inst->state != VPU_CODEC_STATE_ACTIVE)
|
||||
return -EINVAL;
|
||||
|
||||
if (vdec->aborting)
|
||||
return -EINVAL;
|
||||
|
||||
if (!vdec->req_frame_count)
|
||||
return -EINVAL;
|
||||
|
||||
@ -1057,6 +1061,8 @@ static void vdec_clear_slots(struct vpu_inst *inst)
|
||||
vpu_buf = vdec->slots[i];
|
||||
vbuf = &vpu_buf->m2m_buf.vb;
|
||||
|
||||
vpu_trace(inst->dev, "clear slot %d\n", i);
|
||||
vdec_response_fs_release(inst, i, vpu_buf->tag);
|
||||
vdec_recycle_buffer(inst, vbuf);
|
||||
vdec->slots[i]->state = VPU_BUF_STATE_IDLE;
|
||||
vdec->slots[i] = NULL;
|
||||
@ -1318,6 +1324,8 @@ static void vdec_abort(struct vpu_inst *inst)
|
||||
int ret;
|
||||
|
||||
vpu_trace(inst->dev, "[%d] state = %d\n", inst->id, inst->state);
|
||||
|
||||
vdec->aborting = true;
|
||||
vpu_iface_add_scode(inst, SCODE_PADDING_ABORT);
|
||||
vdec->params.end_flag = 1;
|
||||
vpu_iface_set_decode_params(inst, &vdec->params, 1);
|
||||
@ -1341,6 +1349,7 @@ static void vdec_abort(struct vpu_inst *inst)
|
||||
vdec->decoded_frame_count = 0;
|
||||
vdec->display_frame_count = 0;
|
||||
vdec->sequence = 0;
|
||||
vdec->aborting = false;
|
||||
}
|
||||
|
||||
static void vdec_stop(struct vpu_inst *inst, bool free)
|
||||
|
Loading…
x
Reference in New Issue
Block a user