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