題外話
疫情隔離在家,周末還在努力學習的我 .....
一、前言
上一篇文章中,有基本講清楚Producer一端的處理邏輯,最后也留下了一個疑問:
Consumer是什么時候來消費數據的?他是自己主動來取的?還是收到了某種通知后再來處理的?
這篇文章,就帶着這些疑問來開始分析源碼。開頭還是把這種流程圖貼一下
二、Listener監聽器的回調過程解析
生產者寫完數據,把buffer還給buffer queue后,又是怎樣通知消費者來使用的呢?
下面這些解析步驟,就是回答上面的問題
1. 生產者把數據寫入buffer后,調用BufferQueueProducer::queueBuffer 入隊列這個buffer;
2. 怎么去通知消費者來取呢? queueBuffer函數中會調用frameAvailableListener->onFrameAvailable(item);
3. frameAvailableListener是什么呢?frameAvailableListener = mCore->mConsumerListener;
4. mCore即為BufferQueueCore, BufferQueueCore中有成員 sp<IConsumerListener> mConsumerListener
5. BufferQueueCore::mConsumerListener 是什么時候設置的呢?