/******************************************************************************
*   REPEAT:[ dequeProvider() -> enqueProvider() ]
*   dequeProvider() returns false immediately if empty.
*******************************************************************************/
bool
ImgBufQueue::
enqueProvider(ImgBufQueNode const& rNode)
{
    if  ( ! rNode ) {
        MY_LOGW("buffer is NULL");
        return  false;
    }
    //
    Mutex::Autolock _lock(mDoneImgBufQueMtx);
    //
    MY_LOGV_IF(
        ENABLE_LOG_PER_FRAME, 
        "+ Que.size(%d); (CookieED/CookieDE)=(%p,%p) %s; Buffer[%s@0x%08X@%d@%s@(%d)%dx%d@%d@Timestamp(%lld)]", 
        mDoneImgBufQue.size(), 
        rNode.getCookieED(), rNode.getCookieDE(), ImgBufQueNodeStatus2Name(rNode.getStatus()), 
        rNode->getBufName(), rNode->getVirAddr(), rNode->getBufSize(), rNode->getImgFormat().string(), 
        rNode->getImgWidthStride(), rNode->getImgWidth(), rNode->getImgHeight(), rNode->getBitsPerPixel(), rNode->getTimestamp()
    );
    //
    mDoneImgBufQue.push_back(rNode);
    mDoneImgBufQueCond.broadcast();
    //
    return  true;
}
bool
BaseCamAdapter::
sendFrameToObservers(CamFrame*const frame, FrameObservers_t const& rObservers)
{
    MY_LOGV_IF(ENABLE_LOG_PER_FRAME, "+ frameType(0x%x)", frame->mType);
    //
    cam_frame_callback callback = NULL;
    //
    for (uint_t i = 0; i < rObservers.size(); i++)
    {
        {
            RWLock::AutoRLock _l(mRWLockFrameNotifier);
            //
            if  ( i >= rObservers.size() )
            {
                MY_LOGW("break loop since i(%d) >= rObservers.size(%d)", i, rObservers.size());
                break;
            }
            //
            frame->mCbCookie = rObservers.keyAt(i);
            callback = rObservers.valueAt(i);
        }
        //
        MY_LOGV_IF(ENABLE_LOG_PER_FRAME,
                   "i(%d), (frameType, cookie, callback)=(0x%x, %p, %p)",
                   i, frame->mType, frame->mCbCookie, callback
                  );
        //
        if  ( ! callback )
        {
            MY_LOGW("null callback for frameType(0x%x)", frame->mType);
            continue;
        }
        //
        frame->incRef();
        callback(frame);
    }
    //
    return  true;
}