From ff1a8f1fcb38b09b8f3a7f957bf51c4c79be841b Mon Sep 17 00:00:00 2001 From: ChenHengming Date: Thu, 23 Jun 2016 11:19:33 +0000 Subject: [PATCH] [mpp]: add internal pts mode flag for mpeg2/mpeg4 git-svn-id: https://10.10.10.66:8443/svn/MediaProcessPlatform/trunk/mpp@953 6e48237b-75ef-9749-8fc9-41990f28c85a --- mpp/codec/inc/mpp_dec.h | 2 ++ mpp/codec/inc/parser_api.h | 1 + mpp/codec/mpp_dec.cpp | 8 +++++--- mpp/legacy/vpu_api_legacy.cpp | 4 ++++ mpp/mpp.cpp | 17 ++++++++++++----- mpp/mpp.h | 1 + 6 files changed, 25 insertions(+), 8 deletions(-) diff --git a/mpp/codec/inc/mpp_dec.h b/mpp/codec/inc/mpp_dec.h index 2ac5b7b9..07400bb8 100644 --- a/mpp/codec/inc/mpp_dec.h +++ b/mpp/codec/inc/mpp_dec.h @@ -39,6 +39,7 @@ struct MppDec_t { // work mode flag RK_U32 parser_need_split; RK_U32 parser_fast_mode; + RK_U32 parser_internal_pts; // dec parser thread runtime resource context MppPacket mpp_pkt_in; @@ -49,6 +50,7 @@ typedef struct { MppCodingType coding; RK_U32 fast_mode; RK_U32 need_split; + RK_U32 internal_pts; void *mpp; } MppDecCfg; diff --git a/mpp/codec/inc/parser_api.h b/mpp/codec/inc/parser_api.h index c211b2d1..d7ebe58e 100644 --- a/mpp/codec/inc/parser_api.h +++ b/mpp/codec/inc/parser_api.h @@ -37,6 +37,7 @@ typedef struct DecParserInitCfg_t { // output RK_S32 task_count; RK_U32 need_split; + RK_U32 internal_pts; IOInterruptCB notify_cb; } ParserCfg; diff --git a/mpp/codec/mpp_dec.cpp b/mpp/codec/mpp_dec.cpp index e96e3f67..9fc3dfb7 100644 --- a/mpp/codec/mpp_dec.cpp +++ b/mpp/codec/mpp_dec.cpp @@ -789,6 +789,7 @@ MPP_RET mpp_dec_init(MppDec **dec, MppDecCfg *cfg) packet_slots, hal_task_count, cfg->need_split, + cfg->internal_pts, cb, }; @@ -826,9 +827,10 @@ MPP_RET mpp_dec_init(MppDec **dec, MppDecCfg *cfg) p->frame_slots = frame_slots; p->packet_slots = packet_slots; - p->mpp = cfg->mpp; - p->parser_need_split = cfg->need_split; - p->parser_fast_mode = cfg->fast_mode; + p->mpp = cfg->mpp; + p->parser_need_split = cfg->need_split; + p->parser_fast_mode = cfg->fast_mode; + p->parser_internal_pts = cfg->internal_pts; *dec = p; return MPP_OK; } while (0); diff --git a/mpp/legacy/vpu_api_legacy.cpp b/mpp/legacy/vpu_api_legacy.cpp index fa59e74c..7a744964 100644 --- a/mpp/legacy/vpu_api_legacy.cpp +++ b/mpp/legacy/vpu_api_legacy.cpp @@ -353,6 +353,10 @@ RK_S32 VpuApi::control(VpuCodecContext *ctx, VPU_API_CMD cmd, void *param) mpicmd = MPP_DEC_SET_EXT_BUF_GROUP; break; } + case VPU_API_USE_PRESENT_TIME_ORDER: { + mpicmd = MPP_DEC_USE_PRESENT_TIME_ORDER; + break; + } case VPU_API_SET_DEFAULT_WIDTH_HEIGH: { VPU_GENERIC *p = (VPU_GENERIC *)param; RK_U32 ImgWidth = p->ImgWidth; diff --git a/mpp/mpp.cpp b/mpp/mpp.cpp index 607442dc..2734eee8 100644 --- a/mpp/mpp.cpp +++ b/mpp/mpp.cpp @@ -57,7 +57,8 @@ Mpp::Mpp() mMultiFrame(0), mStatus(0), mParserFastMode(0), - mParserNeedSplit(0) + mParserNeedSplit(0), + mParserInternalPts(0) { } @@ -80,6 +81,7 @@ MPP_RET Mpp::init(MppCtxType type, MppCodingType coding) coding, mParserFastMode, mParserNeedSplit, + mParserInternalPts, this, }; mpp_dec_init(&mDec, &cfg); @@ -298,14 +300,19 @@ MPP_RET Mpp::control(MpiCmd cmd, MppParam param) mpp_dec_control(mDec, cmd, param); break; } + case MPP_DEC_USE_PRESENT_TIME_ORDER: { + RK_U32 flag = *((RK_U32 *)param); + mParserInternalPts = flag; + break; + } case MPP_DEC_SET_PARSER_SPLIT_MODE: { - RK_U32 mode = *((RK_U32 *)param); - mParserNeedSplit = mode; + RK_U32 flag = *((RK_U32 *)param); + mParserNeedSplit = flag; break; } case MPP_DEC_SET_PARSER_FAST_MODE: { - RK_U32 mode = *((RK_U32 *)param); - mParserFastMode = mode; + RK_U32 flag = *((RK_U32 *)param); + mParserFastMode = flag; break; } case MPP_DEC_GET_STREAM_COUNT: { diff --git a/mpp/mpp.h b/mpp/mpp.h index b4b07522..007cda32 100644 --- a/mpp/mpp.h +++ b/mpp/mpp.h @@ -121,6 +121,7 @@ private: RK_U32 mStatus; RK_U32 mParserFastMode; RK_U32 mParserNeedSplit; + RK_U32 mParserInternalPts; /* for MPEG2/MPEG4 */ Mpp(const Mpp &); Mpp &operator=(const Mpp &);