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

View File

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

View File

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

View File

@@ -67,6 +67,9 @@ 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;

View File

@@ -30,6 +30,21 @@ 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) {