EglWindow.h revision 441e847feb0e055ecb004802802cea07782ab228
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 47441e847feb0e055ecb004802802cea07782ab228Andy McFadden // Return width and height values (obtained from IGBP). 48441e847feb0e055ecb004802802cea07782ab228Andy McFadden int getWidth() const { return mWidth; } 49441e847feb0e055ecb004802802cea07782ab228Andy McFadden int getHeight() const { return mHeight; } 50441e847feb0e055ecb004802802cea07782ab228Andy McFadden 51441e847feb0e055ecb004802802cea07782ab228Andy McFadden // Release anything we created. 52441e847feb0e055ecb004802802cea07782ab228Andy McFadden void release() { eglRelease(); } 53441e847feb0e055ecb004802802cea07782ab228Andy McFadden 54441e847feb0e055ecb004802802cea07782ab228Andy McFadden // Make this context current. 55441e847feb0e055ecb004802802cea07782ab228Andy McFadden status_t makeCurrent() const; 56441e847feb0e055ecb004802802cea07782ab228Andy McFadden 57441e847feb0e055ecb004802802cea07782ab228Andy McFadden // Sets the presentation time on the current EGL buffer. 58441e847feb0e055ecb004802802cea07782ab228Andy McFadden void presentationTime(nsecs_t whenNsec) const; 59441e847feb0e055ecb004802802cea07782ab228Andy McFadden 60441e847feb0e055ecb004802802cea07782ab228Andy McFadden // Swaps the EGL buffer. 61441e847feb0e055ecb004802802cea07782ab228Andy McFadden void swapBuffers() const; 62441e847feb0e055ecb004802802cea07782ab228Andy McFadden 63441e847feb0e055ecb004802802cea07782ab228Andy McFaddenprivate: 64441e847feb0e055ecb004802802cea07782ab228Andy McFadden EglWindow(const EglWindow&); 65441e847feb0e055ecb004802802cea07782ab228Andy McFadden EglWindow& operator=(const EglWindow&); 66441e847feb0e055ecb004802802cea07782ab228Andy McFadden 67441e847feb0e055ecb004802802cea07782ab228Andy McFadden // Init display, create config and context. 68441e847feb0e055ecb004802802cea07782ab228Andy McFadden status_t eglSetupContext(); 69441e847feb0e055ecb004802802cea07782ab228Andy McFadden void eglRelease(); 70441e847feb0e055ecb004802802cea07782ab228Andy McFadden 71441e847feb0e055ecb004802802cea07782ab228Andy McFadden // Basic EGL goodies. 72441e847feb0e055ecb004802802cea07782ab228Andy McFadden EGLDisplay mEglDisplay; 73441e847feb0e055ecb004802802cea07782ab228Andy McFadden EGLContext mEglContext; 74441e847feb0e055ecb004802802cea07782ab228Andy McFadden EGLSurface mEglSurface; 75441e847feb0e055ecb004802802cea07782ab228Andy McFadden EGLConfig mEglConfig; 76441e847feb0e055ecb004802802cea07782ab228Andy McFadden 77441e847feb0e055ecb004802802cea07782ab228Andy McFadden // Surface dimensions. 78441e847feb0e055ecb004802802cea07782ab228Andy McFadden int mWidth; 79441e847feb0e055ecb004802802cea07782ab228Andy McFadden int mHeight; 80441e847feb0e055ecb004802802cea07782ab228Andy McFadden}; 81441e847feb0e055ecb004802802cea07782ab228Andy McFadden 82441e847feb0e055ecb004802802cea07782ab228Andy McFadden}; // namespace android 83441e847feb0e055ecb004802802cea07782ab228Andy McFadden 84441e847feb0e055ecb004802802cea07782ab228Andy McFadden#endif /*SCREENRECORD_EGL_WINDOW_H*/ 85