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