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