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
427143316af216fa92c31a60d4407b707637382da1Dan Stoza    virtual status_t beginFrame(bool mustRecompose);
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
5247e45405d1533aa73307014f7bf371e118695cf3Michael Lentine    // Cannot resize a buffers in a FramebufferSurface. Only works with virtual
5347e45405d1533aa73307014f7bf371e118695cf3Michael Lentine    // displays.
5447e45405d1533aa73307014f7bf371e118695cf3Michael Lentine    virtual void resizeBuffers(const uint32_t /*w*/, const uint32_t /*h*/) { };
5547e45405d1533aa73307014f7bf371e118695cf3Michael Lentine
563e87601170141229d661df93e2f59e1ced73474bMathias Agopianprivate:
57b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden    virtual ~FramebufferSurface() { }; // this class cannot be overloaded
581a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis
598dc55396fc9bc425b5e2c82e76a38080f2a655ffDan Stoza    virtual void onFrameAvailable(const BufferItem& item);
601a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis    virtual void freeBufferLocked(int slotIndex);
613e87601170141229d661df93e2f59e1ced73474bMathias Agopian
6274d211ae26a0257c6075a823812e40b55aa1e653Mathias Agopian    virtual void dumpLocked(String8& result, const char* prefix) const;
637adb0f8a9fdb961692ffd2f0c65cacb155143f64Jesse Hall
64da27af9832a0170f1fc40ef3f21371c4d30d21b3Mathias Agopian    // nextBuffer waits for and then latches the next buffer from the
65da27af9832a0170f1fc40ef3f21371c4d30d21b3Mathias Agopian    // BufferQueue and releases the previously latched buffer to the
66da27af9832a0170f1fc40ef3f21371c4d30d21b3Mathias Agopian    // BufferQueue.  The new buffer is returned in the 'buffer' argument.
67da27af9832a0170f1fc40ef3f21371c4d30d21b3Mathias Agopian    status_t nextBuffer(sp<GraphicBuffer>& outBuffer, sp<Fence>& outFence);
68da27af9832a0170f1fc40ef3f21371c4d30d21b3Mathias Agopian
69f5a33928349bebc8eebc9f466618997e98c24e68Mathias Agopian    // mDisplayType must match one of the HWC display types
70f5a33928349bebc8eebc9f466618997e98c24e68Mathias Agopian    int mDisplayType;
71f5a33928349bebc8eebc9f466618997e98c24e68Mathias Agopian
721a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis    // mCurrentBufferIndex is the slot index of the current buffer or
731a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis    // INVALID_BUFFER_SLOT to indicate that either there is no current buffer
741a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis    // or the buffer is not associated with a slot.
751a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis    int mCurrentBufferSlot;
763e87601170141229d661df93e2f59e1ced73474bMathias Agopian
771a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis    // mCurrentBuffer is the current buffer or NULL to indicate that there is
781a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis    // no current buffer.
791a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis    sp<GraphicBuffer> mCurrentBuffer;
80b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden
81b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden    // Hardware composer, owned by SurfaceFlinger.
82b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden    HWComposer& mHwc;
833e87601170141229d661df93e2f59e1ced73474bMathias Agopian};
843e87601170141229d661df93e2f59e1ced73474bMathias Agopian
853e87601170141229d661df93e2f59e1ced73474bMathias Agopian// ---------------------------------------------------------------------------
863e87601170141229d661df93e2f59e1ced73474bMathias Agopian}; // namespace android
873e87601170141229d661df93e2f59e1ced73474bMathias Agopian// ---------------------------------------------------------------------------
883e87601170141229d661df93e2f59e1ced73474bMathias Agopian
893e87601170141229d661df93e2f59e1ced73474bMathias Agopian#endif // ANDROID_SF_FRAMEBUFFER_SURFACE_H
903e87601170141229d661df93e2f59e1ced73474bMathias Agopian
91