EglWindow.h revision 587c6fefcd3c1d05c608ff511cf3534bc765256e
1441e847feb0e055ecb004802802cea07782ab228Andy McFadden/* 2441e847feb0e055ecb004802802cea07782ab228Andy McFadden * Copyright 2013 The Android Open Source Project 3441e847feb0e055ecb004802802cea07782ab228Andy McFadden * 4441e847feb0e055ecb004802802cea07782ab228Andy McFadden * Licensed under the Apache License, Version 2.0 (the "License"); 5441e847feb0e055ecb004802802cea07782ab228Andy McFadden * you may not use this file except in compliance with the License. 6441e847feb0e055ecb004802802cea07782ab228Andy McFadden * You may obtain a copy of the License at 7441e847feb0e055ecb004802802cea07782ab228Andy McFadden * 8441e847feb0e055ecb004802802cea07782ab228Andy McFadden * http://www.apache.org/licenses/LICENSE-2.0 9441e847feb0e055ecb004802802cea07782ab228Andy McFadden * 10441e847feb0e055ecb004802802cea07782ab228Andy McFadden * Unless required by applicable law or agreed to in writing, software 11441e847feb0e055ecb004802802cea07782ab228Andy McFadden * distributed under the License is distributed on an "AS IS" BASIS, 12441e847feb0e055ecb004802802cea07782ab228Andy McFadden * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13441e847feb0e055ecb004802802cea07782ab228Andy McFadden * See the License for the specific language governing permissions and 14441e847feb0e055ecb004802802cea07782ab228Andy McFadden * limitations under the License. 15441e847feb0e055ecb004802802cea07782ab228Andy McFadden */ 16441e847feb0e055ecb004802802cea07782ab228Andy McFadden 17441e847feb0e055ecb004802802cea07782ab228Andy McFadden#ifndef SCREENRECORD_EGL_WINDOW_H 18441e847feb0e055ecb004802802cea07782ab228Andy McFadden#define SCREENRECORD_EGL_WINDOW_H 19441e847feb0e055ecb004802802cea07782ab228Andy McFadden 20441e847feb0e055ecb004802802cea07782ab228Andy McFadden#include <gui/BufferQueue.h> 21441e847feb0e055ecb004802802cea07782ab228Andy McFadden#include <utils/Errors.h> 22441e847feb0e055ecb004802802cea07782ab228Andy McFadden 23441e847feb0e055ecb004802802cea07782ab228Andy McFadden#include <EGL/egl.h> 24441e847feb0e055ecb004802802cea07782ab228Andy McFadden 25441e847feb0e055ecb004802802cea07782ab228Andy McFaddennamespace android { 26441e847feb0e055ecb004802802cea07782ab228Andy McFadden 27441e847feb0e055ecb004802802cea07782ab228Andy McFadden/* 28441e847feb0e055ecb004802802cea07782ab228Andy McFadden * Wraps EGL display, context, surface, config for a window surface. 29441e847feb0e055ecb004802802cea07782ab228Andy McFadden * 30441e847feb0e055ecb004802802cea07782ab228Andy McFadden * Not thread safe. 31441e847feb0e055ecb004802802cea07782ab228Andy McFadden */ 32441e847feb0e055ecb004802802cea07782ab228Andy McFaddenclass EglWindow { 33441e847feb0e055ecb004802802cea07782ab228Andy McFaddenpublic: 34441e847feb0e055ecb004802802cea07782ab228Andy McFadden EglWindow() : 35441e847feb0e055ecb004802802cea07782ab228Andy McFadden mEglDisplay(EGL_NO_DISPLAY), 36441e847feb0e055ecb004802802cea07782ab228Andy McFadden mEglContext(EGL_NO_CONTEXT), 37441e847feb0e055ecb004802802cea07782ab228Andy McFadden mEglSurface(EGL_NO_SURFACE), 38441e847feb0e055ecb004802802cea07782ab228Andy McFadden mEglConfig(NULL), 39441e847feb0e055ecb004802802cea07782ab228Andy McFadden mWidth(0), 40441e847feb0e055ecb004802802cea07782ab228Andy McFadden mHeight(0) 41441e847feb0e055ecb004802802cea07782ab228Andy McFadden {} 42441e847feb0e055ecb004802802cea07782ab228Andy McFadden ~EglWindow() { eglRelease(); } 43441e847feb0e055ecb004802802cea07782ab228Andy McFadden 44441e847feb0e055ecb004802802cea07782ab228Andy McFadden // Creates an EGL window for the supplied surface. 45441e847feb0e055ecb004802802cea07782ab228Andy McFadden status_t createWindow(const sp<IGraphicBufferProducer>& surface); 46441e847feb0e055ecb004802802cea07782ab228Andy McFadden 47587c6fefcd3c1d05c608ff511cf3534bc765256eAndy McFadden // Creates an EGL pbuffer surface. 48587c6fefcd3c1d05c608ff511cf3534bc765256eAndy McFadden status_t createPbuffer(int width, int height); 49587c6fefcd3c1d05c608ff511cf3534bc765256eAndy McFadden 50441e847feb0e055ecb004802802cea07782ab228Andy McFadden // Return width and height values (obtained from IGBP). 51441e847feb0e055ecb004802802cea07782ab228Andy McFadden int getWidth() const { return mWidth; } 52441e847feb0e055ecb004802802cea07782ab228Andy McFadden int getHeight() const { return mHeight; } 53441e847feb0e055ecb004802802cea07782ab228Andy McFadden 54441e847feb0e055ecb004802802cea07782ab228Andy McFadden // Release anything we created. 55441e847feb0e055ecb004802802cea07782ab228Andy McFadden void release() { eglRelease(); } 56441e847feb0e055ecb004802802cea07782ab228Andy McFadden 57441e847feb0e055ecb004802802cea07782ab228Andy McFadden // Make this context current. 58441e847feb0e055ecb004802802cea07782ab228Andy McFadden status_t makeCurrent() const; 59441e847feb0e055ecb004802802cea07782ab228Andy McFadden 60441e847feb0e055ecb004802802cea07782ab228Andy McFadden // Sets the presentation time on the current EGL buffer. 61441e847feb0e055ecb004802802cea07782ab228Andy McFadden void presentationTime(nsecs_t whenNsec) const; 62441e847feb0e055ecb004802802cea07782ab228Andy McFadden 63441e847feb0e055ecb004802802cea07782ab228Andy McFadden // Swaps the EGL buffer. 64441e847feb0e055ecb004802802cea07782ab228Andy McFadden void swapBuffers() const; 65441e847feb0e055ecb004802802cea07782ab228Andy McFadden 66441e847feb0e055ecb004802802cea07782ab228Andy McFaddenprivate: 67441e847feb0e055ecb004802802cea07782ab228Andy McFadden EglWindow(const EglWindow&); 68441e847feb0e055ecb004802802cea07782ab228Andy McFadden EglWindow& operator=(const EglWindow&); 69441e847feb0e055ecb004802802cea07782ab228Andy McFadden 70441e847feb0e055ecb004802802cea07782ab228Andy McFadden // Init display, create config and context. 71587c6fefcd3c1d05c608ff511cf3534bc765256eAndy McFadden status_t eglSetupContext(bool forPbuffer); 72441e847feb0e055ecb004802802cea07782ab228Andy McFadden void eglRelease(); 73441e847feb0e055ecb004802802cea07782ab228Andy McFadden 74441e847feb0e055ecb004802802cea07782ab228Andy McFadden // Basic EGL goodies. 75441e847feb0e055ecb004802802cea07782ab228Andy McFadden EGLDisplay mEglDisplay; 76441e847feb0e055ecb004802802cea07782ab228Andy McFadden EGLContext mEglContext; 77441e847feb0e055ecb004802802cea07782ab228Andy McFadden EGLSurface mEglSurface; 78441e847feb0e055ecb004802802cea07782ab228Andy McFadden EGLConfig mEglConfig; 79441e847feb0e055ecb004802802cea07782ab228Andy McFadden 80441e847feb0e055ecb004802802cea07782ab228Andy McFadden // Surface dimensions. 81441e847feb0e055ecb004802802cea07782ab228Andy McFadden int mWidth; 82441e847feb0e055ecb004802802cea07782ab228Andy McFadden int mHeight; 83441e847feb0e055ecb004802802cea07782ab228Andy McFadden}; 84441e847feb0e055ecb004802802cea07782ab228Andy McFadden 85441e847feb0e055ecb004802802cea07782ab228Andy McFadden}; // namespace android 86441e847feb0e055ecb004802802cea07782ab228Andy McFadden 87441e847feb0e055ecb004802802cea07782ab228Andy McFadden#endif /*SCREENRECORD_EGL_WINDOW_H*/ 88