10795272aa226f4e965968a03daddc53ce30b7cdaMathias Agopian#include <binder/IPCThreadState.h>
20795272aa226f4e965968a03daddc53ce30b7cdaMathias Agopian#include <binder/ProcessState.h>
30795272aa226f4e965968a03daddc53ce30b7cdaMathias Agopian#include <binder/IServiceManager.h>
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/Log.h>
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <ui/Overlay.h>
7000479f9e325b4e426a67033abd92d47da412725Mathias Agopian
8000479f9e325b4e426a67033abd92d47da412725Mathias Agopian#include <surfaceflinger/Surface.h>
9000479f9e325b4e426a67033abd92d47da412725Mathias Agopian#include <surfaceflinger/ISurface.h>
10000479f9e325b4e426a67033abd92d47da412725Mathias Agopian#include <surfaceflinger/SurfaceComposerClient.h>
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectusing namespace android;
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android {
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass Test {
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic:
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static const sp<ISurface>& getISurface(const sp<Surface>& s) {
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return s->getISurface();
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint main(int argc, char** argv)
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // set up the thread-pool
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    sp<ProcessState> proc(ProcessState::self());
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ProcessState::self()->startThreadPool();
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // create a client to surfaceflinger
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    sp<SurfaceComposerClient> client = new SurfaceComposerClient();
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // create pushbuffer surface
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    sp<Surface> surface = client->createSurface(getpid(), 0, 320, 240,
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            PIXEL_FORMAT_UNKNOWN, ISurfaceComposer::ePushBuffers);
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // get to the isurface
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    sp<ISurface> isurface = Test::getISurface(surface);
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    printf("isurface = %p\n", isurface.get());
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // now request an overlay
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    sp<OverlayRef> ref = isurface->createOverlay(320, 240, PIXEL_FORMAT_RGB_565);
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    sp<Overlay> overlay = new Overlay(ref);
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * here we can use the overlay API
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    overlay_buffer_t buffer;
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    overlay->dequeueBuffer(&buffer);
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    printf("buffer = %p\n", buffer);
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void* address = overlay->getBufferAddress(buffer);
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    printf("address = %p\n", address);
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    overlay->queueBuffer(buffer);
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return 0;
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
60