diff --git a/mpp/codec/mpp_dec.cpp b/mpp/codec/mpp_dec.cpp index d1fcba90..ae01b26f 100644 --- a/mpp/codec/mpp_dec.cpp +++ b/mpp/codec/mpp_dec.cpp @@ -423,6 +423,14 @@ MPP_RET mpp_dec_proc_cfg(MppDecImpl *dec, MpiCmd cmd, void *param) dec_dbg_func("set dec cfg\n"); } break; + case MPP_DEC_GET_CFG: { + MppDecCfgImpl *dec_cfg = (MppDecCfgImpl *)param; + + if (dec_cfg) + memcpy(&dec_cfg->cfg, &dec->cfg, sizeof(dec->cfg)); + + dec_dbg_func("get dec cfg\n"); + } break; default : { } break; } diff --git a/mpp/mpp.cpp b/mpp/mpp.cpp index f3c18eab..7070f4ee 100644 --- a/mpp/mpp.cpp +++ b/mpp/mpp.cpp @@ -962,6 +962,16 @@ MPP_RET Mpp::control_dec(MpiCmd cmd, MppParam param) ret = mpp_dec_set_cfg(&mDecInitcfg, &dec_cfg->cfg); } } break; + case MPP_DEC_GET_CFG : { + if (mDec) + ret = mpp_dec_control(mDec, cmd, param); + else if (param) { + MppDecCfgImpl *dec_cfg = (MppDecCfgImpl *)param; + + memcpy(&dec_cfg->cfg, &mDecInitcfg, sizeof(dec_cfg->cfg)); + ret = MPP_OK; + } + } break; default : { } break; } diff --git a/test/mpi_dec_test.c b/test/mpi_dec_test.c index 2e37fc5e..90a4aebc 100644 --- a/test/mpi_dec_test.c +++ b/test/mpi_dec_test.c @@ -630,6 +630,13 @@ int dec_decode(MpiDecTestCmd *cmd) mpp_dec_cfg_init(&cfg); + /* get default config from decoder context */ + ret = mpi->control(ctx, MPP_DEC_GET_CFG, cfg); + if (ret) { + mpp_err("%p failed to get decoder cfg ret %d\n", ctx, ret); + goto MPP_TEST_OUT; + } + /* * split_parse is to enable mpp internal frame spliter when the input * packet is not aplited into frames.