vdec->source_change--;
        vpu_notify_source_change(inst);
+       vpu_set_last_buffer_dequeued(inst, false);
 }
 
 static int vdec_update_state(struct vpu_inst *inst, enum vpu_codec_state state, u32 force)
                return;
 
        if (vdec->eos_received) {
-               if (!vpu_set_last_buffer_dequeued(inst)) {
+               if (!vpu_set_last_buffer_dequeued(inst, true)) {
                        vdec->eos_received--;
                        vdec_update_state(inst, VPU_CODEC_STATE_DRAIN, 0);
                }
                return 0;
 
        if (!vdec->params.frame_count) {
-               vpu_set_last_buffer_dequeued(inst);
+               vpu_set_last_buffer_dequeued(inst, true);
                return 0;
        }
 
        vpu_trace(inst->dev, "[%d]\n", inst->id);
 
        if (inst->state == VPU_CODEC_STATE_DEINIT) {
-               vpu_set_last_buffer_dequeued(inst);
+               vpu_set_last_buffer_dequeued(inst, true);
        } else {
                vdec->drain = 1;
                vdec_drain(inst);
 
        vpu_inst_lock(inst);
        if (cmd->cmd == V4L2_ENC_CMD_STOP) {
                if (inst->state == VPU_CODEC_STATE_DEINIT)
-                       vpu_set_last_buffer_dequeued(inst);
+                       vpu_set_last_buffer_dequeued(inst, true);
                else
                        venc_request_eos(inst);
        }
        struct venc_t *venc = inst->priv;
 
        if (venc->stopped && list_empty(&venc->frames))
-               vpu_set_last_buffer_dequeued(inst);
+               vpu_set_last_buffer_dequeued(inst, true);
 }
 
 static void venc_stop_done(struct vpu_inst *inst)
 
        return 0;
 }
 
-int vpu_set_last_buffer_dequeued(struct vpu_inst *inst)
+int vpu_set_last_buffer_dequeued(struct vpu_inst *inst, bool eos)
 {
        struct vb2_queue *q;
 
        vpu_trace(inst->dev, "last buffer dequeued\n");
        q->last_buffer_dequeued = true;
        wake_up(&q->done_wq);
-       vpu_notify_eos(inst);
+       if (eos)
+               vpu_notify_eos(inst);
        return 0;
 }
 
 
 void vpu_v4l2_set_error(struct vpu_inst *inst);
 int vpu_notify_eos(struct vpu_inst *inst);
 int vpu_notify_source_change(struct vpu_inst *inst);
-int vpu_set_last_buffer_dequeued(struct vpu_inst *inst);
+int vpu_set_last_buffer_dequeued(struct vpu_inst *inst, bool eos);
 void vpu_vb2_buffers_return(struct vpu_inst *inst, unsigned int type, enum vb2_buffer_state state);
 int vpu_get_num_buffers(struct vpu_inst *inst, u32 type);
 bool vpu_is_source_empty(struct vpu_inst *inst);