diff --git a/mpp/codec/mpp_dec.cpp b/mpp/codec/mpp_dec.cpp index a74826a7..eddc10f7 100644 --- a/mpp/codec/mpp_dec.cpp +++ b/mpp/codec/mpp_dec.cpp @@ -55,7 +55,7 @@ void *mpp_dec_parser_thread(void *data) MppDec *dec = mpp->mDec; MppBufSlots slots = dec->slots; HalTaskGroup tasks = dec->tasks; - MppPacket packet = NULL; + MppPacketImpl packet; /* * parser thread need to wait at cases below: @@ -96,7 +96,14 @@ void *mpp_dec_parser_thread(void *data) * 2. get packet to parse */ if (!packet_ready) { - if (MPP_OK == mpp->get_packet(&packet)) { + mpp_list *packets = mpp->mPackets; + Mutex::Autolock autoLock(packets->mutex()); + if (packets->list_size()) { + /* + * packet will be destroyed outside, here just copy the content + */ + packets->del_at_head(&packet, sizeof(packet)); + mpp->mPacketGetCount++; packet_ready = 1; wait_on_packet = 0; } else { @@ -120,9 +127,9 @@ void *mpp_dec_parser_thread(void *data) * */ if (!task_ready) { - mpp_dec_parse(dec, packet, task_dec); - if (0 == mpp_packet_get_size(packet)) { - mpp_packet_deinit(&packet); + mpp_dec_parse(dec, (MppPacket)&packet, task_dec); + if (0 == packet.size) { + mpp_packet_reset(&packet); packet_ready = 0; } } @@ -358,10 +365,7 @@ MPP_RET mpp_dec_flush(MppDec *dec) return MPP_ERR_NULL_PTR; } - dec->parser_api->flush(dec->parser_ctx); - mpp_hal_flush(dec->hal_ctx); - - return MPP_OK; + return dec->parser_api->flush(dec->parser_ctx); } MPP_RET mpp_dec_control(MppDec *dec, RK_S32 cmd, void *param) diff --git a/mpp/codec/mpp_enc.cpp b/mpp/codec/mpp_enc.cpp index 7c00acef..66ab68c8 100644 --- a/mpp/codec/mpp_enc.cpp +++ b/mpp/codec/mpp_enc.cpp @@ -44,8 +44,9 @@ void *mpp_enc_control_thread(void *data) frames->del_at_head(&frame, sizeof(frame)); mpp_packet_init(&packet, buf, size); - mpp->put_packet(packet); - mpp_packet_deinit(&packet); + packets->lock(); + packets->add_at_tail(&packet, sizeof(packet)); + packets->unlock(); } } mpp_free(buf); diff --git a/mpp/mpp.cpp b/mpp/mpp.cpp index 8ed8dd73..a5cb0e98 100644 --- a/mpp/mpp.cpp +++ b/mpp/mpp.cpp @@ -208,16 +208,10 @@ MPP_RET Mpp::put_frame(MppFrame frame) MPP_RET Mpp::get_packet(MppPacket *packet) { Mutex::Autolock autoLock(mPackets->mutex()); - if (!mPackets->list_size()) { - *packet = NULL; - return MPP_NOK; + if (mPackets->list_size()) { + mPackets->del_at_tail(packet, sizeof(packet)); + mPacketGetCount++; } - - MppPacket pkt; - mpp_packet_new(&pkt); - mPackets->del_at_tail(pkt, sizeof(MppPacketImpl)); - mPacketGetCount++; - *packet = pkt; return MPP_OK; } diff --git a/mpp/mpp.h b/mpp/mpp.h index 50252660..07c487c9 100644 --- a/mpp/mpp.h +++ b/mpp/mpp.h @@ -67,9 +67,6 @@ public: MPP_RET put_frame(MppFrame frame); MPP_RET get_packet(MppPacket *packet); - MPP_RET reset(); - MPP_RET flush(); - mpp_list *mPackets; mpp_list *mFrames; diff --git a/mpp/mpp_packet.cpp b/mpp/mpp_packet.cpp index 76fba87a..16b6a17c 100644 --- a/mpp/mpp_packet.cpp +++ b/mpp/mpp_packet.cpp @@ -30,21 +30,6 @@ MPP_PACKET_ACCESSORS(RK_S64, pts) MPP_PACKET_ACCESSORS(RK_S64, dts) MPP_PACKET_ACCESSORS(RK_U32, flag) -MPP_RET mpp_packet_new(MppPacket *packet) -{ - if (NULL == packet) { - mpp_err_f("found NULL input\n"); - return MPP_ERR_NULL_PTR; - } - - MppPacketImpl *p = mpp_calloc(MppPacketImpl, 1); - if (NULL == p) - mpp_err_f("malloc failed\n"); - - *packet = p; - return (p) ? (MPP_OK) : (MPP_NOK); -} - MPP_RET mpp_packet_init(MppPacket *packet, void *data, size_t size) { if (NULL == packet || NULL == data || 0 == size) {