You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					103 lines
				
				3.3 KiB
			
		
		
			
		
	
	
					103 lines
				
				3.3 KiB
			| 
								 
											6 years ago
										 
									 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * Copyright (C) 2007 The Android Open Source Project
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Licensed under the Apache License, Version 2.0 (the "License");
							 | 
						||
| 
								 | 
							
								 * you may not use this file except in compliance with the License.
							 | 
						||
| 
								 | 
							
								 * You may obtain a copy of the License at
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *      http://www.apache.org/licenses/LICENSE-2.0
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Unless required by applicable law or agreed to in writing, software
							 | 
						||
| 
								 | 
							
								 * distributed under the License is distributed on an "AS IS" BASIS,
							 | 
						||
| 
								 | 
							
								 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
							 | 
						||
| 
								 | 
							
								 * See the License for the specific language governing permissions and
							 | 
						||
| 
								 | 
							
								 * limitations under the License.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef INCLUDED_FROM_FRAMEBUFFER_NATIVE_WINDOW_CPP
							 | 
						||
| 
								 | 
							
								#warning "FramebufferNativeWindow is deprecated"
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef ANDROID_FRAMEBUFFER_NATIVE_WINDOW_H
							 | 
						||
| 
								 | 
							
								#define ANDROID_FRAMEBUFFER_NATIVE_WINDOW_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <stdint.h>
							 | 
						||
| 
								 | 
							
								#include <sys/types.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <EGL/egl.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <utils/threads.h>
							 | 
						||
| 
								 | 
							
								#include <utils/String8.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <ui/ANativeObjectBase.h>
							 | 
						||
| 
								 | 
							
								#include <ui/Rect.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define MIN_NUM_FRAME_BUFFERS  2
							 | 
						||
| 
								 | 
							
								#define MAX_NUM_FRAME_BUFFERS  3
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								extern "C" EGLNativeWindowType android_createDisplaySurface(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// ---------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								namespace android {
							 | 
						||
| 
								 | 
							
								// ---------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Surface;
							 | 
						||
| 
								 | 
							
								class NativeBuffer;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// ---------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class FramebufferNativeWindow 
							 | 
						||
| 
								 | 
							
								    : public ANativeObjectBase<
							 | 
						||
| 
								 | 
							
								        ANativeWindow, 
							 | 
						||
| 
								 | 
							
								        FramebufferNativeWindow, 
							 | 
						||
| 
								 | 
							
								        LightRefBase<FramebufferNativeWindow> >
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								    FramebufferNativeWindow(); 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    framebuffer_device_t const * getDevice() const { return fbDev; } 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    bool isUpdateOnDemand() const { return mUpdateOnDemand; }
							 | 
						||
| 
								 | 
							
								    status_t setUpdateRectangle(const Rect& updateRect);
							 | 
						||
| 
								 | 
							
								    status_t compositionComplete();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    void dump(String8& result);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // for debugging only
							 | 
						||
| 
								 | 
							
								    int getCurrentBufferIndex() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								    friend class LightRefBase<FramebufferNativeWindow>;    
							 | 
						||
| 
								 | 
							
								    ~FramebufferNativeWindow(); // this class cannot be overloaded
							 | 
						||
| 
								 | 
							
								    static int setSwapInterval(ANativeWindow* window, int interval);
							 | 
						||
| 
								 | 
							
								    static int dequeueBuffer(ANativeWindow* window, ANativeWindowBuffer** buffer, int* fenceFd);
							 | 
						||
| 
								 | 
							
								    static int queueBuffer(ANativeWindow* window, ANativeWindowBuffer* buffer, int fenceFd);
							 | 
						||
| 
								 | 
							
								    static int query(const ANativeWindow* window, int what, int* value);
							 | 
						||
| 
								 | 
							
								    static int perform(ANativeWindow* window, int operation, ...);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    static int dequeueBuffer_DEPRECATED(ANativeWindow* window, ANativeWindowBuffer** buffer);
							 | 
						||
| 
								 | 
							
								    static int queueBuffer_DEPRECATED(ANativeWindow* window, ANativeWindowBuffer* buffer);
							 | 
						||
| 
								 | 
							
								    static int lockBuffer_DEPRECATED(ANativeWindow* window, ANativeWindowBuffer* buffer);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    framebuffer_device_t* fbDev;
							 | 
						||
| 
								 | 
							
								    alloc_device_t* grDev;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    sp<NativeBuffer> buffers[MAX_NUM_FRAME_BUFFERS];
							 | 
						||
| 
								 | 
							
								    sp<NativeBuffer> front;
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    mutable Mutex mutex;
							 | 
						||
| 
								 | 
							
								    Condition mCondition;
							 | 
						||
| 
								 | 
							
								    int32_t mNumBuffers;
							 | 
						||
| 
								 | 
							
								    int32_t mNumFreeBuffers;
							 | 
						||
| 
								 | 
							
								    int32_t mBufferHead;
							 | 
						||
| 
								 | 
							
								    int32_t mCurrentBufferIndex;
							 | 
						||
| 
								 | 
							
								    bool mUpdateOnDemand;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								// ---------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								}; // namespace android
							 | 
						||
| 
								 | 
							
								// ---------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif // ANDROID_FRAMEBUFFER_NATIVE_WINDOW_H
							 | 
						||
| 
								 | 
							
								
							 |