From 1f8ec3b78ded0f30de6c6dcb7b43925b7cd6bbfe Mon Sep 17 00:00:00 2001 From: "sayon.chen" Date: Sun, 9 Oct 2022 18:28:57 +0800 Subject: [PATCH] [mpp_service]: Enlarge offset request buffer cnt NOTE: realloc may change the buffer base. This will invalid the pointer which point to the old buffer base. This issue will make 4 tile H.265 encoding with multi osd generate error stream. Change-Id: I764ee9b2097687ae9d5f2bcc8d2ff5987a636844 Signed-off-by: sayon.chen --- osal/driver/inc/mpp_service_impl.h | 2 +- osal/driver/mpp_service.c | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/osal/driver/inc/mpp_service_impl.h b/osal/driver/inc/mpp_service_impl.h index 9c1ab446..063df4e0 100644 --- a/osal/driver/inc/mpp_service_impl.h +++ b/osal/driver/inc/mpp_service_impl.h @@ -20,7 +20,7 @@ #include "mpp_device.h" #include "mpp_service.h" -#define MAX_REG_OFFSET 32 +#define MAX_REG_OFFSET 64 #define MAX_RCB_OFFSET 32 #define MAX_INFO_COUNT 16 diff --git a/osal/driver/mpp_service.c b/osal/driver/mpp_service.c index 3a328145..4bd9f4bb 100644 --- a/osal/driver/mpp_service.c +++ b/osal/driver/mpp_service.c @@ -215,6 +215,8 @@ RegOffsetInfo *mpp_service_next_reg_offset(MppDevMppService *p) RegOffsetInfo *info = NULL; if (p->reg_offset_count + p->reg_offset_pos >= p->reg_offset_max) { + RegOffsetInfo *orig = p->reg_offset_info; + mpp_dev_dbg_msg("enlarge reg offset count %d -> %d\n", p->reg_offset_max, p->reg_offset_max * 2); p->reg_offset_info = mpp_realloc(p->reg_offset_info, RegOffsetInfo, p->reg_offset_max * 2); @@ -222,6 +224,8 @@ RegOffsetInfo *mpp_service_next_reg_offset(MppDevMppService *p) mpp_err_f("failed to enlarge request buffer\n"); return NULL; } + if (orig != p->reg_offset_info) + mpp_logw_f("enlarge reg offset buffer and get different pointer\n"); p->reg_offset_max *= 2; }