Articles of camera

如何使用JNI在C中获取原始Android相机缓冲区?

我一直在搜索谷歌和StackOverflow,但无法find它。 也许我错过了一些明显的东西。 谢谢! (这是因为预览回调的Java实现[甚至使用缓冲区]效率太低。)

使用由Camera预览填充的SurfaceTexture作为在Jelly Bean中的Renderscriptinput分配

在Jelly Bean中,是否可以从由相机预览填充的SurfaceTexture中创buildRenderscript分配? 我正在从Android源代码树中构build我的应用程序,所以我可以使用@Hide API(如Allocation.setSurfaceTexture())。 不过,我想避免使用RS Graphics弃用的API。 这里的类似问题没有得到充分的回答,也不是JB特有的。 尝试下面的代码时遇到以下问题: 进入Renderscript的数据总是为零 为了让onFrameAvailablecallback被重复调用,我必须updateTexImage(),因为当我调用Allocation.ioReceive()时,它不会在第一次之后被callback,并且在logcat中有一个“无效的EGLDisplay”。 然而,我认为ioReceive()是要走的路 – 它在内部也updateTexImage()。 支持的分配types包括RGBA8888,而不是NV21(这是相机预览格式),RS代码如何能够以这种方式对数据进行格式化? (我知道我正在使用的设备确实支持请求的VGA分辨率)。 public class SampleRSCPCActivity extends Activity implements SurfaceTexture.OnFrameAvailableListener { final static int DO_KERNEL = 0; private static final String TAG="SAMPLERSCP"; private static Camera mCamera; private Camera.Parameters mParams; private int mFrameWidth, mFrameHeight; private static SurfaceTexture mST; private RenderScript mRS; private Allocation mInAllocation; […]

Nexus 10,前置摄像头预览为黑色(无预览)

所以我正在做一个Camera相关的项目,我已经在很多设备上testing过了,除了Nexus 10之外,他们都通过了testing。 我无法弄清楚发生了什么,也没有人在网上讨论这个问题。 我能够在两个不同的Nexus 10(wifi)设备上复制这个问题。 这是我的活动的代码: public class MainActivity extends Activity { private static Camera mCamera; private static boolean mCameraOpen; private static ImageView mPreviewImageView; private SurfaceView mPreviewSurfaceView; private static boolean mPreviewRunning; private static Handler mHandler; private static int TESTS_COUNT = 0; private Camera.Parameters mCameraParameters; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mHandler = new […]

来自Android camera2 API的图像数据在Galaxy S5上翻转和挤压

我正在实施一个应用程序,使用相机的实时图像进行实时image processing。 这是工作,有限制,使用现在弃用的android.hardware.Camera; 改善灵活性和性能我想使用新的android.hardware.camera2 API。 我无法获得原始图像数据进行处理。 这是在三星Galaxy S5上。 (不幸的是,我没有另一个棒棒糖设备,方便在其他硬件上testing)。 我得到了总体框架(从“HdrViewFinder”和“Camera2Basic”样本中获得灵感),实时图像通过SurfaceTexture和GLSurfaceView绘制在屏幕上。 但是,我还需要访问图像数据(至less目前灰度级是很好的)用于定制image processing。 根据StreamConfigurationMap.isOutputSupportedFor(class)的文档,直接获取图像数据的推荐表面是ImageReader (正确的?)。 所以我设置了我的捕获请求: mSurfaceTexture.setDefaultBufferSize(640, 480); mSurface = new Surface(surfaceTexture); … mImageReader = ImageReader.newInstance(640, 480, format, 2); … List<Surface> surfaces = new ArrayList<Surface>(); surfaces.add(mSurface); surfaces.add(mImageReader.getSurface()); … mCameraDevice.createCaptureSession(surfaces, mCameraSessionListener, mCameraHandler); 并在ImageReader的onImageAvailablecallback中,我正在访问数据,如下所示: Image img = reader.acquireLatestImage(); ByteBuffer grayscalePixelsDirectByteBuffer = img.getPlanes()[0].getBuffer(); …但是(如上所述)实时图像预览正在工作,我得到的数据(或我的方式)出现问题。 根据 mCameraInfo.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP).getOutputFormats(); …应支持以下ImageFormats:NV21,JPEG,YV12,YUV_420_888。 我已经尝试了所有(插入上面的'格式'),都支持根据getOutputSizes(format)的设置分辨率,但没有一个给出了所需的结果: NV21:ImageReader.newInstance抛出java.lang.IllegalArgumentException:不支持NV21格式 […]

手动对焦在camera2,android

我正在寻找在android2中的camera2手动对焦的例子。 我试图得到下面显示的最小焦距和可用焦距,但没有帮助。 如何控制焦距? float minimumLens = characteristics.get(CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE); float[] lensDistances = characteristics.get(CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS);&nbsp; 我需要用seekbar来控制它。 提前致谢。

如何确定相机预览帧的默认方向?

我正在尝试(再次)创build适用于所有场景的相机预览逻辑: 任何设备:手机,平板电脑,烤面包机,无论如何 任何相机:前置,后置,侧面,面向狗,不pipe android.hardware.Camera和android.hardware.camera2 肖像和风景设备的方向 由于我的minSdkVersion是15,因为我不是特别关心性能,我正在尝试使用一个TextureView 。 而且,按照fadden的build议在这里和这里这样的地方,我想用一个合适的Matrix在该TextureView上使用setTransform() : 正确定位预览,将设备方向考虑在内 以TextureView纵横比与预览帧长宽比不匹配的代价来完全填充TextureView 不会拉伸图像,以便预览正方形项目(例如,3英寸正方形的便笺本)在预览中显示为正方形 在我的情况下, TextureView填充屏幕,减去状态栏和导航栏。 从Grafika的PlayMovieActivity.java的adjustAspectRatio() PlayMovieActivity.java ,我现在有这个: private void adjustAspectRatio(int videoWidth, int videoHeight, int rotation) { if (iCanHazPhone) { int temp=videoWidth; videoWidth=videoHeight; videoHeight=temp; } int viewWidth=getWidth(); int viewHeight=getHeight(); double aspectRatio=(double)videoHeight/(double)videoWidth; int newWidth, newHeight; if (getHeight()>(int)(viewWidth*aspectRatio)) { newWidth=(int)(viewHeight/aspectRatio); newHeight=viewHeight; } else { newWidth=viewWidth; newHeight=(int)(viewWidth*aspectRatio); } int […]

将Android camera2 api YUV_420_888转换为RGB

我正在编写一个应用程序,需要摄像头的饲料,将其转换为rgb,以便做一些处理。 它在使用NV21 Yuv格式的旧相机实现方面效果很好。 我遇到的问题是新的Yuv格式,YUV_420_888。 在新的Camera2 Api中,图像不再正确转换为RGB,而是发送YUV_420_888 yuv格式而不是NV21(YUV_420_SP)格式。 有人可以告诉我如何将YUV_420_888转换为RGB? 谢谢

Android camera2捕捉突发太慢

我正在尝试修改android-Camera2Basic代码来捕获一连串的图片。 不过,在我运行L 5.0.1的Nexus 5上,我无法获得比图片之间的延迟快200-300毫秒的延迟。 我尝试了一堆东西,但这是最基本的。 这是我修改的Camera2Basic代码的唯一部分。 我的预览纹理视图只有50x50dp,但没关系,对不对? 值得一提的是,这个代码在我的Nexus 6上只有50-100ms左右的延迟,L 5.1。 private void captureStillPicture() { try { List<CaptureRequest> captureList = new ArrayList<CaptureRequest>(); mPreviewRequestBuilder.addTarget(mImageReader.getSurface()); for (int i=0;i<10;i++) { captureList.add(mPreviewRequestBuilder.build()); } mCaptureSession.stopRepeating(); mCaptureSession.captureBurst(captureList, cameraCaptureCallback, null); mPreviewRequestBuilder.removeTarget(mImageReader.getSurface()); } catch (CameraAccessException e) { e.printStackTrace(); } } CameraCaptureSession.CaptureCallback cameraCaptureCallback = new CameraCaptureSession.CaptureCallback() { @Override public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult […]

Android使用CamcorderProfile捕获慢动作video

我试图捕捉我的Nexus 5x慢动作video。 这就是我configuration媒体logging器的方式: 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 […]

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

我正在尝试使用新的相机api。 突发捕捉速度太慢了,所以我在ImageReader中使用了YUV_420_888格式,稍后再做一个JPEG格式的转换,就像在下面的文章中提到的那样: 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, […]