Я пытаюсь получить данные о пикселях окна sdl2 QEMU (android-x86) с помощью SDL_RenderReadPixel () в функции gl_referesh (расположенной в qemu-source_root / ui / sdl2-gl.c).
Хорошо работает при настройке Android по умолчанию.
Но это не работает (возвращает черный экран), когда некоторые приложения работают (веб-браузер, приложение галереи по умолчанию) после изменения плотности Android ..
Конечно, это хорошо работает после того, как я перехожу на исходную плотность ...
На самом деле моя цель - захват данных с экрана гостевого android-x86.
Но в случае с Virt-GPU
hw composer гостевого андроида не работает (Logcat говорит мне, что hw composer не работает / я не знаю почему) ...
Таким образом, не только чтение / dev / graphics / fb0, но и screencap cmd не работает в случае virt-gpu android-x86.
Во всяком случае, я думал, что захват данных экрана из QEMU легче, чем со стороны гостевого Android.
Итак, я попытался написать приведенный ниже код в функции, связанной с SDL, потому что я не знаю, где конечные данные экрана находятся в исходном коде QEMU ... и я использую дисплей SDL2 для запуска Android-x86
QEMURoot/ui/sdl2-gl.c line 112
void sdl2_gl_refresh(DisplayChangeListener *dcl)
{
struct sdl2_console *scon = container_of(dcl, struct sdl2_console, dcl);
//Start of my code
SDL_Renderer *renderer;
Uint32 epixelformat;
renderer = SDL_GetRenderer(scon->real_window);
epixelformat = SDL_PIXELFORMAT_BGR24;
SDL_RenderReadPixels(renderer, NULL, epixelformat, shmemAddr, scon->w * 3); //shmemAddr is shared memory for video encoder
//End of my code
assert(scon->opengl);
graphic_hw_update(dcl->con);
if (scon->updates && scon->surface) {
scon->updates = 0;
sdl2_gl_render_surface(scon);
}
sdl2_poll_events(scon);
}
Я хочу получить данные экрана, даже если плотность гостевого андроида изменилась ..
или
Если кто-то знает о том, где находятся окончательные данные экрана в QEMU, пожалуйста, дайте мне совет.
заранее спасибо.