From 6df1c1ec62f1ff07445eb80963d7a028510c00ac Mon Sep 17 00:00:00 2001 From: Herman Chen Date: Tue, 31 Mar 2020 09:16:37 +0800 Subject: [PATCH] [mpp_enc]: Use metadata to send intra flag. Use MppMeta in MppPacket to carry flags and data instead of MppTask. Signed-off-by: Herman Chen Change-Id: I274cf4163914938f22e983eca35c7fee8a9435dc --- mpp/base/inc/mpp_packet_impl.h | 1 - mpp/codec/mpp_enc.cpp | 18 +++++------------- mpp/codec/mpp_enc_v2.cpp | 18 ++++++------------ mpp/legacy/vpu_api_legacy.cpp | 16 ++++++++++++---- 4 files changed, 23 insertions(+), 30 deletions(-) diff --git a/mpp/base/inc/mpp_packet_impl.h b/mpp/base/inc/mpp_packet_impl.h index 57bdd826..8146cd91 100644 --- a/mpp/base/inc/mpp_packet_impl.h +++ b/mpp/base/inc/mpp_packet_impl.h @@ -22,7 +22,6 @@ #define MPP_PACKET_FLAG_EOS (0x00000001) #define MPP_PACKET_FLAG_EXTRA_DATA (0x00000002) #define MPP_PACKET_FLAG_INTERNAL (0x00000004) -#define MPP_PACKET_FLAG_INTRA (0x00000008) /* * mpp_packet_imp structure diff --git a/mpp/codec/mpp_enc.cpp b/mpp/codec/mpp_enc.cpp index 58e6cc5e..d7137341 100644 --- a/mpp/codec/mpp_enc.cpp +++ b/mpp/codec/mpp_enc.cpp @@ -334,23 +334,15 @@ void *mpp_enc_control_thread(void *data) * task_in may be null if output port is awaken by Mpp::clear() */ if (task_out) { - //set motion info buffer to output task + MppMeta meta = mpp_packet_get_meta(packet); + if (mv_info) - mpp_task_meta_set_buffer(task_out, KEY_MOTION_INFO, mv_info); + mpp_meta_set_buffer(meta, KEY_MOTION_INFO, mv_info); - mpp_task_meta_set_packet(task_out, KEY_OUTPUT_PACKET, packet); - - { - RK_S32 is_intra = hal_task->is_intra; - RK_U32 flag = mpp_packet_get_flag(packet); - - mpp_task_meta_set_s32(task_out, KEY_OUTPUT_INTRA, is_intra); - if (is_intra) { - mpp_packet_set_flag(packet, flag | MPP_PACKET_FLAG_INTRA); - } - } + mpp_meta_set_s32(meta, KEY_OUTPUT_INTRA, hal_task->is_intra); // setup output task here + mpp_task_meta_set_packet(task_out, KEY_OUTPUT_PACKET, packet); mpp_port_enqueue(output, task_out); } else { mpp_packet_deinit(&packet); diff --git a/mpp/codec/mpp_enc_v2.cpp b/mpp/codec/mpp_enc_v2.cpp index ff467945..c5ca3040 100644 --- a/mpp/codec/mpp_enc_v2.cpp +++ b/mpp/codec/mpp_enc_v2.cpp @@ -731,22 +731,16 @@ void *mpp_enc_thread(void *data) } TASK_DONE: + /* setup output packet and meta data */ mpp_packet_set_length(packet, hal_task->length); - /* - * task_in may be null if output port is awaken by Mpp::clear() - */ - if (hal_task->mv_info) - mpp_task_meta_set_buffer(task_out, KEY_MOTION_INFO, hal_task->mv_info); - { - RK_S32 is_intra = hal_task->is_intra; - RK_U32 flag = mpp_packet_get_flag(packet); + MppMeta meta = mpp_packet_get_meta(packet); - mpp_task_meta_set_s32(task_out, KEY_OUTPUT_INTRA, is_intra); - if (is_intra) { - mpp_packet_set_flag(packet, flag | MPP_PACKET_FLAG_INTRA); - } + if (hal_task->mv_info) + mpp_meta_set_buffer(meta, KEY_MOTION_INFO, hal_task->mv_info); + + mpp_meta_set_s32(meta, KEY_OUTPUT_INTRA, frm->is_intra); } TASK_RETURN: diff --git a/mpp/legacy/vpu_api_legacy.cpp b/mpp/legacy/vpu_api_legacy.cpp index d0ed621a..8cbab4f2 100644 --- a/mpp/legacy/vpu_api_legacy.cpp +++ b/mpp/legacy/vpu_api_legacy.cpp @@ -1113,8 +1113,9 @@ RK_S32 VpuApiLegacy::encode(VpuCodecContext *ctx, EncInputStream_t *aEncInStrm, if (packet) { RK_U32 eos = mpp_packet_get_eos(packet); RK_S64 pts = mpp_packet_get_pts(packet); - RK_U32 flag = mpp_packet_get_flag(packet); size_t length = mpp_packet_get_length(packet); + MppMeta meta = mpp_packet_get_meta(packet); + RK_S32 is_intra = 0; if (!fd_output) { RK_U8 *src = (RK_U8 *)mpp_packet_get_data(packet); @@ -1131,9 +1132,11 @@ RK_S32 VpuApiLegacy::encode(VpuCodecContext *ctx, EncInputStream_t *aEncInStrm, } } + mpp_meta_get_s32(meta, KEY_OUTPUT_INTRA, &is_intra); + aEncOut->size = (RK_S32)length; aEncOut->timeUs = pts; - aEncOut->keyFrame = (flag & MPP_PACKET_FLAG_INTRA) ? (1) : (0); + aEncOut->keyFrame = is_intra; vpu_api_dbg_output("get packet %p size %d pts %lld keyframe %d eos %d\n", packet, length, pts, aEncOut->keyFrame, eos); @@ -1293,8 +1296,9 @@ RK_S32 VpuApiLegacy::encoder_getstream(VpuCodecContext *ctx, EncoderOut_t *aEncO RK_U8 *src = (RK_U8 *)mpp_packet_get_data(packet); RK_U32 eos = mpp_packet_get_eos(packet); RK_S64 pts = mpp_packet_get_pts(packet); - RK_U32 flag = mpp_packet_get_flag(packet); size_t length = mpp_packet_get_length(packet); + MppMeta meta = mpp_packet_get_meta(packet); + RK_S32 is_intra = 0; RK_U32 offset = 0; if (ctx->videoCoding == OMX_RK_VIDEO_CodingAVC) { @@ -1307,9 +1311,13 @@ RK_S32 VpuApiLegacy::encoder_getstream(VpuCodecContext *ctx, EncoderOut_t *aEncO if (aEncOut->data) memcpy(aEncOut->data, src + offset, length); } + + mpp_meta_get_s32(meta, KEY_OUTPUT_INTRA, &is_intra); + aEncOut->size = (RK_S32)length; aEncOut->timeUs = pts; - aEncOut->keyFrame = (flag & MPP_PACKET_FLAG_INTRA) ? (1) : (0); + aEncOut->keyFrame = is_intra; + vpu_api_dbg_output("get packet %p size %d pts %lld keyframe %d eos %d\n", packet, length, pts, aEncOut->keyFrame, eos);