return 0;
 }
 
-static void vdec_set_last_buffer_dequeued(struct vpu_inst *inst)
-{
-       struct vdec_t *vdec = inst->priv;
-
-       if (vdec->eos_received) {
-               if (!vpu_set_last_buffer_dequeued(inst))
-                       vdec->eos_received--;
-       }
-}
-
 static void vdec_handle_resolution_change(struct vpu_inst *inst)
 {
        struct vdec_t *vdec = inst->priv;
        return 0;
 }
 
+static void vdec_set_last_buffer_dequeued(struct vpu_inst *inst)
+{
+       struct vdec_t *vdec = inst->priv;
+
+       if (inst->state == VPU_CODEC_STATE_DYAMIC_RESOLUTION_CHANGE)
+               return;
+
+       if (vdec->eos_received) {
+               if (!vpu_set_last_buffer_dequeued(inst)) {
+                       vdec->eos_received--;
+                       vdec_update_state(inst, VPU_CODEC_STATE_DRAIN, 0);
+               }
+       }
+}
+
 static int vdec_querycap(struct file *file, void *fh, struct v4l2_capability *cap)
 {
        strscpy(cap->driver, "amphion-vpu", sizeof(cap->driver));
 
 static int vdec_cmd_start(struct vpu_inst *inst)
 {
+       struct vdec_t *vdec = inst->priv;
+
        switch (inst->state) {
        case VPU_CODEC_STATE_STARTED:
        case VPU_CODEC_STATE_DRAIN:
                break;
        }
        vpu_process_capture_buffer(inst);
+       if (vdec->eos_received)
+               vdec_set_last_buffer_dequeued(inst);
        return 0;
 }
 
        vdec->eos_received++;
        vdec->fixed_fmt = false;
        inst->min_buffer_cap = VDEC_MIN_BUFFER_CAP;
-       vdec_update_state(inst, VPU_CODEC_STATE_DRAIN, 0);
        vdec_set_last_buffer_dequeued(inst);
        vpu_inst_unlock(inst);
 }
                vdec_update_state(inst, VPU_CODEC_STATE_SEEK, 0);
                vdec->drain = 0;
        } else {
-               if (inst->state != VPU_CODEC_STATE_DYAMIC_RESOLUTION_CHANGE)
+               if (inst->state != VPU_CODEC_STATE_DYAMIC_RESOLUTION_CHANGE) {
                        vdec_abort(inst);
-
-               vdec->eos_received = 0;
+                       vdec->eos_received = 0;
+               }
                vdec_clear_slots(inst);
        }
 
 
                  fmt->sizeimage[1], fmt->bytesperline[1],
                  fmt->sizeimage[2], fmt->bytesperline[2],
                  q->num_buffers);
-       ret = call_vop(inst, start, q->type);
        vb2_clear_last_buffer_dequeued(q);
+       ret = call_vop(inst, start, q->type);
        if (ret)
                vpu_vb2_buffers_return(inst, q->type, VB2_BUF_STATE_QUEUED);