【发布时间】:2018-10-08 22:17:33
【问题描述】:
我有一个 Camera2 NDK 代码来打开相机并获取图像。
代码通过 Android 应用程序/服务正常工作,但如果我将其编译并作为可执行文件运行,相机会打开但我没有得到任何帧。
有什么想法吗?有人成功了吗?
注意
- 我通过“AImageReader_new”创建了自己的 AImageReader
- 我通过“AImageReader_getWindow”创建自己的 ANativeWindow
注释2(添加)
调用有点不同
对于 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”状态正常,但我没有收到任何帧)
Pixel(使用 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'
更新2
我还使用 msm8996 EVB(使用 Android 7.1.1)对其进行了测试:
(1) 我遇到了像 Pixel2 这样的权限问题。
(2) 我用 su 运行它并修复了权限问题(相机打开)但我已经没有得到任何图像。
【问题讨论】:
-
不确定这是否有帮助:sisik.eu/blog/android/ndk/camera 但您所写的问题并没有提供足够的细节来说明发生了什么问题,因为您声明
code work fine via Android Application/Service, but if I compile and run it as executable在 Android 中没有多大意义语境。什么可执行文件? -
错误
cannot open camera "0" without camera permission听起来很清楚 - 好像您没有获得打开相机的权限。 -
@DmitriiZ。您完全正确地使用 Pixel2(使用 Android 9)外壳。但是其他设备呢? (我在其他设备上没有这样的日志......)
-
@DmitriiZ。也可能与Android 9有关?
标签: android android-ndk android-camera2