From da3fc7c4a8e9a50b7cc2adaddaf43b67dacc2fe2 Mon Sep 17 00:00:00 2001 From: Herman Chen Date: Fri, 29 Apr 2022 09:52:22 +0800 Subject: [PATCH] [mpp_list]: Add more wait functions Signed-off-by: Herman Chen Change-Id: Icc8457ce1bff75eee7e5b8b8cc34360a339571a8 --- osal/inc/mpp_list.h | 2 ++ osal/mpp_list.cpp | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/osal/inc/mpp_list.h b/osal/inc/mpp_list.h index ba34349b..204ab92c 100644 --- a/osal/inc/mpp_list.h +++ b/osal/inc/mpp_list.h @@ -67,7 +67,9 @@ public: // for list wait MPP_RET wait_lt(RK_S64 timeout, RK_S32 val); + MPP_RET wait_le(RK_S64 timeout, RK_S32 val); MPP_RET wait_gt(RK_S64 timeout, RK_S32 val); + MPP_RET wait_ge(RK_S64 timeout, RK_S32 val); private: node_destructor destroy; diff --git a/osal/mpp_list.cpp b/osal/mpp_list.cpp index a747c63c..7c9ec3d2 100644 --- a/osal/mpp_list.cpp +++ b/osal/mpp_list.cpp @@ -300,6 +300,22 @@ RK_S32 mpp_list::flush() } MPP_RET mpp_list::wait_lt(RK_S64 timeout, RK_S32 val) +{ + if (list_size() < val) + return MPP_OK; + + if (!timeout) + return MPP_NOK; + + if (timeout < 0) + wait(); + else + wait(timeout); + + return list_size() < val ? MPP_OK : MPP_NOK; +} + +MPP_RET mpp_list::wait_le(RK_S64 timeout, RK_S32 val) { if (list_size() <= val) return MPP_OK; @@ -316,6 +332,22 @@ MPP_RET mpp_list::wait_lt(RK_S64 timeout, RK_S32 val) } MPP_RET mpp_list::wait_gt(RK_S64 timeout, RK_S32 val) +{ + if (list_size() > val) + return MPP_OK; + + if (!timeout) + return MPP_NOK; + + if (timeout < 0) + wait(); + else + wait(timeout); + + return list_size() > val ? MPP_OK : MPP_NOK; +} + +MPP_RET mpp_list::wait_ge(RK_S64 timeout, RK_S32 val) { if (list_size() >= val) return MPP_OK;