Testovací program SurfaceFlinger

hlasů
2

Chci psát nativní aplikace v Android pro testování SurfaceFlinger. Existuje nějaký jednoduchý program, který ukazuje, jak vytvořit povrch, zaregistrovat nárazníky a post buffery SurfaceFlinger.

Položena 19/06/2010 v 18:29
zdroj uživatelem
V jiných jazycích...                            


5 odpovědí

hlasů
3

frameworks/base/libs/surfaceflinger/tests/resize/resize.cppJe to dobré místo pro start. Ale moje verze (Eclair od dodavatele) testované aplikace je zastaralý, někteří Surfacese API byla přesunuta do SurfaceControla vy budete muset:
SurfaceComposerClient::createSurface()=> SurfaceControl
SurfaceControl->getSurface()=>Surface

Za druhé používají SurfaceComposerClient::openTransaction()/closeTransaction() k vázány všechny transakce na SurfaceFlinger povrchu, například:
Surface::lock()/unlockAndPost()aSurfaceControl::setLayer()/setSize()

Here're ukázkové kódy (doufám, že to překládá: P)

sp<SurfaceComposerClient> client;
sp<SurfaceControl> control;
sp<Surface> surface;
SurfaceID sid = 0;
Surface::SurfaceInfo sinfo;
// set up the thread-pool, needed for Binder
sp<ProcessState> proc(ProcessState::self());
ProcessState::self()->startThreadPool();
client = new SurfaceComposerClient();
control = client->createSurface(getpid(), sid, 160, 240, PIXEL_FORMAT_RGB_565);
surface = control->getSurface();

// global transaction sometimes cannot trigger a redraw
//client->openGlobalTransaction();

printf("setLayer...\n");
client->openTransaction();
control->setLayer(100000);
client->closeTransaction();
printf("setLayer done\n");

printf("memset 0xF800...\n");
client->openTransaction();
surface->lock(&sinfo);
android_memset16((uint16_t*)sinfo.bits, 0xF800, sinfo.s*pfInfo.bytesPerPixel*sinfo.h);
surface->unlockAndPost();
client->closeTransaction();
printf("memset 0xF800 done\n");
sleep(2);

printf("setSize...\n");
client->openTransaction();
control->setSize(80, 120);
client->closeTransaction();
printf("setSize done\n");
sleep(2);

printf("memset 0x07E0...\n");
client->openTransaction();
surface->lock(&sinfo);
android_memset16((uint16_t*)sinfo.bits, 0x07E0, sinfo.s*pfInfo.bytesPerPixel*sinfo.h);
surface->unlockAndPost();
printf("memset 0x07E0 done\n");
client->closeTransaction();
sleep(2);

printf("setPosition...\n");
client->openTransaction();
control->setPosition(100, 100);
client->closeTransaction();
printf("setPosition done\n");
sleep(2);

// global transaction sometimes cannot trigger a redraw
//client->closeGlobalTransaction();

printf("bye\n");
Odpovězeno 23/05/2011 v 06:23
zdroj uživatelem

hlasů
2

Jsem také hledá nějakou podobnou aplikaci v Jelly Bean, ale nejsem schopen získat samostatná aplikace, které mohu vytvořit a spustit a je možné vidět nějaký výstup na obrazovku. Tam jsou některé aplikace, ale nejsou budovy v gumového medvídka jako několik API by dostal upravený na nižší úrovni. Uveďte prosím nějaké odkazy. Chci využít tuto aplikaci k pochopení povrchu vytlačovací kotouč a na spodním displeji systému Android.

Díky, Vibgyor

Odpovězeno 17/05/2013 v 07:59
zdroj uživatelem

hlasů
2

Perníku kód je in / rámců / base / services / SurfaceFlinger

Získat toto místo pro nějaké info o SurfaceFlinger http://kcchao.wikidot.com/surfaceflinger

Odpovězeno 06/05/2011 v 08:36
zdroj uživatelem

hlasů
1

Pokud hledáte na to, jak komunikovat přímo s SurfaceFlinger, nejlepší start je podívat se do SurfaceComposerClient kódu / rámců / base / libs / GUI.

Odpovězeno 08/05/2012 v 20:55
zdroj uživatelem

hlasů
1

Podívejte se ve zdrojovém kódu pro SurfaceFlinger (nástupiště máte zájem).

../frameworks/base/libs/surfaceflinger/tests/resize/resize.cpp

[Platforma / rámců / base.git] /opengl/tests/gralloc/gralloc.cpp

Je to v podstatě dělá to, co popisujete, si uvědomit, přesto, že se jedná o low level nativní API a neustále se vyvíjí v Androidu.

Odpovězeno 18/09/2010 v 14:58
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more