mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-05 17:16:50 +08:00
[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:
@@ -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)
|
||||
|
@@ -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);
|
||||
|
12
mpp/mpp.cpp
12
mpp/mpp.cpp
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
|
@@ -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) {
|
||||
|
Reference in New Issue
Block a user