mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-30 20:16:45 +08:00
[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 <herman.chen@rock-chips.com>
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
#ifndef __H265D_API_H__
|
||||
#define __H265D_API_H__
|
||||
|
||||
#include "parser_api.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -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"
|
||||
|
||||
/*
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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__ */
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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__*/
|
||||
|
||||
|
||||
@@ -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__ */
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user