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