标签: android-camera

如何使用android ndk访问相机

android-NDK是否支持直接摄像头访问?我的NDK文件夹中没有Camera.h.

c++ android android-ndk android-camera

10
推荐指数
1
解决办法
2万
查看次数

锁定在一个方向时获取电话方向

这可能很容易与另一个问题重复,我只是在努力弄清楚要搜索什么.

我的相机应用程序被锁定在横向模式(在清单中),如下所示:

android:screenOrientation="landscape"
Run Code Online (Sandbox Code Playgroud)

不过,我想还是有的旋转UI元素,当设备旋转为纵向(尽管机器人仍然会想起它的目的在景观,但多数民众赞成).

所以我试过这个来检查方向

int rotation = this.getWindowManager().getDefaultDisplay()
            .getRotation();
    int degrees = 0;
    switch (rotation) {
        case Surface.ROTATION_0:
            Log.d("Rotation", "0");
            break;
        case Surface.ROTATION_90:
            Log.d("Rotation", "90");
            break;
        case Surface.ROTATION_180:
            Log.d("Rotation", "180");
            break;
        case Surface.ROTATION_270:
            Log.d("Rotation", "270");
            break;
    }
Run Code Online (Sandbox Code Playgroud)

不幸的是,无论我如何转动手机,它总会返回90.是否有更强大的方式来获得方向,无论Android"认为"的方向是什么?

android android-camera

10
推荐指数
2
解决办法
4457
查看次数

将EffectFactory效果应用于CameraPreview

我正在尝试制作一个Android应用程序,让用户用lomo效果拍照.问题是,我想让相机自动预览图像效果,不拍照然后应用效果.

我学会了如何在这个链接上使用CameraPreview .我在这里也发现了EfectFactory类,它具有我想要的效果.问题是,我不知道如何在CameraPreview上应用efectfactory类.

我用谷歌搜索了这个,但没有找到我想要的答案.

对于代码,我使用与我的第一个链接提供的相同.

任何人都可以帮我解决这个问题吗?

提前致谢

android android-camera lomo-effect

10
推荐指数
1
解决办法
781
查看次数

Android ExifInterface saveAttributes()而不覆盖以前的数据?

我正在尝试将lat-long和其他数据写入我的自定义相机应用程序中的jpeg的Exif标头.通常,android会自动使用光圈,ISO,快门速度等数据填充标题.但是,当我手动添加创建ExifInterface实例时,请设置GPS位置SetAttributes(),然后调用SaveAttributes(); 所有其他相机数据消失.

这应该发生吗?如何在不覆盖其他所有内容的情况下添加标签?

我在其他地方看到了创建两个ExifInterfaces的示例,一个旧的(从图片中)和一个新的,并将每个填充的值从旧的复制到新的以及任何其他数据.然而,这是令人烦恼和冗长的.我想找到一个更好的解决方案.

这是我的代码:

try{ 
    ExifInterface exif = new ExifInterface(pictureFile.getAbsolutePath());
    exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE, mGpsLocation.getLatDms());
    exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, mGpsLocation.getLonDms());
    exif.setAttribute(ExifInterface.TAG_GPS_ALTITUDE, mGpsLocation.getAltDms());
    exif.saveAttributes(); 
} catch(IOException e){
    e.printStackTrace(); 
}
Run Code Online (Sandbox Code Playgroud)

谢谢

android jpeg exif android-camera

10
推荐指数
1
解决办法
1854
查看次数

使用新的Android camera2 api从YUV_420_888进行JPEG编码时的绿色图像

我正在尝试使用新的相机api.突发捕获速度太慢,因此我在ImageReader中使用YUV_420_888格式并稍后进行JPEG enconding,如以下帖子中所示:

Android camera2捕获突发太慢了

问题是当我尝试使用RenderScript从YUV_420_888编码JPEG时,我得到绿色图像,如下所示:

RenderScript rs = RenderScript.create(mContext);
ScriptIntrinsicYuvToRGB yuvToRgbIntrinsic = ScriptIntrinsicYuvToRGB.create(rs, Element.RGBA_8888(rs));
Type.Builder yuvType = new Type.Builder(rs, Element.YUV(rs)).setX(width).setY(height).setYuvFormat(ImageFormat.YUV_420_888);
Allocation in = Allocation.createTyped(rs, yuvType.create(), Allocation.USAGE_SCRIPT);

Type.Builder rgbaType = new Type.Builder(rs, Element.RGBA_8888(rs)).setX(width).setY(height);
Allocation out = Allocation.createTyped(rs, rgbaType.create(), Allocation.USAGE_SCRIPT);

in.copyFrom(data);

