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