diff options
Diffstat (limited to 'drivers/media/platform/exynos/mfc/mfc_utils.h')
-rw-r--r-- | drivers/media/platform/exynos/mfc/mfc_utils.h | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/drivers/media/platform/exynos/mfc/mfc_utils.h b/drivers/media/platform/exynos/mfc/mfc_utils.h index 2c48e5c18..9a04486d3 100644 --- a/drivers/media/platform/exynos/mfc/mfc_utils.h +++ b/drivers/media/platform/exynos/mfc/mfc_utils.h @@ -199,9 +199,23 @@ static inline u32 mfc_dec_get_strm_size(struct mfc_ctx *ctx, struct mfc_buf *src * And the dec->consumed is cumulate-decoded size. */ vb_plane = &src_mb->vb.vb2_buf.planes[0]; - strm_size = vb_plane->bytesused - vb_plane->data_offset; - if (dec->consumed) - strm_size -= dec->consumed; + if (vb_plane->bytesused > vb_plane->data_offset) { + strm_size = vb_plane->bytesused - vb_plane->data_offset; + } else { + strm_size = vb_plane->bytesused; + mfc_ctx_err("[STREAM] invalid offset (bytesused %d, data_offset: %d)\n", + vb_plane->bytesused, vb_plane->data_offset); + } + + if (dec->consumed) { + if (strm_size > dec->consumed) { + strm_size -= dec->consumed; + } else { + dec->consumed = 0; + mfc_ctx_err("[STREAM] invalid consumed (strm_size: %d, consumed: %d)", + strm_size, dec->consumed); + } + } mfc_debug(2, "[STREAM] strm_size: %d (bytesused %d, data_offset %d, consumed %d)\n", strm_size, vb_plane->bytesused, vb_plane->data_offset, dec->consumed); |