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(); 47f10c46ef855b6410b20ebd8b1351d4d78d8eca8eDan Stoza virtual void dumpAsString(String8& result) const; 48a49126087b4494f4ef50873f3a3f6727265f6621Mathias Agopian 4947e45405d1533aa73307014f7bf371e118695cf3Michael Lentine // Cannot resize a buffers in a FramebufferSurface. Only works with virtual 5047e45405d1533aa73307014f7bf371e118695cf3Michael Lentine // displays. 5147e45405d1533aa73307014f7bf371e118695cf3Michael Lentine virtual void resizeBuffers(const uint32_t /*w*/, const uint32_t /*h*/) { }; 5247e45405d1533aa73307014f7bf371e118695cf3Michael Lentine 533e87601170141229d661df93e2f59e1ced73474bMathias Agopianprivate: 54b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden virtual ~FramebufferSurface() { }; // this class cannot be overloaded 551a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis 568dc55396fc9bc425b5e2c82e76a38080f2a655ffDan Stoza virtual void onFrameAvailable(const BufferItem& item); 571a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis virtual void freeBufferLocked(int slotIndex); 583e87601170141229d661df93e2f59e1ced73474bMathias Agopian 5974d211ae26a0257c6075a823812e40b55aa1e653Mathias Agopian virtual void dumpLocked(String8& result, const char* prefix) const; 607adb0f8a9fdb961692ffd2f0c65cacb155143f64Jesse Hall 61da27af9832a0170f1fc40ef3f21371c4d30d21b3Mathias Agopian // nextBuffer waits for and then latches the next buffer from the 62da27af9832a0170f1fc40ef3f21371c4d30d21b3Mathias Agopian // BufferQueue and releases the previously latched buffer to the 63da27af9832a0170f1fc40ef3f21371c4d30d21b3Mathias Agopian // BufferQueue. The new buffer is returned in the 'buffer' argument. 64da27af9832a0170f1fc40ef3f21371c4d30d21b3Mathias Agopian status_t nextBuffer(sp<GraphicBuffer>& outBuffer, sp<Fence>& outFence); 65da27af9832a0170f1fc40ef3f21371c4d30d21b3Mathias Agopian 66f5a33928349bebc8eebc9f466618997e98c24e68Mathias Agopian // mDisplayType must match one of the HWC display types 67f5a33928349bebc8eebc9f466618997e98c24e68Mathias Agopian int mDisplayType; 68f5a33928349bebc8eebc9f466618997e98c24e68Mathias Agopian 691a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis // mCurrentBufferIndex is the slot index of the current buffer or 701a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis // INVALID_BUFFER_SLOT to indicate that either there is no current buffer 711a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis // or the buffer is not associated with a slot. 721a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis int mCurrentBufferSlot; 733e87601170141229d661df93e2f59e1ced73474bMathias Agopian 741a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis // mCurrentBuffer is the current buffer or NULL to indicate that there is 751a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis // no current buffer. 761a4d883dcc1725892bfb5c28dec255a233186524Jamie Gennis sp<GraphicBuffer> mCurrentBuffer; 77b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden 78b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden // Hardware composer, owned by SurfaceFlinger. 79b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden HWComposer& mHwc; 803e87601170141229d661df93e2f59e1ced73474bMathias Agopian}; 813e87601170141229d661df93e2f59e1ced73474bMathias Agopian 823e87601170141229d661df93e2f59e1ced73474bMathias Agopian// --------------------------------------------------------------------------- 833e87601170141229d661df93e2f59e1ced73474bMathias Agopian}; // namespace android 843e87601170141229d661df93e2f59e1ced73474bMathias Agopian// --------------------------------------------------------------------------- 853e87601170141229d661df93e2f59e1ced73474bMathias Agopian 863e87601170141229d661df93e2f59e1ced73474bMathias Agopian#endif // ANDROID_SF_FRAMEBUFFER_SURFACE_H 873e87601170141229d661df93e2f59e1ced73474bMathias Agopian 88