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;