1db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan/* 2db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan * Copyright (c) 2008-2009 Intel Corporation. All Rights Reserved. 3db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan * 4db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan * Permission is hereby granted, free of charge, to any person obtaining a 5db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan * copy of this software and associated documentation files (the 6db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan * "Software"), to deal in the Software without restriction, including 7db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan * without limitation the rights to use, copy, modify, merge, publish, 8db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan * distribute, sub license, and/or sell copies of the Software, and to 9db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan * permit persons to whom the Software is furnished to do so, subject to 10db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan * the following conditions: 11db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan * 12db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan * The above copyright notice and this permission notice (including the 13db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan * next paragraph) shall be included in all copies or substantial portions 14db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan * of the Software. 15db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan * 16db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 17db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 19db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR 20db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan */ 24db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan#include <stdio.h> 25db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan#include <va/va.h> 26db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan#include <va/va_android.h> 27409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#include <gui/Surface.h> 28409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#include <gui/SurfaceComposerClient.h> 29409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#include <gui/ISurfaceComposer.h> 30db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan#include <assert.h> 31db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan#include <pthread.h> 32db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan 33db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuanusing namespace android; 34db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan 35409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuanstatic int android_display=0; 36409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan 37409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuanstatic sp<SurfaceComposerClient> client0 = NULL; 38409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuanstatic sp<SurfaceControl> surface_ctrl0 = NULL; 39409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuanstatic sp<ANativeWindow> anw0 = NULL; 40db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan 41409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuanstatic sp<SurfaceComposerClient> client1 = NULL; 42409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuanstatic sp<SurfaceControl> surface_ctrl1 = NULL; 43409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuanstatic sp<ANativeWindow> anw1 = NULL; 44db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan 4536bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sangstatic void *open_display(void); 4636bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sangstatic void close_display(void *win_display); 47e742a3c7d8b89b69f65326582ea549c13a75b350Austin Yuanstatic int create_window(void *win_display, int x, int y, int width, int height); 4836bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sangstatic int check_window_event(void *x11_display, void *win, int *width, int *height, int *quit); 49db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan 50409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define CAST_DRAWABLE(a) static_cast<ANativeWindow *>((void *)(*(unsigned int *)a)) 5136bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sang#include "putsurface_common.c" 5236bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sang 5336bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sangstatic void *open_display() 5436bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sang{ 5536bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sang return &android_display; 5636bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sang} 5736bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sang 5836bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sangstatic void close_display(void *win_display) 5936bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sang{ 6036bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sang return; 6136bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sang} 6236bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sang 63e742a3c7d8b89b69f65326582ea549c13a75b350Austin Yuanstatic int create_window(void *win_display, int x, int y, int width, int height) 64db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan{ 65409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan client0 = new SurfaceComposerClient(); 66409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan 67409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan surface_ctrl0 = client1->createSurface( 68409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan String8("Test Surface"), 69409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan width, height, 70409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan PIXEL_FORMAT_RGB_888, 0); 71db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan 72409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan SurfaceComposerClient::openGlobalTransaction(); 73409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan surface_ctrl0->setLayer(0x7FFFFFFF); 74409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan surface_ctrl0->show(); 75409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan SurfaceComposerClient::closeGlobalTransaction(); 76409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan 77409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan SurfaceComposerClient::openGlobalTransaction(); 78409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan surface_ctrl0->setPosition(x, y); 79409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan SurfaceComposerClient::closeGlobalTransaction(); 80409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan 81409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan SurfaceComposerClient::openGlobalTransaction(); 82409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan surface_ctrl0->setSize(width, height); 83409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan SurfaceComposerClient::closeGlobalTransaction(); 84409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan 85409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan anw0 = surface_ctrl0->getSurface(); 86db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan 87409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan drawable_thread0 = static_cast<void*>(&anw0); 88db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan if (multi_thread == 0) 89db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan return 0; 90db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan 91db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan printf("Create window1 for thread1\n"); 92409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan client1 = new SurfaceComposerClient(); 93409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan 94409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan surface_ctrl1 = client1->createSurface( 95409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan String8("Test Surface"), 96409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan width, height, 97409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan PIXEL_FORMAT_RGB_888, 0); 98409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan 99409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan SurfaceComposerClient::openGlobalTransaction(); 100409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan surface_ctrl1->setLayer(0x7FFFFFFF); 101409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan surface_ctrl1->show(); 102409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan SurfaceComposerClient::closeGlobalTransaction(); 103409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan 104409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan SurfaceComposerClient::openGlobalTransaction(); 105409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan surface_ctrl1->setPosition(x*2, y*2); 106409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan SurfaceComposerClient::closeGlobalTransaction(); 107409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan 108409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan SurfaceComposerClient::openGlobalTransaction(); 109409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan surface_ctrl1->setSize(width, height); 110409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan SurfaceComposerClient::closeGlobalTransaction(); 111409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan 112409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan anw1 = surface_ctrl1->getSurface(); 113409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan 114409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan drawable_thread1 = static_cast<void *>(&anw1); 11536bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sang 11636bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sang return 0; 11736bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sang} 118db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan 11936bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sangint check_window_event(void *win_display, void *drawble, int *width, int *height, int *quit) 12036bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sang{ 121db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan return 0; 122db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan} 123db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan 12436bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sang 125