diff --git a/mpp/hal/inc/mpp_hal.h b/mpp/hal/inc/mpp_hal.h index b50d2644..2792bec7 100644 --- a/mpp/hal/inc/mpp_hal.h +++ b/mpp/hal/inc/mpp_hal.h @@ -72,7 +72,8 @@ typedef struct { typedef void* MppHalCtx; typedef struct MppHalCfg_t { - RK_U32 size; + MppCtxType type; + MppCodingType coding; } MppHalCfg; @@ -109,12 +110,12 @@ extern "C" { void *mpp_hal_thread(void *data); -MPP_RET mpp_hal_init(MppHal *ctx, MppHalCfg cfg); -MPP_RET mpp_hal_deinit(MppHal ctx); +MPP_RET mpp_hal_init(MppHal **ctx, MppHalCfg *cfg); +MPP_RET mpp_hal_deinit(MppHal *ctx); -MPP_RET mpp_hal_reg_gen(MppHal ctx, MppHalDecTask task); -MPP_RET mpp_hal_hw_start(MppHal ctx, MppHalDecTask task); -MPP_RET mpp_hal_hw_wait(MppHal ctx, MppHalDecTask task); +MPP_RET mpp_hal_reg_gen(MppHal *ctx, MppHalDecTask *task); +MPP_RET mpp_hal_hw_start(MppHal *ctx, MppHalDecTask *task); +MPP_RET mpp_hal_hw_wait(MppHal *ctx, MppHalDecTask *task); #ifdef __cplusplus } diff --git a/mpp/hal/mpp_hal.cpp b/mpp/hal/mpp_hal.cpp index ceeea211..9bd06fc1 100644 --- a/mpp/hal/mpp_hal.cpp +++ b/mpp/hal/mpp_hal.cpp @@ -16,6 +16,7 @@ #define MODULE_TAG "mpp_hal" +#include "mpp_mem.h" #include "mpp_log.h" #include "mpp.h" @@ -82,3 +83,38 @@ void *mpp_hal_thread(void *data) return NULL; } +MPP_RET mpp_hal_init(MppHal **ctx, MppHalCfg *cfg) +{ + *ctx = mpp_malloc(MppHal, 1); + (void)cfg; + return MPP_OK; +} + +MPP_RET mpp_hal_deinit(MppHal *ctx) +{ + mpp_free(ctx); + return MPP_OK; +} + +MPP_RET mpp_hal_reg_gen(MppHal *ctx, MppHalDecTask *task) +{ + (void)ctx; + (void)task; + return MPP_OK; +} + +MPP_RET mpp_hal_hw_start(MppHal *ctx, MppHalDecTask *task) +{ + (void)ctx; + (void)task; + return MPP_OK; +} + +MPP_RET mpp_hal_hw_wait(MppHal *ctx, MppHalDecTask *task) +{ + (void)ctx; + (void)task; + return MPP_OK; +} + + diff --git a/mpp/mpp.cpp b/mpp/mpp.cpp index c99c71ab..20160bcb 100644 --- a/mpp/mpp.cpp +++ b/mpp/mpp.cpp @@ -46,6 +46,8 @@ Mpp::Mpp(MppCtxType type, MppCodingType coding) mInternalGroup(NULL), mPacketGroup(NULL), mFrameGroup(NULL), + mDec(NULL), + mHal(NULL), mTheadCodec(NULL), mThreadHal(NULL), mType(type), @@ -60,8 +62,16 @@ Mpp::Mpp(MppCtxType type, MppCodingType coding) mPackets = new mpp_list((node_destructor)NULL); mFrames = new mpp_list((node_destructor)mpp_frame_deinit); mTasks = new mpp_list((node_destructor)NULL); + + mpp_dec_init(&mDec, coding); + MppHalCfg cfg = { + type, + coding, + }; + mpp_hal_init(&mHal, &cfg); mTheadCodec = new MppThread(mpp_dec_thread, this); mThreadHal = new MppThread(mpp_hal_thread, this); + mTask = mpp_malloc(MppHalDecTask*, mTaskNum); mpp_buffer_group_normal_get(&mInternalGroup, MPP_BUFFER_TYPE_ION); mpp_buffer_group_normal_get(&mPacketGroup, MPP_BUFFER_TYPE_NORMAL); @@ -72,8 +82,16 @@ Mpp::Mpp(MppCtxType type, MppCodingType coding) mFrames = new mpp_list((node_destructor)NULL); mPackets = new mpp_list((node_destructor)mpp_packet_deinit); mTasks = new mpp_list((node_destructor)NULL); + + mpp_dec_init(&mDec, coding); + MppHalCfg cfg = { + type, + coding, + }; + mpp_hal_init(&mHal, &cfg); mTheadCodec = new MppThread(mpp_enc_thread, this); mThreadHal = new MppThread(mpp_hal_thread, this); + mTask = mpp_malloc(MppHalDecTask*, mTaskNum); mpp_buffer_group_normal_get(&mInternalGroup, MPP_BUFFER_TYPE_ION); mpp_buffer_group_normal_get(&mPacketGroup, MPP_BUFFER_TYPE_NORMAL); @@ -85,6 +103,7 @@ Mpp::Mpp(MppCtxType type, MppCodingType coding) } if (mFrames && mPackets && mTask && + mDec && mHal && mTheadCodec && mThreadHal && mPacketGroup && mFrameGroup) { mTheadCodec->start(); @@ -115,6 +134,17 @@ void Mpp::clear() delete mThreadHal; mThreadHal = NULL; } + if (mDec) { + if (mType == MPP_CTX_DEC) + mpp_dec_deinit(mDec); + else + mpp_dec_deinit(mDec); + mDec = NULL; + } + if (mHal) { + mpp_hal_deinit(mHal); + mHal = NULL; + } if (mPackets) { delete mPackets; mPackets = NULL; diff --git a/mpp/mpp.h b/mpp/mpp.h index 10bf75e7..3cd0e4fa 100644 --- a/mpp/mpp.h +++ b/mpp/mpp.h @@ -77,7 +77,9 @@ public: RK_U32 mStatus; - void *mCodec; + union { + MppDecCtx *mDec; + }; MppHal *mHal; // decoder context diff --git a/mpp/syntax/h264d_syntax.h b/mpp/syntax/h264d_syntax.h index 31be8b4a..1b21fe71 100644 --- a/mpp/syntax/h264d_syntax.h +++ b/mpp/syntax/h264d_syntax.h @@ -415,5 +415,5 @@ typedef struct h264d_syntax_t { DXVA2_DecodeBufferDesc *buf; } H264D_Syntax_t; -#endif /* end of __H264D_SYNTAX_H__ */ +#endif /*__H264D_SYNTAX_H__*/