Discuz! Board
标题:
利用GraphicBuffer来复制系统
[打印本页]
作者:
zangcf
时间:
2016-4-17 15:40
标题:
利用GraphicBuffer来复制系统
上层的程序,处理号surface,会交给surfaceflinger处理。
BufferQueue
中间有一个listener:
class
ProxyConsumerListener :
public
BnConsumerListener {
public
:
//省略構造函數
virtual
void
onFrameAvailable();
/*當一塊buffer可以被消費時,這個函數會被調用,特別注意此時沒有共享鎖的保護*/
virtual
voidonBuffersReleased();
/*BufferQueue通知consumer它已經釋放其slot中的一個或多個 GraphicBuffer引用*/
private
: wp<ConsumerListener>mConsumerListener;}
[backcolor=rgba(128, 128, 128, 0.0470588)]这个listener会通过surfaceflinger一步一步,
最终会调用到FramebufferSurface:
nFrameAvailable()
/media/doraemon/works/android/mtk/6735/alps_ok/frameworks/native/services/surfaceflinger/DisplayHardware/FramebufferSurface.cpp
// Overrides ConsumerBase:
nFrameAvailable(), does not call base class impl.
void FramebufferSurface:
nFrameAvailable() {
sp<GraphicBuffer> buf;
sp<Fence> acquireFence;
status_t err = nextBuffer(buf, acquireFence);
if (err != NO_ERROR) {
ALOGE("error latching nnext FramebufferSurface buffer: %s (%d)",
strerror(-err), err);
return;
}
err = mHwc.fbPost(mDisplayType, acquireFence, buf);
if (err != NO_ERROR) {
ALOGE("error posting framebuffer: %d", err);
}
}
作者:
zangcf
时间:
2016-4-17 16:35
上面出现了最终的buf,这个buf是一个GraphicBuffer类对象。
GraphicBuffer
frameworks/native/include/ui/GraphicBuffer.h
Represents a buffer, wraps ANativeWindowBuffer
Attributes including width, height, format, usage inherited from ANativeWindowBuffer
欢迎光临 Discuz! Board (http://47.89.242.157:9000/bbs/discuz/)
Powered by Discuz! X3.2