mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-06 01:26:49 +08:00
[mpp]: add frame signal chain to mpp parser/hal thread and get_frame interface
git-svn-id: https://10.10.10.66:8443/svn/MediaProcessPlatform/trunk/mpp@254 6e48237b-75ef-9749-8fc9-41990f28c85a
This commit is contained in:
@@ -260,6 +260,7 @@ void *mpp_dec_hal_thread(void *data)
|
|||||||
frames->lock();
|
frames->lock();
|
||||||
frames->add_at_tail(&frame, sizeof(frame));
|
frames->add_at_tail(&frame, sizeof(frame));
|
||||||
mpp->mFramePutCount++;
|
mpp->mFramePutCount++;
|
||||||
|
frames->signal();
|
||||||
frames->unlock();
|
frames->unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -108,6 +108,7 @@ void *mpp_enc_hal_thread(void *data)
|
|||||||
frames->lock();
|
frames->lock();
|
||||||
frames->add_at_tail(&frame, sizeof(frame));
|
frames->add_at_tail(&frame, sizeof(frame));
|
||||||
mpp->mFramePutCount++;
|
mpp->mFramePutCount++;
|
||||||
|
frames->signal();
|
||||||
frames->unlock();
|
frames->unlock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -168,20 +168,27 @@ MPP_RET Mpp::get_frame(MppFrame *frame)
|
|||||||
{
|
{
|
||||||
Mutex::Autolock autoLock(mFrames->mutex());
|
Mutex::Autolock autoLock(mFrames->mutex());
|
||||||
MppFrame first = NULL;
|
MppFrame first = NULL;
|
||||||
|
|
||||||
|
if (0 == mFrames->list_size()) {
|
||||||
|
mThreadCodec->signal();
|
||||||
|
mFrames->wait();
|
||||||
|
}
|
||||||
|
|
||||||
if (mFrames->list_size()) {
|
if (mFrames->list_size()) {
|
||||||
mFrames->del_at_tail(&first, sizeof(frame));
|
mFrames->del_at_tail(&first, sizeof(frame));
|
||||||
mFrameGetCount++;
|
mFrameGetCount++;
|
||||||
|
mThreadHal->signal();
|
||||||
|
|
||||||
MppFrame prev = first;
|
MppFrame prev = first;
|
||||||
MppFrame next = NULL;
|
MppFrame next = NULL;
|
||||||
while (mFrames->list_size()) {
|
while (mFrames->list_size()) {
|
||||||
mFrames->del_at_tail(&next, sizeof(frame));
|
mFrames->del_at_tail(&next, sizeof(frame));
|
||||||
mFrameGetCount++;
|
mFrameGetCount++;
|
||||||
|
mThreadHal->signal();
|
||||||
mpp_frame_set_next(prev, next);
|
mpp_frame_set_next(prev, next);
|
||||||
prev = next;
|
prev = next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mThreadHal->signal();
|
|
||||||
*frame = first;
|
*frame = first;
|
||||||
return MPP_OK;
|
return MPP_OK;
|
||||||
}
|
}
|
||||||
|
@@ -82,6 +82,10 @@ int main()
|
|||||||
for (i = 0; i < MPI_DEC_LOOP_COUNT; i++) {
|
for (i = 0; i < MPI_DEC_LOOP_COUNT; i++) {
|
||||||
mpp_packet_init(&dec_in, buf, size);
|
mpp_packet_init(&dec_in, buf, size);
|
||||||
|
|
||||||
|
// IMPORTANT: eos flag will flush all decoded frame
|
||||||
|
if (i == MPI_DEC_LOOP_COUNT - 1)
|
||||||
|
mpp_packet_set_eos(dec_in);
|
||||||
|
|
||||||
// TODO: read stream data to buf
|
// TODO: read stream data to buf
|
||||||
|
|
||||||
ret = mpi->decode(ctx, dec_in, &dec_out);
|
ret = mpi->decode(ctx, dec_in, &dec_out);
|
||||||
@@ -108,6 +112,10 @@ int main()
|
|||||||
for (i = 0; i < MPI_DEC_LOOP_COUNT; i++) {
|
for (i = 0; i < MPI_DEC_LOOP_COUNT; i++) {
|
||||||
mpp_packet_init(&dec_in, buf, size);
|
mpp_packet_init(&dec_in, buf, size);
|
||||||
|
|
||||||
|
// IMPORTANT: eos flag will flush all decoded frame
|
||||||
|
if (i == MPI_DEC_LOOP_COUNT - 1)
|
||||||
|
mpp_packet_set_eos(dec_in);
|
||||||
|
|
||||||
// TODO: read stream data to buf
|
// TODO: read stream data to buf
|
||||||
|
|
||||||
ret = mpi->decode_put_packet(ctx, dec_in);
|
ret = mpi->decode_put_packet(ctx, dec_in);
|
||||||
|
Reference in New Issue
Block a user