yuvToRgbIntrinsic.setInput(in);
yuvToRgbIntrinsic.forEach(out);

Bitmap bmpout = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
out.copyTo(bmpout);

ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmpout.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] jpegBytes = baos.toByteArray();
Run Code Online (Sandbox Code Playgroud)

数据变量(YUV_420_888数据)来自:

ByteBuffer buffer = mImage.getPlanes()[0].getBuffer();
byte[] data = new byte[buffer.remaining()];
buffer.get(data);
Run Code Online (Sandbox Code Playgroud)

我在JPEG编码中做错了什么才能使图像只显示为绿色?

提前致谢

编辑:这是我获得的绿色图像的示例:

https://drive.google.com/file/d/0B1yCC7QDeEjdaXF2dVp6NWV6eWs/view?usp=sharing

rgb android yuv android-camera android-5.0-lollipop

10
推荐指数
1
解决办法
5707
查看次数

使用Samsung S5的Camera2 API AutoFocus

我在Samsung S5上使用新的Camera2 API.此设备报告支持的硬件级别LEGACY,这很好.

但是,我似乎无法自动对焦于此设备.触发自动对焦的请求如下所示:

previewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_AUTO);
previewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CaptureRequest.CONTROL_AF_TRIGGER_START);
state = STATE_PREVIEW;
try {
  captureSession.setRepeatingRequest(previewRequestBuilder.build(), captureCallback, backgroundHandler);
} catch (CameraAccessException e) {
  e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

发送请求后,请求的结果始终是CONTROL_AF_STATE_ACTIVE_SCAN偶尔的CONTROL_AF_STATE_NOT_FOCUSED_LOCKED.

奇怪的是,当状态为时CONTROL_AF_STATE_NOT_FOCUSED_LOCKED,自动对焦会返回CONTROL_AF_STATE_ACTIVE_SCAN状态一段时间然后再返回状态CONTROL_AF_STATE_NOT_FOCUSED_LOCKED,从而产生无限焦点循环.根据文件,当状态是CONTROL_AF_STATE_NOT_FOCUSED_LOCKED......

镜头将保持静止,直到AF模式(android.control.afMode)更改或新的AF触发器发送到相机设备(android.control.afTrigger).

我想知道这种差异是否是因为硬件级别的问题LEGACY,我应该回到使用已弃用的Camera API,但这对于像自动对焦这样的流行功能来说似乎很疯狂.

是否有任何建议如何处理报告的设备LEGACY

android android-camera

10
推荐指数
2
解决办法
1万
查看次数

Android使用CamcorderProfile捕获慢动作视频

我想在我的Nexus 5x上捕捉慢动作视频.这就是我配置媒体记录器的方式:

CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH_SPEED_HIGH);

mMediaRecorder = new MediaRecorder();

// Step 1: Unlock and set camera to MediaRecorder
mCamera.unlock();
mMediaRecorder.setCamera(mCamera);

// Step 2: Set sources
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

// Step 3: Set the high speed CamcorderProfile
mMediaRecorder.setProfile(profile);

// Step 4: Set output file
// Step 5: Prepare media recorder
// Step 6: Capture video
Run Code Online (Sandbox Code Playgroud)

问题是,捕获的视频不是我的设备支持的120 fps慢动作视频.它们是常规的29 fps视频.

我通过了这个答案,在官方文档中讨论了以下内容:

