13e87601170141229d661df93e2f59e1ced73474bMathias Agopian/*
23e87601170141229d661df93e2f59e1ced73474bMathias Agopian * Copyright (C) 2007 The Android Open Source Project
33e87601170141229d661df93e2f59e1ced73474bMathias Agopian *
43e87601170141229d661df93e2f59e1ced73474bMathias Agopian * Licensed under the Apache License, Version 2.0 (the "License");
53e87601170141229d661df93e2f59e1ced73474bMathias Agopian * you may not use this file except in compliance with the License.
63e87601170141229d661df93e2f59e1ced73474bMathias Agopian * You may obtain a copy of the License at
73e87601170141229d661df93e2f59e1ced73474bMathias Agopian *
83e87601170141229d661df93e2f59e1ced73474bMathias Agopian *      http://www.apache.org/licenses/LICENSE-2.0
93e87601170141229d661df93e2f59e1ced73474bMathias Agopian *
103e87601170141229d661df93e2f59e1ced73474bMathias Agopian * Unless required by applicable law or agreed to in writing, software
113e87601170141229d661df93e2f59e1ced73474bMathias Agopian * distributed under the License is distributed on an "AS IS" BASIS,
123e87601170141229d661df93e2f59e1ced73474bMathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133e87601170141229d661df93e2f59e1ced73474bMathias Agopian * See the License for the specific language governing permissions and
143e87601170141229d661df93e2f59e1ced73474bMathias Agopian * limitations under the License.
153e87601170141229d661df93e2f59e1ced73474bMathias Agopian */
163e87601170141229d661df93e2f59e1ced73474bMathias Agopian
173e87601170141229d661df93e2f59e1ced73474bMathias Agopian#ifndef ANDROID_SF_FRAMEBUFFER_SURFACE_H
183e87601170141229d661df93e2f59e1ced73474bMathias Agopian#define ANDROID_SF_FRAMEBUFFER_SURFACE_H
193e87601170141229d661df93e2f59e1ced73474bMathias Agopian
203e87601170141229d661df93e2f59e1ced73474bMathias Agopian#include <stdint.h>
213e87601170141229d661df93e2f59e1ced73474bMathias Agopian#include <sys/types.h>
223e87601170141229d661df93e2f59e1ced73474bMathias Agopian
231a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis#include <gui/ConsumerBase.h>
243e87601170141229d661df93e2f59e1ced73474bMathias Agopian
2599c7dbb24994df2f3e175f7b25dd2c9dd92a72f0Jesse Hall#include "DisplaySurface.h"
2699c7dbb24994df2f3e175f7b25dd2c9dd92a72f0Jesse Hall
273e87601170141229d661df93e2f59e1ced73474bMathias Agopian// ---------------------------------------------------------------------------
283e87601170141229d661df93e2f59e1ced73474bMathias Agopiannamespace android {
293e87601170141229d661df93e2f59e1ced73474bMathias Agopian// ---------------------------------------------------------------------------
303e87601170141229d661df93e2f59e1ced73474bMathias Agopian
313e87601170141229d661df93e2f59e1ced73474bMathias Agopianclass Rect;
323e87601170141229d661df93e2f59e1ced73474bMathias Agopianclass String8;
33b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFaddenclass HWComposer;
343e87601170141229d661df93e2f59e1ced73474bMathias Agopian
353e87601170141229d661df93e2f59e1ced73474bMathias Agopian// ---------------------------------------------------------------------------
363e87601170141229d661df93e2f59e1ced73474bMathias Agopian
3799c7dbb24994df2f3e175f7b25dd2c9dd92a72f0Jesse Hallclass FramebufferSurface : public ConsumerBase,
3899c7dbb24994df2f3e175f7b25dd2c9dd92a72f0Jesse Hall                           public DisplaySurface {
393e87601170141229d661df93e2f59e1ced73474bMathias Agopianpublic:
40db89edc94bd2a78226b407f9f7261e202e7fa325Mathias Agopian    FramebufferSurface(HWComposer& hwc, int disp, const sp<IGraphicBufferConsumer>& consumer);
413e87601170141229d661df93e2f59e1ced73474bMathias Agopian
42028dc8f2d72bc7cd4fbe7808781443125a742f78Jesse Hall    virtual status_t beginFrame();
4338efe86d9459cf5c96a24a34cc5cbf31fdba7e19Jesse Hall    virtual status_t prepareFrame(CompositionType compositionType);
4499c7dbb24994df2f3e175f7b25dd2c9dd92a72f0Jesse Hall    virtual status_t compositionComplete();
4599c7dbb24994df2f3e175f7b25dd2c9dd92a72f0Jesse Hall    virtual status_t advanceFrame();
46851cfe834295224cd64bdd499872b95b19c4de8cJesse Hall    virtual void onFrameCommitted();
473e87601170141229d661df93e2f59e1ced73474bMathias Agopian
4899c7dbb24994df2f3e175f7b25dd2c9dd92a72f0Jesse Hall    // Implementation of DisplaySurface::dump(). Note that ConsumerBase also
4999c7dbb24994df2f3e175f7b25dd2c9dd92a72f0Jesse Hall    // has a non-virtual dump() with the same signature.
5099c7dbb24994df2f3e175f7b25dd2c9dd92a72f0Jesse Hall    virtual void dump(String8& result) const;
51a49126087b4494f4ef50873f3a3f6727265f6621Mathias Agopian
523e87601170141229d661df93e2f59e1ced73474bMathias Agopianprivate:
53b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden    virtual ~FramebufferSurface() { }; // this class cannot be overloaded
541a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis
551a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis    virtual void onFrameAvailable();
561a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis    virtual void freeBufferLocked(int slotIndex);
573e87601170141229d661df93e2f59e1ced73474bMathias Agopian
5874d211ae26a0257c6075a823812e40b55aa1e653Mathias Agopian    virtual void dumpLocked(String8& result, const char* prefix) const;
597adb0f8a9fdb961692ffd2f0c65cacb155143f64Jesse Hall
60da27af9832a0170f1fc40ef3f21371c4d30d21b3Mathias Agopian    // nextBuffer waits for and then latches the next buffer from the
61da27af9832a0170f1fc40ef3f21371c4d30d21b3Mathias Agopian    // BufferQueue and releases the previously latched buffer to the
62da27af9832a0170f1fc40ef3f21371c4d30d21b3Mathias Agopian    // BufferQueue.  The new buffer is returned in the 'buffer' argument.
63da27af9832a0170f1fc40ef3f21371c4d30d21b3Mathias Agopian    status_t nextBuffer(sp<GraphicBuffer>& outBuffer, sp<Fence>& outFence);
64da27af9832a0170f1fc40ef3f21371c4d30d21b3Mathias Agopian
65f5a33928349bebc8eebc9f466618997e98c24e68Mathias Agopian    // mDisplayType must match one of the HWC display types
66f5a33928349bebc8eebc9f466618997e98c24e68Mathias Agopian    int mDisplayType;
67f5a33928349bebc8eebc9f466618997e98c24e68Mathias Agopian
681a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis    // mCurrentBufferIndex is the slot index of the current buffer or
691a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis    // INVALID_BUFFER_SLOT to indicate that either there is no current buffer
701a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis    // or the buffer is not associated with a slot.
711a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis    int mCurrentBufferSlot;
723e87601170141229d661df93e2f59e1ced73474bMathias Agopian
731a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis    // mCurrentBuffer is the current buffer or NULL to indicate that there is
741a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis    // no current buffer.
751a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis    sp<GraphicBuffer> mCurrentBuffer;
76b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden
77b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden    // Hardware composer, owned by SurfaceFlinger.
78b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden    HWComposer& mHwc;
793e87601170141229d661df93e2f59e1ced73474bMathias Agopian};
803e87601170141229d661df93e2f59e1ced73474bMathias Agopian
813e87601170141229d661df93e2f59e1ced73474bMathias Agopian// ---------------------------------------------------------------------------
823e87601170141229d661df93e2f59e1ced73474bMathias Agopian}; // namespace android
833e87601170141229d661df93e2f59e1ced73474bMathias Agopian// ---------------------------------------------------------------------------
843e87601170141229d661df93e2f59e1ced73474bMathias Agopian
853e87601170141229d661df93e2f59e1ced73474bMathias Agopian#endif // ANDROID_SF_FRAMEBUFFER_SURFACE_H
863e87601170141229d661df93e2f59e1ced73474bMathias Agopian
87