diff --git a/mpp/codec/mpp_dec.cpp b/mpp/codec/mpp_dec.cpp index 3c1d9d4f..5b70aa81 100644 --- a/mpp/codec/mpp_dec.cpp +++ b/mpp/codec/mpp_dec.cpp @@ -287,8 +287,7 @@ static MPP_RET try_proc_dec_task(Mpp *mpp, DecTask *task) */ if (!task->status.curr_task_rdy) { parser_prepare(dec->parser, dec->mpp_pkt_in, task_dec); - if (0 == mpp_packet_get_length(dec->mpp_pkt_in)) { - mpp_free(mpp_packet_get_data(dec->mpp_pkt_in)); + if (0 == mpp_packet_get_length(dec->mpp_pkt_in)) { mpp_packet_deinit(&dec->mpp_pkt_in); dec->mpp_pkt_in = NULL; } diff --git a/mpp/mpp.cpp b/mpp/mpp.cpp index cf58f380..6b471976 100644 --- a/mpp/mpp.cpp +++ b/mpp/mpp.cpp @@ -307,7 +307,7 @@ MPP_RET Mpp::reset() MppPacket mpkt = NULL; RK_U32 flags = 0; mPackets->lock(); - if(mPackets->list_size()){ + if (mPackets->list_size()) { mPackets->del_at_head(&mpkt, sizeof(mpkt)); } mPackets->flush(); @@ -329,13 +329,12 @@ MPP_RET Mpp::reset() mpp_enc_reset(mEnc); } mThreadCodec->unlock(THREAD_RESET); - if(mpkt != NULL){ + if (mpkt != NULL) { flags = mpp_packet_get_flag(mpkt); - mpp_log("flags = %d",flags); - if(flags&MPP_PACKET_FLAG_EXTRA_DATA){ //avoid first packet is extara data was flushed & dec can work + mpp_log("flags = %d", flags); + if (flags & MPP_PACKET_FLAG_EXTRA_DATA) { //avoid first packet is extara data was flushed & dec can work put_packet(mpkt); } - mpp_free(mpp_packet_get_data(mpkt)); mpp_packet_deinit(&mpkt); mpkt = NULL; } diff --git a/mpp/mpp_packet.cpp b/mpp/mpp_packet.cpp index ddf7a688..92811dc2 100644 --- a/mpp/mpp_packet.cpp +++ b/mpp/mpp_packet.cpp @@ -94,6 +94,7 @@ MPP_RET mpp_packet_copy_init(MppPacket *packet, const MppPacket src) memcpy(p, src, sizeof(*p)); p->data = p->pos = data; p->size = p->length = size; + p->flag |= MPP_PACKET_FLAG_INTERNAL; if (size) { memcpy(data, ((MppPacketImpl *)src)->data, size); } @@ -115,6 +116,9 @@ MPP_RET mpp_packet_deinit(MppPacket *packet) MppPacketImpl *p = (MppPacketImpl *)(*packet); check_mpp_packet_name(p); + if (p->flag & MPP_PACKET_FLAG_INTERNAL) { + mpp_free(p->data); + } mpp_free(p); *packet = NULL; return MPP_OK; diff --git a/mpp/mpp_packet_impl.h b/mpp/mpp_packet_impl.h index 3633d87e..fa98767b 100644 --- a/mpp/mpp_packet_impl.h +++ b/mpp/mpp_packet_impl.h @@ -22,6 +22,7 @@ #define MPP_PACKET_FLAG_EOS (0x00000001) #define MPP_PACKET_FLAG_EXTRA_DATA (0x00000002) +#define MPP_PACKET_FLAG_INTERNAL (0x00000004) /* * mpp_packet_imp structure