summaryrefslogtreecommitdiff
path: root/drivers/media/platform/exynos/mfc/mfc_utils.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/platform/exynos/mfc/mfc_utils.h')
-rw-r--r--drivers/media/platform/exynos/mfc/mfc_utils.h20
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);