对于下面定义的所有高速配置文件((从QUALITY_HIGH_SPEED_LOW到QUALITY_HIGH_SPEED_2160P),它们与正常录制配置文件类似,只有更高的输出帧速率和比特率.因此,使用setProfile(CamcorderProfile)设置这些配置文件而不指定任何其他编码参数将生成高速视频,而不是具有不同捕获和输出(回放)帧速率的慢动作视频. 要记录慢动作视频,应用程序必须通过setVideoFrameRate(int)和setVideoEncodingBitRate适当地设置视频输出(回放)帧速率和比特率. (int)基于慢动作因子.如果应用程序打算使用MediaCodec编码器进行视频录制,则必须根据此CamcorderProfile类似地设置MediaFormat的每个单独字段.

我没有得到的是,setProfile已经使用从所选CamcorderProfile派生的参数调用了两个方法setVideoFrameRate和setVideoEncodingBitRate.为什么我需要再打电话给他们?我在这里错过了什么?

任何帮助将不胜感激.对于我的生活,我不能让这个工作!

编辑:我试过调用这样的方法,但它仍然捕获正常速度的视频:

mMediaRecorder.setVideoFrameRate(profile.videoFrameRate/4); 
mMediaRecorder.setVideoEncodingBitRate(profile.videoBitRate/4);
Run Code Online (Sandbox Code Playgroud)

1/4因为由CamcorderProfile.QUALITY_HIGH_SPEED_HIGH通告的帧速率是120,我想拍摄30 fps视频的文件中所述这里 …

android android-camera android-mediarecorder slowmotion

10
推荐指数
1
解决办法
1108
查看次数

错误:无法获取lockedBuffer,很可能客户端尝试锁定多个maxImages缓冲区

我正在使用camera2 api捕获图像并在thumnail中显示.所有设备都正常工作但是在使用Micromax Q382设备时,在thumnail中预览其显示的黑色图像.我在下面的问题

Unable to acquire a lockedBuffer, very likely client tries to lock more than maxImages buffers
Run Code Online (Sandbox Code Playgroud)

我使用下面的代码捕获listerner回调

final CameraCaptureSession.CaptureCallback captureListener = new CameraCaptureSession.CaptureCallback()
        {

            @Override
            public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request,
                                           TotalCaptureResult result)
            {

                super.onCaptureCompleted(session, request, result);

                startPreview();
            }

        };

        mCameraDevice.createCaptureSession(outputSurfaces, new CameraCaptureSession.StateCallback()
        {

            @Override
            public void onConfigured(CameraCaptureSession session)
            {

                try {
                    session.capture(captureBuilder.build(), captureListener, backgroudHandler);
                } catch (CameraAccessException e) {
                    AppLogger.exception(myContext, getClass().getSimpleName(), e);
                    // e.printStackTrace();
                }
            }

            @Override
            public void onConfigureFailed(CameraCaptureSession session)
            {

            }
        }, backgroudHandler); …
Run Code Online (Sandbox Code Playgroud)

camera android image-processing android-camera

10
推荐指数
2
解决办法
6010
查看次数

获取错误:访问被拒绝在某些设备上找到属性“vendor.camera.aux.packagelist”

我正在我的项目中研究人脸检测功能。我的代码在包括我的设备(Honor Play,Android 9.0)在内的许多设备上都可以完美运行,但在某些设备上不起作用,例如。小米红米 Note 5 pro 具有相同版本 (android 9.0) 但我收到错误,如下面的日志所示。

我在 manifest.xml 中添加了以下权限

    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.INTERNET" />

    <uses-feature
        android:name="android.hardware.camera"
        android:required="false" />
Run Code Online (Sandbox Code Playgroud)

我在日志中收到以下错误

E/libc: Access denied finding property "vendor.camera.aux.packagelist"
W/CamCtrl.V17: type=1400 audit(0.0:363016): avc: denied { read } for name="u:object_r:vendor_default_prop:s0" dev="tmpfs" ino=13687 scontext=u:r:untrusted_app:s0:c101,c260,c512,c768 tcontext=u:object_r:vendor_default_prop:s0 tclass=file permissive=0
Run Code Online (Sandbox Code Playgroud)

如果需要或不允许,我已经在请求相机和存储权限。请让我知道此问题的任何解决方案。

android android-camera

10
推荐指数
1
解决办法
5473
查看次数

Camera2 将图像从 ImageReader 传递到 MediaRecorder

我正在尝试创建一个CameraCaptureSession具有四个输出的 Camera2:

  1. 屏幕预览(SurfaceView,最高 1080p)
  2. 照片拍摄(ImageReader,最多 8k 照片)
  3. 视频捕捉(MediaRecorder/ MediaCodec,最多 4k 视频)
  4. 帧处理(ImageReader最多 4k 视频帧)

不幸的是,Camera2 不支持同时连接所有这四个输出(表面),因此我必须做出妥协。

对我来说最合乎逻辑的妥协是将两个视频捕获管道合并为一个,以便帧处理输出(#4,ImageReader)将帧重定向到视频捕获输出(#3,MediaRecorder)。

如何从 ImageReader 写入图像:

val imageReader = ImageReader.newInstance(4000, 2256, ImageFormat.YUV_420_888, 3)
imageReader.setOnImageAvailableListener({ reader ->
  val image = reader.acquireNextImage() ?: return@setOnImageAvailableListener
  callback.onVideoFrameCaptured(image)
}, queue.handler)

val captureSession = device.createCaptureSession(.., imageReader.surface)
Run Code Online (Sandbox Code Playgroud)

..进入SurfaceMediaRecorder

val surface = MediaCodec.createPersistentInputSurface()
val recorder = MediaRecorder(context)
..
recorder.setInputSurface(surface)
Run Code Online (Sandbox Code Playgroud)

我想我可能需要一个带有直通着色器的 OpenGL 管道 - 但我不知道如何从ImageReader …

android opengl-es surfaceview android-camera android-camera2

10
推荐指数
1
解决办法
514
查看次数