я разработал собственный процесс, который использует ScreenshotClient
для захвата экрана устройства (укорененные устройства только) У меня есть цикл, где ScreenshotClient
делает update()
каждый цикл. Все работает хорошо до 4.3. , когда я запускаю его на 4.3 Первый вызов обновления завершается успешно, но во втором называют результат вызова -2, и я получаю эти ошибки в LogCat:ScreenshotClient ошибки после обновления до 4.3
E/BufferQueue(8166): [ScreenshotClient] connect: already connected (cur=1,req=1)
E/libEGL (2463): EGLNativeWindowType 0x4116d5f8 already connected to another API
E/libEGL (2463): eglCreateWindowSurface:376 error 300b (EGL_BAD_NATIVE_WINDOW)
E/SurfaceFlinger(2463): captureScreenImplLocked: eglCreateWindowSurface() failed 0x300b
Любая идея, что изменилось в 4.3, что причины этого , или что означают эти ошибки.
Мой код выглядит примерно так:
int main(int argc, char** argv) {
ProcessState::self()->startThreadPool();
sp <IBinder> display = SurfaceComposerClient::getBuiltInDisplay(
DEFAULT_DISPLAY_ID);
ScreenshotClient client;
while (true) {
client.update(display);
pixels = screenshot.getPixels();
// do something with the data
}
}
В сообщениях об ошибках указано, что собственное окно уже связано с другим контекстом. Я понятия не имею, почему она перестала работать на 4.3. Возможно, вам стоит проверить, как вы уничтожаете свой контекст или даете лучшее понимание здесь. – eozgonul
Я добавил несколько примеров кода, может быть, это поможет объяснить мою ситуацию – jacob
Вы проверили исходный код скриншота или screencap в framework/base/cmd? – Robin