diff --git a/inc/mpp_packet.h b/inc/mpp_packet.h index 5feda767..93795cf8 100644 --- a/inc/mpp_packet.h +++ b/inc/mpp_packet.h @@ -30,10 +30,11 @@ extern "C" { * MppPacket interface * * mpp_packet_init = mpp_packet_new + mpp_packet_set_data + mpp_packet_set_size + * mpp_packet_copy_init = mpp_packet_init + memcpy */ MPP_RET mpp_packet_new(MppPacket *packet); MPP_RET mpp_packet_init(MppPacket *packet, void *data, size_t size); -MPP_RET mpp_packet_copy(MppPacket *packet, const MppPacket src); +MPP_RET mpp_packet_copy_init(MppPacket *packet, const MppPacket src); MPP_RET mpp_packet_deinit(MppPacket *packet); /* diff --git a/mpp/codec/mpp_dec.cpp b/mpp/codec/mpp_dec.cpp index cd4fc839..2f2d3884 100644 --- a/mpp/codec/mpp_dec.cpp +++ b/mpp/codec/mpp_dec.cpp @@ -34,7 +34,7 @@ void *mpp_dec_parser_thread(void *data) MppDec *dec = mpp->mDec; MppBufSlots slots = dec->slots; HalTaskGroup tasks = dec->tasks; - MppPacketImpl packet; + MppPacket packet = NULL; /* * parser thread need to wait at cases below: @@ -106,9 +106,9 @@ void *mpp_dec_parser_thread(void *data) */ if (!task_ready) { hal_task_init(&task_local, MPP_CTX_DEC); - parser_prepare(dec->parser, (MppPacket)&packet, task_dec); - if (0 == packet.length) { - mpp_packet_reset(&packet); + parser_prepare(dec->parser, packet, task_dec); + if (0 == mpp_packet_get_length(packet)) { + mpp_packet_deinit(&packet); packet_ready = 0; } } diff --git a/mpp/mpp.cpp b/mpp/mpp.cpp index a5cb0e98..1adea7e5 100644 --- a/mpp/mpp.cpp +++ b/mpp/mpp.cpp @@ -56,7 +56,7 @@ Mpp::Mpp(MppCtxType type, MppCodingType coding) { switch (mType) { case MPP_CTX_DEC : { - mPackets = new mpp_list((node_destructor)NULL); + mPackets = new mpp_list((node_destructor)mpp_packet_deinit); mFrames = new mpp_list((node_destructor)mpp_frame_deinit); mTasks = new mpp_list((node_destructor)NULL); @@ -156,7 +156,9 @@ MPP_RET Mpp::put_packet(MppPacket packet) { Mutex::Autolock autoLock(mPackets->mutex()); if (mPackets->list_size() < 4) { - mPackets->add_at_tail(packet, sizeof(MppPacketImpl)); + MppPacket pkt; + mpp_packet_copy_init(&pkt, packet); + mPackets->add_at_tail(&pkt, sizeof(pkt)); mPacketPutCount++; mThreadCodec->signal(); return MPP_OK; diff --git a/mpp/mpp_packet.cpp b/mpp/mpp_packet.cpp index 511ecda6..965f6797 100644 --- a/mpp/mpp_packet.cpp +++ b/mpp/mpp_packet.cpp @@ -72,7 +72,7 @@ MPP_RET mpp_packet_init(MppPacket *packet, void *data, size_t size) return MPP_OK; } -MPP_RET mpp_packet_copy(MppPacket *packet, const MppPacket src) +MPP_RET mpp_packet_copy_init(MppPacket *packet, const MppPacket src) { if (NULL == packet || NULL == src) { mpp_err_f("found NULL input\n");