From fc8c86154e0b673a350f787e33b7697354a54609 Mon Sep 17 00:00:00 2001 From: Herman Chen Date: Fri, 18 Feb 2022 15:35:56 +0800 Subject: [PATCH] [hal_task]: Change hal_task to info with status 1. Split encoder and decoder hal_task defs and infos. 2. Change hal_task to a general info list with status. Change-Id: I6f26035eeee4772d1ef99a21d85716e9c33eb9a6 Signed-off-by: Herman Chen --- mpp/codec/dec/avs/avsd_parse.c | 2 +- mpp/codec/dec/h263/h263d_parser.h | 2 +- mpp/codec/dec/h264/h264d_parse.c | 2 +- mpp/codec/dec/h265/h265d_parser.h | 2 +- mpp/codec/dec/mpg4/mpg4d_parser.h | 2 +- mpp/codec/dec/vp9/vp9d_codec.h | 2 +- mpp/codec/inc/h265d_api.h | 1 + mpp/codec/inc/parser_api.h | 2 +- mpp/codec/mpp_dec.cpp | 24 ++++++++++--- mpp/hal/hal_task.cpp | 54 ++++++++++++---------------- mpp/hal/inc/hal_dec_task.h | 34 +++++++++++++++++- mpp/hal/inc/hal_enc_task.h | 7 +++- mpp/hal/inc/hal_task.h | 36 ++++++------------- mpp/hal/inc/hal_task_defs.h | 44 ----------------------- mpp/hal/inc/hal_vp8e_api_v2.h | 3 +- mpp/hal/inc/mpp_hal.h | 2 +- mpp/hal/mpp_enc_hal.cpp | 11 ------ mpp/hal/mpp_hal.cpp | 3 +- mpp/hal/vpu/jpegd/hal_jpegd_common.c | 2 +- mpp/hal/vpu/vp8d/hal_vp8d_base.h | 2 +- mpp/vproc/inc/mpp_dec_vproc.h | 2 +- mpp/vproc/mpp_dec_vproc.cpp | 2 +- 22 files changed, 108 insertions(+), 133 deletions(-) delete mode 100644 mpp/hal/inc/hal_task_defs.h diff --git a/mpp/codec/dec/avs/avsd_parse.c b/mpp/codec/dec/avs/avsd_parse.c index cbb3ab41..13845c10 100644 --- a/mpp/codec/dec/avs/avsd_parse.c +++ b/mpp/codec/dec/avs/avsd_parse.c @@ -23,7 +23,7 @@ #include "mpp_mem.h" #include "mpp_log.h" #include "mpp_packet_impl.h" -#include "hal_task.h" +#include "hal_dec_task.h" #include "avsd_api.h" #include "avsd_parse.h" diff --git a/mpp/codec/dec/h263/h263d_parser.h b/mpp/codec/dec/h263/h263d_parser.h index 823dfce8..2efb6eab 100644 --- a/mpp/codec/dec/h263/h263d_parser.h +++ b/mpp/codec/dec/h263/h263d_parser.h @@ -20,7 +20,7 @@ #include "mpp_packet.h" #include "mpp_buf_slot.h" -#include "hal_task.h" +#include "hal_dec_task.h" #define H263D_DBG_FUNCTION (0x00000001) #define H263D_DBG_STARTCODE (0x00000002) diff --git a/mpp/codec/dec/h264/h264d_parse.c b/mpp/codec/dec/h264/h264d_parse.c index 8b907578..9540284b 100644 --- a/mpp/codec/dec/h264/h264d_parse.c +++ b/mpp/codec/dec/h264/h264d_parse.c @@ -22,7 +22,7 @@ #include "mpp_mem.h" #include "mpp_packet_impl.h" -#include "hal_task.h" +#include "hal_dec_task.h" #include "h264d_global.h" #include "h264d_parse.h" diff --git a/mpp/codec/dec/h265/h265d_parser.h b/mpp/codec/dec/h265/h265d_parser.h index e5a0e25d..f41b8dc1 100644 --- a/mpp/codec/dec/h265/h265d_parser.h +++ b/mpp/codec/dec/h265/h265d_parser.h @@ -37,7 +37,7 @@ #include "mpp_buf_slot.h" #include "mpp_mem_pool.h" -#include "hal_task.h" +#include "hal_dec_task.h" #include "h265d_codec.h" #include "h265_syntax.h" diff --git a/mpp/codec/dec/mpg4/mpg4d_parser.h b/mpp/codec/dec/mpg4/mpg4d_parser.h index a85117bb..4df11add 100644 --- a/mpp/codec/dec/mpg4/mpg4d_parser.h +++ b/mpp/codec/dec/mpg4/mpg4d_parser.h @@ -20,7 +20,7 @@ #include "mpp_packet.h" #include "mpp_buf_slot.h" -#include "hal_task.h" +#include "hal_dec_task.h" #define MPG4D_DBG_FUNCTION (0x00000001) #define MPG4D_DBG_STARTCODE (0x00000002) diff --git a/mpp/codec/dec/vp9/vp9d_codec.h b/mpp/codec/dec/vp9/vp9d_codec.h index 895e7da2..8b97873e 100644 --- a/mpp/codec/dec/vp9/vp9d_codec.h +++ b/mpp/codec/dec/vp9/vp9d_codec.h @@ -18,7 +18,7 @@ #define __VP9D_CODEC_H__ #include "mpp_frame.h" -#include "hal_task.h" +#include "hal_dec_task.h" #include "vp9d_syntax.h" diff --git a/mpp/codec/inc/h265d_api.h b/mpp/codec/inc/h265d_api.h index 83eaa729..585c4f8a 100644 --- a/mpp/codec/inc/h265d_api.h +++ b/mpp/codec/inc/h265d_api.h @@ -16,6 +16,7 @@ #ifndef __H265D_API_H__ #define __H265D_API_H__ + #include "parser_api.h" #ifdef __cplusplus diff --git a/mpp/codec/inc/parser_api.h b/mpp/codec/inc/parser_api.h index e9cd0abf..75090fee 100644 --- a/mpp/codec/inc/parser_api.h +++ b/mpp/codec/inc/parser_api.h @@ -21,7 +21,7 @@ #include "mpp_packet.h" #include "mpp_buf_slot.h" #include "mpp_dec_cfg.h" -#include "hal_task.h" +#include "hal_dec_task.h" #include "mpp_soc.h" /* diff --git a/mpp/codec/mpp_dec.cpp b/mpp/codec/mpp_dec.cpp index 48fb495b..e52c53cc 100644 --- a/mpp/codec/mpp_dec.cpp +++ b/mpp/codec/mpp_dec.cpp @@ -136,6 +136,22 @@ static RK_S32 ts_cmp(void *priv, const struct list_head *a, const struct list_he return ts1->pts - ts2->pts; } +static MPP_RET dec_task_info_init(HalTaskInfo *task) +{ + HalDecTask *p = &task->dec; + + p->valid = 0; + p->flags.val = 0; + p->flags.eos = 0; + p->input_packet = NULL; + p->output = -1; + p->input = -1; + memset(&task->dec.syntax, 0, sizeof(task->dec.syntax)); + memset(task->dec.refer, -1, sizeof(task->dec.refer)); + + return MPP_OK; +} + static void dec_task_init(DecTask *task) { task->hnd = NULL; @@ -144,7 +160,7 @@ static void dec_task_init(DecTask *task) task->status.prev_task_rdy = 1; INIT_LIST_HEAD(&task->ts_cur.link); - hal_task_info_init(&task->info, MPP_CTX_DEC); + dec_task_info_init(&task->info); } /* @@ -991,7 +1007,7 @@ static MPP_RET try_proc_dec_task(Mpp *mpp, DecTask *task) } task->status.curr_task_rdy = 0; task->status.task_parsed_rdy = 0; - hal_task_info_init(&task->info, MPP_CTX_DEC); + dec_task_info_init(&task->info); return MPP_NOK; } dec_dbg_detail("detail: %p check output index pass\n", dec); @@ -1117,7 +1133,7 @@ static MPP_RET try_proc_dec_task(Mpp *mpp, DecTask *task) task->status.curr_task_rdy = 0; task->status.task_parsed_rdy = 0; task->status.prev_task_rdy = 0; - hal_task_info_init(&task->info, MPP_CTX_DEC); + dec_task_info_init(&task->info); dec_dbg_detail("detail: %p one task ready\n", dec); @@ -1525,7 +1541,7 @@ void *mpp_dec_advanced_thread(void *data) packet = NULL; frame = NULL; - hal_task_info_init(&pTask->info, MPP_CTX_DEC); + dec_task_info_init(&pTask->info); task.status.mpp_pkt_in_rdy = 0; } diff --git a/mpp/hal/hal_task.cpp b/mpp/hal/hal_task.cpp index fbdb994a..84222204 100644 --- a/mpp/hal/hal_task.cpp +++ b/mpp/hal/hal_task.cpp @@ -22,6 +22,7 @@ #include "mpp_log.h" #include "mpp_list.h" #include "mpp_lock.h" +#include "mpp_common.h" #include "hal_task.h" @@ -33,7 +34,7 @@ struct HalTaskImpl_t { HalTaskGroupImpl *group; RK_S32 index; HalTaskStatus status; - HalTaskInfo task; + void *data; }; struct HalTaskGroupImpl_t { @@ -44,11 +45,13 @@ struct HalTaskGroupImpl_t { struct list_head list[TASK_BUTT]; RK_U32 count[TASK_BUTT]; + RK_S32 size; + RK_S32 aligned_size; HalTaskImpl tasks[]; }; -MPP_RET hal_task_group_init(HalTaskGroup *group, RK_S32 count) +MPP_RET hal_task_group_init(HalTaskGroup *group, RK_S32 count, RK_S32 size) { if (NULL == group) { mpp_err_f("found invalid input group %p count %d\n", group, count); @@ -56,21 +59,28 @@ MPP_RET hal_task_group_init(HalTaskGroup *group, RK_S32 count) } HalTaskGroupImpl *p = NULL; + RK_S32 aligned_size = MPP_ALIGN(size, sizeof(void *)); + RK_U8 *buf = NULL; do { p = mpp_calloc_size(HalTaskGroupImpl, sizeof(HalTaskGroupImpl) + - sizeof(HalTaskImpl) * count); + (sizeof(HalTaskImpl) + aligned_size) * count); if (NULL == p) { mpp_err_f("malloc group failed\n"); break; } p->task_count = count; + p->size = size; + p->aligned_size = aligned_size; + mpp_spinlock_init(&p->lock); for (RK_U32 i = 0; i < TASK_BUTT; i++) INIT_LIST_HEAD(&p->list[i]); + buf = (RK_U8 *)(((HalTaskImpl *)(p + 1) + count)); + for (RK_S32 i = 0; i < count; i++) { HalTaskImpl *task = &p->tasks[i]; @@ -78,6 +88,7 @@ MPP_RET hal_task_group_init(HalTaskGroup *group, RK_S32 count) task->index = i; task->group = p; task->status = TASK_IDLE; + task->data = buf + i * aligned_size; list_add_tail(&task->list, &p->list[TASK_IDLE]); p->count[TASK_IDLE]++; } @@ -178,10 +189,10 @@ MPP_RET hal_task_hnd_set_status(HalTaskHnd hnd, HalTaskStatus status) return MPP_OK; } -MPP_RET hal_task_hnd_set_info(HalTaskHnd hnd, HalTaskInfo *task) +MPP_RET hal_task_hnd_set_info(HalTaskHnd hnd, void *info) { - if (NULL == hnd || NULL == task) { - mpp_err_f("found invaid input hnd %p task %p\n", hnd, task); + if (NULL == hnd || NULL == info) { + mpp_err_f("found invaid input hnd %p info %p\n", hnd, info); return MPP_ERR_UNKNOW; } @@ -191,16 +202,16 @@ MPP_RET hal_task_hnd_set_info(HalTaskHnd hnd, HalTaskInfo *task) mpp_assert(impl->index < group->task_count); mpp_spinlock_lock(&group->lock); - memcpy(&impl->task, task, sizeof(impl->task)); + memcpy(impl->data, info, group->size); mpp_spinlock_unlock(&group->lock); return MPP_OK; } -MPP_RET hal_task_hnd_get_info(HalTaskHnd hnd, HalTaskInfo *task) +MPP_RET hal_task_hnd_get_info(HalTaskHnd hnd, void *info) { - if (NULL == hnd || NULL == task) { - mpp_err_f("found invaid input hnd %p task %p\n", hnd, task); + if (NULL == hnd || NULL == info) { + mpp_err_f("found invaid input hnd %p info %p\n", hnd, info); return MPP_ERR_UNKNOW; } @@ -210,29 +221,8 @@ MPP_RET hal_task_hnd_get_info(HalTaskHnd hnd, HalTaskInfo *task) mpp_assert(impl->index < group->task_count); mpp_spinlock_lock(&group->lock); - memcpy(task, &impl->task, sizeof(impl->task)); + memcpy(info, impl->data, group->size); mpp_spinlock_unlock(&group->lock); return MPP_OK; } - -MPP_RET hal_task_info_init(HalTaskInfo *task, MppCtxType type) -{ - if (NULL == task || type >= MPP_CTX_BUTT) { - mpp_err_f("found invalid input task %p type %d\n", task, type); - return MPP_ERR_UNKNOW; - } - - HalDecTask *p = &task->dec; - - p->valid = 0; - p->flags.val = 0; - p->flags.eos = 0; - p->input_packet = NULL; - p->output = -1; - p->input = -1; - memset(&task->dec.syntax, 0, sizeof(task->dec.syntax)); - memset(task->dec.refer, -1, sizeof(task->dec.refer)); - - return MPP_OK; -} diff --git a/mpp/hal/inc/hal_dec_task.h b/mpp/hal/inc/hal_dec_task.h index 68bbc313..b4e058a0 100644 --- a/mpp/hal/inc/hal_dec_task.h +++ b/mpp/hal/inc/hal_dec_task.h @@ -18,11 +18,22 @@ #ifndef __HAL_DEC_TASK__ #define __HAL_DEC_TASK__ -#include "hal_task_defs.h" +#include "hal_task.h" #include "mpp_callback.h" #define MAX_DEC_REF_NUM 17 +/* + * modified by parser and encoder + * + * number : the number of the data pointer array element + * data : the address of the pointer array, parser will add its data here + */ +typedef struct MppSyntax_t { + RK_U32 number; + void *data; +} MppSyntax; + typedef union HalDecTaskFlag_t { RK_U32 val; struct { @@ -79,4 +90,25 @@ typedef struct HalDecTask_t { RK_S32 refer[MAX_DEC_REF_NUM]; } HalDecTask; +typedef union HalDecVprocTaskFlag_t { + RK_U32 val; + + struct { + RK_U32 eos : 1; + RK_U32 info_change : 1; + }; +} HalDecVprocTaskFlag; + +typedef struct HalDecVprocTask_t { + // input slot index for post-process + HalDecVprocTaskFlag flags; + + RK_S32 input; +} HalDecVprocTask; + +typedef union HalTask_u { + HalDecTask dec; + HalDecVprocTask dec_vproc; +} HalTaskInfo; + #endif /* __HAL_DEC_TASK__ */ diff --git a/mpp/hal/inc/hal_enc_task.h b/mpp/hal/inc/hal_enc_task.h index f8749524..6be58acf 100644 --- a/mpp/hal/inc/hal_enc_task.h +++ b/mpp/hal/inc/hal_enc_task.h @@ -20,7 +20,7 @@ #include "mpp_time.h" -#include "hal_task_defs.h" +#include "hal_task.h" #include "mpp_rc_defs.h" #include "mpp_enc_refs.h" @@ -35,6 +35,11 @@ typedef struct HalEncTaskFlag_t { RK_U32 err; } HalEncTaskFlag; +typedef struct MppSyntax_t { + RK_U32 number; + void *data; +} MppSyntax; + typedef struct HalEncTask_t { RK_U32 valid; diff --git a/mpp/hal/inc/hal_task.h b/mpp/hal/inc/hal_task.h index 785922f1..30c325de 100644 --- a/mpp/hal/inc/hal_task.h +++ b/mpp/hal/inc/hal_task.h @@ -19,28 +19,16 @@ #define __HAL_TASK__ #include "mpp_err.h" -#include "hal_dec_task.h" -typedef union HalDecVprocTaskFlag_t { - RK_U32 val; +typedef void* HalTaskHnd; +typedef void* HalTaskGroup; - struct { - RK_U32 eos : 1; - RK_U32 info_change : 1; - }; -} HalDecVprocTaskFlag; - -typedef struct HalDecVprocTask_t { - // input slot index for post-process - HalDecVprocTaskFlag flags; - - RK_S32 input; -} HalDecVprocTask; - -typedef union HalTask_u { - HalDecTask dec; - HalDecVprocTask dec_vproc; -} HalTaskInfo; +typedef enum HalTaskStatus_e { + TASK_IDLE, + TASK_PROCESSING, + TASK_PROC_DONE, + TASK_BUTT, +} HalTaskStatus; #ifdef __cplusplus extern "C" { @@ -52,7 +40,7 @@ extern "C" { * NOTE: use mpp_list to implement * the count means the max task waiting for process */ -MPP_RET hal_task_group_init(HalTaskGroup *group, RK_S32 count); +MPP_RET hal_task_group_init(HalTaskGroup *group, RK_S32 count, RK_S32 size); MPP_RET hal_task_group_deinit(HalTaskGroup group); /* @@ -82,9 +70,8 @@ MPP_RET hal_task_group_deinit(HalTaskGroup group); MPP_RET hal_task_get_hnd(HalTaskGroup group, HalTaskStatus status, HalTaskHnd *hnd); MPP_RET hal_task_get_count(HalTaskGroup group, HalTaskStatus status, RK_U32 *count); MPP_RET hal_task_hnd_set_status(HalTaskHnd hnd, HalTaskStatus status); -MPP_RET hal_task_hnd_set_info(HalTaskHnd hnd, HalTaskInfo *task); -MPP_RET hal_task_hnd_get_info(HalTaskHnd hnd, HalTaskInfo *task); -MPP_RET hal_task_info_init(HalTaskInfo *task, MppCtxType type); +MPP_RET hal_task_hnd_set_info(HalTaskHnd hnd, void *task); +MPP_RET hal_task_hnd_get_info(HalTaskHnd hnd, void *task); MPP_RET hal_task_check_empty(HalTaskGroup group, HalTaskStatus status); #ifdef __cplusplus @@ -92,4 +79,3 @@ MPP_RET hal_task_check_empty(HalTaskGroup group, HalTaskStatus status); #endif #endif /*__HAL_TASK__*/ - diff --git a/mpp/hal/inc/hal_task_defs.h b/mpp/hal/inc/hal_task_defs.h deleted file mode 100644 index e3ab23b1..00000000 --- a/mpp/hal/inc/hal_task_defs.h +++ /dev/null @@ -1,44 +0,0 @@ -/* -* -* Copyright 2015 Rockchip Electronics Co. LTD -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -#ifndef __HAL_TASK_DEFS__ -#define __HAL_TASK_DEFS__ - -#include "rk_type.h" - -typedef void* HalTaskHnd; -typedef void* HalTaskGroup; - -typedef enum HalTaskStatus_e { - TASK_IDLE, - TASK_PROCESSING, - TASK_PROC_DONE, - TASK_BUTT, -} HalTaskStatus; - -/* - * modified by parser and encoder - * - * number : the number of the data pointer array element - * data : the address of the pointer array, parser will add its data here - */ -typedef struct MppSyntax_t { - RK_U32 number; - void *data; -} MppSyntax; - -#endif /* __HAL_TASK_DEFS__ */ diff --git a/mpp/hal/inc/hal_vp8e_api_v2.h b/mpp/hal/inc/hal_vp8e_api_v2.h index adffc151..0c95fa4f 100644 --- a/mpp/hal/inc/hal_vp8e_api_v2.h +++ b/mpp/hal/inc/hal_vp8e_api_v2.h @@ -17,8 +17,7 @@ #ifndef __HAL_VP8E_API_V2_H__ #define __HAL_VP8E_API_V2_H__ -#include "mpp_hal.h" - +#include "mpp_enc_hal.h" extern const MppEncHalApi hal_api_vp8e_v2; diff --git a/mpp/hal/inc/mpp_hal.h b/mpp/hal/inc/mpp_hal.h index 691e52f5..048b977e 100644 --- a/mpp/hal/inc/mpp_hal.h +++ b/mpp/hal/inc/mpp_hal.h @@ -22,7 +22,7 @@ #include "mpp_buf_slot.h" #include "mpp_platform.h" -#include "hal_task.h" +#include "hal_dec_task.h" #include "mpp_dec_cfg.h" #include "mpp_device.h" diff --git a/mpp/hal/mpp_enc_hal.cpp b/mpp/hal/mpp_enc_hal.cpp index 7f62e78e..a8f51f76 100644 --- a/mpp/hal/mpp_enc_hal.cpp +++ b/mpp/hal/mpp_enc_hal.cpp @@ -49,9 +49,6 @@ typedef struct MppEncHalImpl_t { void *ctx; const MppEncHalApi *api; - - HalTaskGroup tasks; - RK_S32 task_count; } MppEncHalImpl; MPP_RET mpp_enc_hal_init(MppEncHal *ctx, MppEncHalCfg *cfg) @@ -81,12 +78,6 @@ MPP_RET mpp_enc_hal_init(MppEncHal *ctx, MppEncHalCfg *cfg) break; } - ret = hal_task_group_init(&p->tasks, p->task_count); - if (ret) { - mpp_err_f("hal_task_group_init failed ret %d\n", ret); - break; - } - *ctx = p; return MPP_OK; } @@ -109,8 +100,6 @@ MPP_RET mpp_enc_hal_deinit(MppEncHal ctx) MppEncHalImpl *p = (MppEncHalImpl*)ctx; p->api->deinit(p->ctx); mpp_free(p->ctx); - if (p->tasks) - hal_task_group_deinit(p->tasks); mpp_free(p); return MPP_OK; } diff --git a/mpp/hal/mpp_hal.cpp b/mpp/hal/mpp_hal.cpp index 4b444cc5..39923405 100644 --- a/mpp/hal/mpp_hal.cpp +++ b/mpp/hal/mpp_hal.cpp @@ -112,7 +112,8 @@ MPP_RET mpp_hal_init(MppHal *ctx, MppHalCfg *cfg) break; } - ret = hal_task_group_init(&p->tasks, cfg->cfg->status.hal_task_count); + ret = hal_task_group_init(&p->tasks, cfg->cfg->status.hal_task_count, + sizeof(HalDecTask)); if (ret) { mpp_err_f("hal_task_group_init failed ret %d\n", ret); break; diff --git a/mpp/hal/vpu/jpegd/hal_jpegd_common.c b/mpp/hal/vpu/jpegd/hal_jpegd_common.c index 7941aa82..ecee03b8 100644 --- a/mpp/hal/vpu/jpegd/hal_jpegd_common.c +++ b/mpp/hal/vpu/jpegd/hal_jpegd_common.c @@ -26,7 +26,7 @@ #include "mpp_bitread.h" #include "mpp_bitput.h" -#include "hal_task.h" +#include "hal_dec_task.h" #include "jpegd_syntax.h" #include "jpegd_api.h" #include "hal_jpegd_common.h" diff --git a/mpp/hal/vpu/vp8d/hal_vp8d_base.h b/mpp/hal/vpu/vp8d/hal_vp8d_base.h index dc04bbd8..d081f94e 100644 --- a/mpp/hal/vpu/vp8d/hal_vp8d_base.h +++ b/mpp/hal/vpu/vp8d/hal_vp8d_base.h @@ -23,7 +23,7 @@ #include "mpp_buf_slot.h" #include "mpp_device.h" -#include "hal_task.h" +#include "hal_dec_task.h" #include "vp8d_syntax.h" diff --git a/mpp/vproc/inc/mpp_dec_vproc.h b/mpp/vproc/inc/mpp_dec_vproc.h index a27ef465..fde0332e 100644 --- a/mpp/vproc/inc/mpp_dec_vproc.h +++ b/mpp/vproc/inc/mpp_dec_vproc.h @@ -17,7 +17,7 @@ #ifndef __MPP_DEC_VPROC_H__ #define __MPP_DEC_VPROC_H__ -#include "hal_task.h" +#include "hal_dec_task.h" typedef struct MppDecVprocCfg_t { void *mpp; diff --git a/mpp/vproc/mpp_dec_vproc.cpp b/mpp/vproc/mpp_dec_vproc.cpp index e5c1b399..56af8ddb 100644 --- a/mpp/vproc/mpp_dec_vproc.cpp +++ b/mpp/vproc/mpp_dec_vproc.cpp @@ -592,7 +592,7 @@ MPP_RET dec_vproc_init(MppDecVprocCtx *ctx, MppDecVprocCfg *cfg) p->slots = ((MppDecImpl *)p->mpp->mDec)->frame_slots; p->thd = new MppThread(dec_vproc_thread, p, "mpp_dec_vproc"); sem_init(&p->reset_sem, 0, 0); - ret = hal_task_group_init(&p->task_group, 4); + ret = hal_task_group_init(&p->task_group, 4, sizeof(HalDecVprocTask)); if (ret) { mpp_err_f("create task group failed\n"); delete p->thd;