Исполняемый файл Android Camera2 не смог получить кадры - PullRequest
0 голосов
/ 09 октября 2018

У меня есть один код Camera2 NDK, чтобы открыть камеру и получить изображения.

Код работает нормально через Android Application / Service, но если я скомпилирую и запусту его как исполняемый файл, камера откроется, но я неполучить любые кадры.

Есть идеи?кому-то удалось это сделать?


ПРИМЕЧАНИЕ

  1. Я создаю свой собственный AImageReader через "AImageReader_new"
  2. Я создаю свой собственный ANativeWindow через "AImageReader_getWindow"

NOTE2 (ДОБАВЛЕНО)

Звонки немного отличаются

Для приложений / служб Android звонки, такие как:

public void onCreate() {
       JNIBridge.startPreview(null);
}
public void onDestroy() {
       JNIBridge.stopPreview();
}

Для исполняемого файла:

int main()
{
Java_com_y30_nativecamera2_JNIBridge_startPreview(nullptr, nullptr, nullptr);

for(int i = 0; i < 10; ++i)
{
    std::this_thread::sleep_for(std::chrono::milliseconds(1000));
}

Java_com_y30_nativecamera2_JNIBridge_stopPreview(nullptr, nullptr);

return 0;
}

ОБНОВЛЕНИЕ

Я снова протестировал его на нескольких устройствах Android.

S8 / S9 + (с Andorid 8.0.0) этоВоспроизвести. (Состояние «ACameraManager_openCamera» в порядке, но я не получаю никаких кадров)

Пиксель (с Android 9) метод «ACameraManager_openCamera» не выполнен.

10-09 10:45:04.933   933  1592 I CameraService: CameraService::connect call (PID -1 "", camera ID 0) for HAL version default and Camera API version 2
10-09 10:45:04.933   933  1592 W ServiceManager: Permission failure: android.permission.CAMERA from uid=2000 pid=19606
10-09 10:45:04.933   933  1592 E CameraService: Permission Denial: can't use the camera pid=19606, uid=2000
10-09 10:45:04.933 19606 19606 E ACameraManager: openCamera: connect camera device failed: Status(-8): '1: validateClientPermissionsLocked:906: Caller "" (PID 2000, UID 19606) cannot open camera "0" without camera permission'

UPDATE2

Я также протестировал его с msm8996 EVB (с Android 7.1.1):

(1) У меня проблема с разрешением, как у Pixel2.

(2) Я запустилс su и разрешением проблемы (камера открылась), но я уже не получаю никаких изображений.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Я не видел ваш код.Из вашего описания вы все сделали правильно.Если вы добавите следующее, это должно работать.

#include <binder/ProcessState.h>

...
main()
{
...
    android::ProcessState::self()->startThreadPool();
...
    Camera open, AImageReader_new, etc ...
...
    Close Camera
...
}

Также добавьте libbinder в Android.mk LOCAL_SHARED_LIBRARIES.

0 голосов
/ 09 октября 2018

В целом, NDK не поддерживает исполняемые файлы оболочки Android, поэтому его использование, вероятно, каким-то образом заблокировано политикой SELinux для ваших устройств.

...