[mpp]: use standard put/get packet internally

git-svn-id: https://10.10.10.66:8443/svn/MediaProcessPlatform/trunk/mpp@260 6e48237b-75ef-9749-8fc9-41990f28c85a
This commit is contained in:
ChenHengming
2015-09-09 23:19:53 +00:00
parent 20d56dabbe
commit 9b02f1c33f
5 changed files with 38 additions and 19 deletions

View File

@@ -55,7 +55,7 @@ void *mpp_dec_parser_thread(void *data)
MppDec *dec = mpp->mDec; MppDec *dec = mpp->mDec;
MppBufSlots slots = dec->slots; MppBufSlots slots = dec->slots;
HalTaskGroup tasks = dec->tasks; HalTaskGroup tasks = dec->tasks;
MppPacketImpl packet; MppPacket packet = NULL;
/* /*
* parser thread need to wait at cases below: * parser thread need to wait at cases below:
@@ -96,14 +96,7 @@ void *mpp_dec_parser_thread(void *data)
* 2. get packet to parse * 2. get packet to parse
*/ */
if (!packet_ready) { if (!packet_ready) {
mpp_list *packets = mpp->mPackets; if (MPP_OK == mpp->get_packet(&packet)) {
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; packet_ready = 1;
wait_on_packet = 0; wait_on_packet = 0;
} else { } else {
@@ -127,9 +120,9 @@ void *mpp_dec_parser_thread(void *data)
* *
*/ */
if (!task_ready) { if (!task_ready) {
mpp_dec_parse(dec, (MppPacket)&packet, task_dec); mpp_dec_parse(dec, packet, task_dec);
if (0 == packet.size) { if (0 == mpp_packet_get_size(packet)) {
mpp_packet_reset(&packet); mpp_packet_deinit(&packet);
packet_ready = 0; packet_ready = 0;
} }
} }
@@ -365,7 +358,10 @@ MPP_RET mpp_dec_flush(MppDec *dec)
return MPP_ERR_NULL_PTR; return MPP_ERR_NULL_PTR;
} }
return dec->parser_api->flush(dec->parser_ctx); dec->parser_api->flush(dec->parser_ctx);
mpp_hal_flush(dec->hal_ctx);
return MPP_OK;
} }
MPP_RET mpp_dec_control(MppDec *dec, RK_S32 cmd, void *param) MPP_RET mpp_dec_control(MppDec *dec, RK_S32 cmd, void *param)

View File

@@ -44,9 +44,8 @@ void *mpp_enc_control_thread(void *data)
frames->del_at_head(&frame, sizeof(frame)); frames->del_at_head(&frame, sizeof(frame));
mpp_packet_init(&packet, buf, size); mpp_packet_init(&packet, buf, size);
packets->lock(); mpp->put_packet(packet);
packets->add_at_tail(&packet, sizeof(packet)); mpp_packet_deinit(&packet);
packets->unlock();
} }
} }
mpp_free(buf); mpp_free(buf);

View File

@@ -208,10 +208,16 @@ MPP_RET Mpp::put_frame(MppFrame frame)
MPP_RET Mpp::get_packet(MppPacket *packet) MPP_RET Mpp::get_packet(MppPacket *packet)
{ {
Mutex::Autolock autoLock(mPackets->mutex()); Mutex::Autolock autoLock(mPackets->mutex());
if (mPackets->list_size()) { if (!mPackets->list_size()) {
mPackets->del_at_tail(packet, sizeof(packet)); *packet = NULL;
mPacketGetCount++; return MPP_NOK;
} }
MppPacket pkt;
mpp_packet_new(&pkt);
mPackets->del_at_tail(pkt, sizeof(MppPacketImpl));
mPacketGetCount++;
*packet = pkt;
return MPP_OK; return MPP_OK;
} }

View File

@@ -67,6 +67,9 @@ public:
MPP_RET put_frame(MppFrame frame); MPP_RET put_frame(MppFrame frame);
MPP_RET get_packet(MppPacket *packet); MPP_RET get_packet(MppPacket *packet);
MPP_RET reset();
MPP_RET flush();
mpp_list *mPackets; mpp_list *mPackets;
mpp_list *mFrames; mpp_list *mFrames;

View File

@@ -30,6 +30,21 @@ MPP_PACKET_ACCESSORS(RK_S64, pts)
MPP_PACKET_ACCESSORS(RK_S64, dts) MPP_PACKET_ACCESSORS(RK_S64, dts)
MPP_PACKET_ACCESSORS(RK_U32, flag) 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) MPP_RET mpp_packet_init(MppPacket *packet, void *data, size_t size)
{ {
if (NULL == packet || NULL == data || 0 == size) { if (NULL == packet || NULL == data || 0 == size) {