diff --git a/mpp/codec/dec/av1/av1d_api.c b/mpp/codec/dec/av1/av1d_api.c index 2557a0be..a2d490a2 100644 --- a/mpp/codec/dec/av1/av1d_api.c +++ b/mpp/codec/dec/av1/av1d_api.c @@ -194,6 +194,12 @@ MPP_RET av1d_prepare(void *ctx, MppPacket pkt, HalDecTask *task) } else { task->valid = 0; task->flags.eos = av1_ctx->eos; + if (av1_ctx->eos) { + task->input_packet = av1_ctx->pkt; + mpp_packet_set_length(av1_ctx->pkt, 0); + mpp_packet_set_pts(av1_ctx->pkt, pts); + mpp_packet_set_dts(av1_ctx->pkt, dts); + } } (void)pts; diff --git a/mpp/codec/dec/av1/av1d_cbs.c b/mpp/codec/dec/av1/av1d_cbs.c index a8598fae..30c879cd 100644 --- a/mpp/codec/dec/av1/av1d_cbs.c +++ b/mpp/codec/dec/av1/av1d_cbs.c @@ -2624,7 +2624,7 @@ static RK_S32 mpp_av1_metadata_obu(AV1Context *ctx, BitReadCtx_t *gb, break; default: // Unknown metadata type. - return MPP_ERR_UNKNOW; + return MPP_OK; } return 0; @@ -2975,6 +2975,7 @@ MPP_RET mpp_av1_read_unit(AV1Context *ctx, Av1ObuUnit *unit) return err; } break; case AV1_OBU_METADATA: { + ctx->frame_tag_size += obu->obu_size; err = mpp_av1_metadata_obu(ctx, &gbc, &obu->obu.metadata); if (err < 0) return err; diff --git a/mpp/codec/dec/av1/av1d_parser.c b/mpp/codec/dec/av1/av1d_parser.c index e376ba43..81c75ee4 100644 --- a/mpp/codec/dec/av1/av1d_parser.c +++ b/mpp/codec/dec/av1/av1d_parser.c @@ -990,11 +990,15 @@ MPP_RET av1d_paser_reset(Av1CodecContext *ctx) av1d_dbg_func("enter ctx %p\n", ctx); for ( i = 0; i < MPP_ARRAY_ELEMS(s->ref); i++) { AV1Frame *f = &s->ref[i]; - if (f->ref) { - av1d_frame_unref(ctx, &s->ref[i]); - } + if (f->ref) + av1d_frame_unref(ctx, &s->ref[i]); } + + if (s->cur_frame.ref) { + av1d_frame_unref(ctx, &s->cur_frame); + } + av1d_dbg_func("leave ctx %p\n", ctx); return ret;