diff --git a/libv4l-rockchip_v2/libv4l-encplugin-rockchip.c b/libv4l-rockchip_v2/libv4l-encplugin-rockchip.c index ddfd49cdb7b22bc9997b38a8b69217f108918036..2e06535e9ac22dcc90673604226c3a25fb59c8d0 100644 --- a/libv4l-rockchip_v2/libv4l-encplugin-rockchip.c +++ b/libv4l-rockchip_v2/libv4l-encplugin-rockchip.c @@ -432,8 +432,15 @@ static int ioctl_dqbuf_locked(struct encoder_context *ctx, int fd, } ret = SYS_IOCTL(fd, VIDIOC_DQBUF, buffer); - if (ret) + if (ret) { + /* In some cases we may not have a buffer with the V4L2_BUF_FLAG_LAST set, + * make sure to reset our flushing state */ + if (errno == EPIPE) { + ctx->flushing = false; + ctx->can_qbuf = true; + } return ret; + } ret = SYS_IOCTL(fd, VIDIOC_QUERYBUF, buffer); if (ret)