[vpu_api_legacy]: add init_ok check for api legacy/vpu_api_legacy.cpp

[h265d_d] clear eos flag when reset 

git-svn-id: https://10.10.10.66:8443/svn/MediaProcessPlatform/trunk/mpp@949 6e48237b-75ef-9749-8fc9-41990f28c85a
This commit is contained in:
ChenSiyong
2016-06-23 03:20:17 +00:00
parent 8ade39c2c0
commit 6385471dea
3 changed files with 15 additions and 5 deletions

View File

@@ -286,6 +286,7 @@ RK_S32 h265d_split_reset(void *sc)
s->fetch_timestamp = 1; s->fetch_timestamp = 1;
s->buffer = buf; s->buffer = buf;
s->buffer_size = size; s->buffer_size = size;
s->eos = 0;
return MPP_OK; return MPP_OK;
} }
@@ -1971,7 +1972,6 @@ MPP_RET h265d_init(void *ctx, ParserCfg *parser_cfg)
MPP_RET h265d_flush(void *ctx) MPP_RET h265d_flush(void *ctx)
{ {
RK_S32 ret = 0; RK_S32 ret = 0;
RK_U32 eos = 1;
H265dContext_t *h265dctx = (H265dContext_t *)ctx; H265dContext_t *h265dctx = (H265dContext_t *)ctx;
HEVCContext *s = (HEVCContext *)h265dctx->priv_data; HEVCContext *s = (HEVCContext *)h265dctx->priv_data;
HEVCFrame *frame = NULL; HEVCFrame *frame = NULL;
@@ -2001,6 +2001,7 @@ MPP_RET h265d_reset(void *ctx)
mpp_hevc_flush_dpb(s); mpp_hevc_flush_dpb(s);
h265d_split_reset(h265dctx->split_cxt); h265d_split_reset(h265dctx->split_cxt);
s->max_ra = INT_MAX; s->max_ra = INT_MAX;
s->eos = 0;
return MPP_OK; return MPP_OK;
} }

View File

@@ -47,6 +47,7 @@ VpuApi::VpuApi()
fp = fopen("/sdcard/rk_mpp_dump.yuv", "wb"); fp = fopen("/sdcard/rk_mpp_dump.yuv", "wb");
fp_buf = mpp_malloc(RK_U8, (MAX_WRITE_HEIGHT * MAX_WRITE_WIDTH * 2)); fp_buf = mpp_malloc(RK_U8, (MAX_WRITE_HEIGHT * MAX_WRITE_WIDTH * 2));
} }
init_ok = 0;
mpp_log_f("ok\n"); mpp_log_f("ok\n");
} }
@@ -100,7 +101,7 @@ RK_S32 VpuApi::init(VpuCodecContext *ctx, RK_U8 *extraData, RK_U32 extra_size)
mpi->decode_put_packet(mpp_ctx, pkt); mpi->decode_put_packet(mpp_ctx, pkt);
mpp_packet_deinit(&pkt); mpp_packet_deinit(&pkt);
} }
init_ok = 1;
mpp_log_f("ok\n"); mpp_log_f("ok\n");
return ret; return ret;
} }
@@ -109,7 +110,7 @@ RK_S32 VpuApi::flush(VpuCodecContext *ctx)
{ {
(void)ctx; (void)ctx;
mpp_log_f("in\n"); mpp_log_f("in\n");
if (mpi && mpi->reset) { if (mpi && mpi->reset && !init_ok) {
mpi->reset(mpp_ctx); mpi->reset(mpp_ctx);
} }
mpp_log_f("ok\n"); mpp_log_f("ok\n");
@@ -128,9 +129,13 @@ RK_S32 VpuApi::decode(VpuCodecContext *ctx, VideoPacket_t *pkt, DecoderOut_t *aD
RK_S32 VpuApi::decode_sendstream(VideoPacket_t *pkt) RK_S32 VpuApi::decode_sendstream(VideoPacket_t *pkt)
{ {
RK_S32 ret; RK_S32 ret = MPP_OK;
MppPacket mpkt = NULL; MppPacket mpkt = NULL;
if (!init_ok) {
return VPU_API_ERR_VPU_CODEC_INIT;
}
mpp_packet_init(&mpkt, pkt->data, pkt->size); mpp_packet_init(&mpkt, pkt->data, pkt->size);
mpp_packet_set_pts(mpkt, pkt->pts); mpp_packet_set_pts(mpkt, pkt->pts);
if (pkt->nFlags & OMX_BUFFERFLAG_EOS) { if (pkt->nFlags & OMX_BUFFERFLAG_EOS) {
@@ -149,6 +154,9 @@ RK_S32 VpuApi:: decode_getoutframe(DecoderOut_t *aDecOut)
RK_S32 ret = 0; RK_S32 ret = 0;
VPU_FRAME *vframe = (VPU_FRAME *)aDecOut->data; VPU_FRAME *vframe = (VPU_FRAME *)aDecOut->data;
MppFrame mframe = NULL; MppFrame mframe = NULL;
if (!init_ok) {
return VPU_API_ERR_VPU_CODEC_INIT;
}
memset(vframe, 0, sizeof(VPU_FRAME)); memset(vframe, 0, sizeof(VPU_FRAME));
@@ -335,7 +343,7 @@ RK_S32 VpuApi::control(VpuCodecContext *ctx, VPU_API_CMD cmd, void *param)
mpp_log_f("in\n"); mpp_log_f("in\n");
(void)ctx; (void)ctx;
if (mpi == NULL) { if (mpi == NULL && !init_ok) {
return 0; return 0;
} }

View File

@@ -46,6 +46,7 @@ public:
private: private:
MppCtx mpp_ctx; MppCtx mpp_ctx;
MppApi *mpi; MppApi *mpi;
RK_U32 init_ok;
RK_U32 frame_count; RK_U32 frame_count;
RK_U32 set_eos; RK_U32 set_eos;
RK_U32 vpu_api_debug; RK_U32 vpu_api_debug;