我是Android Camera2 API的新手.我只是将我的所有项目移动到新的Camera2 API.我使用Camera2Basic示例作为起点.
我现在通过添加以下内容来尝试缩放:
public boolean onTouchEvent(MotionEvent event) {
try {
CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
CameraCharacteristics characteristics = manager.getCameraCharacteristics(mCameraId);
float maxZoom = (characteristics.get(CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM))*10;
Rect m = characteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);
int action = event.getAction();
float current_finger_spacing;
if (event.getPointerCount() > 1) {
// Multi touch logic
current_finger_spacing = getFingerSpacing(event);
if(finger_spacing != 0){
if(current_finger_spacing > finger_spacing && maxZoom > zoom_level){
zoom_level++;
}
else if (current_finger_spacing < finger_spacing && zoom_level > 1){
zoom_level--;
}
int minW = (int) (m.width() / maxZoom);
int …Run Code Online (Sandbox Code Playgroud) 可以同时绑定Preview、ImageAnalysis、吗?VideoCapture成对组合时,所有可能的组合(即Preview+ ImageAnalysis、Preview+VideoCapture和ImageAnalysis+ VideoCapture)都工作得很好,但将所有三个组合在一起会引发以下异常。
java.lang.IllegalArgumentException: No supported surface combination is found for camera device - Id : 1. May be attempting to bind too many use cases.
at androidx.camera.camera2.internal.Camera2DeviceSurfaceManager.getSuggestedResolutions(Camera2DeviceSurfaceManager.java:193)
at androidx.camera.core.CameraX.calculateSuggestedResolutions(CameraX.java:943)
at androidx.camera.core.CameraX.bindToLifecycle(CameraX.java:293)
at androidx.camera.lifecycle.ProcessCameraProvider.bindToLifecycle(ProcessCameraProvider.java:229)
Run Code Online (Sandbox Code Playgroud)
是否有任何解决方法可以让我使用ImageAnalysis并同时录制视频?
我已经按照 Google CameraX代码实验室来实现自定义相机。相机预览很好,但是当我在旋转图像捕获图像后拍摄图像时。我正在以纵向模式拍摄图像,但保存的图像是横向的。这是配置相机的方法
private fun startCamera() {
val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener(Runnable {
// Used to bind the lifecycle of cameras to the lifecycle owner
val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()
// Preview
val preview = Preview.Builder()
.setTargetRotation(this.windowManager.defaultDisplay.rotation)
.build()
.also {
it.setSurfaceProvider(viewFinder.createSurfaceProvider())
}
imageCapture = ImageCapture.Builder()
.setTargetRotation(this.windowManager.defaultDisplay.rotation)
.build()
val imageAnalyzer = ImageAnalysis.Builder()
.build()
.also {
it.setAnalyzer(cameraExecutor, LuminosityAnalyzer { luma ->
Log.d(TAG, "Average luminosity: $luma")
})
}
// Select back camera as a default
val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
try { …Run Code Online (Sandbox Code Playgroud) android image-rotation android-orientation android-camera2 android-camerax
我正在尝试创建一个CameraCaptureSession具有四个输出的 Camera2:
SurfaceView,最高 1080p)ImageReader,最多 8k 照片)MediaRecorder/ MediaCodec,最多 4k 视频)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)
..进入Surface从MediaRecorder?
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
我对Camera2 API的预览缩放有问题.我正在使用TextureView.
我想只缩放TextureView中显示的预览流.
我想缩放我使用Zoom Gesture的区域.
我使用SimpleOnScaleGestureListener!
我添加了以下代码.zoomingFactor和x和y位置都是正确的.
private void updateTextureViewSize(float xPosi,float yPosi, float scale){
float scaleX = 1.0f;
float scaleY = 1.0f;
float mVideoWidth = mCamcontrol.getmPreviewSize().getWidth();
float mVideoHeight = mCamcontrol.getmPreviewSize().getHeight();
int rotation = getWindowManager().getDefaultDisplay().getRotation();
RectF viewRect = new RectF(0, 0, 1440, 2560);
RectF bufferRect = new RectF(0, 0, mVideoHeight, mVideoWidth);
bufferRect.offset(xPosi - bufferRect.centerX(), yPosi - bufferRect.centerY());
//16:9 faktor
scaleX = ((mScale * scale) / 9f) * 16f;
scaleY = ((mScale * scale) / 16f) * 9f;
Matrix matrix = new …Run Code Online (Sandbox Code Playgroud) 我已经实现了一个使用camera2 API录制视频的自定义相机.可以选择将闪光灯设置为"开","关"和"自动".将闪光灯设置为"自动"不起作用,而其他选项工作正常.
这是代码:
private void updateFlash() {
Log.e(TAG, "Flash = " + currentFlash);
switch (currentFlash) {
case Constants.FLASH_OFF:
previewRequestBuilder.set(CaptureRequest.FLASH_MODE,
CaptureRequest.FLASH_MODE_OFF);
break;
case Constants.FLASH_ON:
previewRequestBuilder.set(CaptureRequest.FLASH_MODE,
CaptureRequest.FLASH_MODE_TORCH);
break;
case Constants.FLASH_TORCH:
previewRequestBuilder.set(CaptureRequest.FLASH_MODE,
CaptureRequest.FLASH_MODE_TORCH);
break;
case Constants.FLASH_AUTO:
previewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
break;
}
cameraCaptureSession.setRepeatingRequest(previewRequestBuilder.build(),
null, null);
}
Run Code Online (Sandbox Code Playgroud)
我已经google了很多,并尝试了几乎所有stackoverflow自动闪存的答案但没有工作.
请帮忙.我不明白这是什么问题.
我正在尝试实现相机应用程序.并检查示例.一些示例包含以下清单功能:uses-feature android:name="android.hardware.camera2.full.我检查过官方文档和谷歌示例,但没有一个提到现有的这个功能.(或者我错过了一些).
这个功能的来源是什么android.hardware.camera?有什么区别?
编辑:让我困惑的是这些例子googlesamples:
还有这个
还有这个
他们正在使用新的Camera2API和旧的清单features.我不知道两者是如何结合在一起的.
我在一些我无法测试的手机上遇到问题(这是第一个问题)我正在尝试构建一个可以从camera2 API录制的服务.但是当我将应用程序发送到后台时,在某些手机上似乎存在我目前无法解决的问题.我只有日志,无法弄清楚应用程序无法正常工作的主要原因.
由于这个类太大而不能在这里显示为代码,你可以在这里找到它:https: //github.com/Astyan42/RecordingService/blob/master/RecordingService.java
这是给定的日志文件:https: //github.com/Astyan42/RecordingService/blob/master/logcat.txt
谢谢你的帮忙
我正在尝试使用MediaCodec在onImageAvailable回调中记录ImageReader中的原始帧,但无法编写正常工作的代码.大多数示例都使用Camera 1 API或MediaRecorder.我的目标是捕获单个帧处理它并从中创建一个mp4
原始的YUV帧
@Override
public void onImageAvailable(ImageReader reader) {
Image i = reader.acquireLatestImage();
processImage(i);
i.close();
Log.d("hehe", "onImageAvailable");
}
};
Run Code Online (Sandbox Code Playgroud)
MediaCodec
MediaCodec codec = MediaCodec.createByCodecName(name);
MediaFormat mOutputFormat; // member variable
codec.setCallback(new MediaCodec.Callback() {
@Override
void onInputBufferAvailable(MediaCodec mc, int inputBufferId) {
ByteBuffer inputBuffer = codec.getInputBuffer(inputBufferId);
// fill inputBuffer with valid data
…
codec.queueInputBuffer(inputBufferId, …);
}
@Override
void onOutputBufferAvailable(MediaCodec mc, int outputBufferId, …) {
ByteBuffer outputBuffer = codec.getOutputBuffer(outputBufferId);
MediaFormat bufferFormat = codec.getOutputFormat(outputBufferId); // option A
// bufferFormat is equivalent to mOutputFormat
// …Run Code Online (Sandbox Code Playgroud) 我有一个 UVC 摄像头,想要从我的 Android Pie (Android 9) 代码中访问和抓取帧。
这是我用来枚举连接到 Android 手机的摄像头的代码:
@Override
public void onResume()
{
CameraManager manager =
(CameraManager)getSystemService(CAMERA_SERVICE);
try {
for (String cameraId : manager.getCameraIdList()) {
CameraCharacteristics chars
= manager.getCameraCharacteristics(cameraId);
// Do something with the characteristics
int deviceLevel = chars.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);
Log.d(TAG, " **** device ["+cameraId+"] level:"+deviceLevel);
}
} catch(CameraAccessException e){
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
我在 Android 9/Pie (Pixel 3) 上跳来跳去,这显示了连接的 USB 摄像头。但是只列出了两个设备,手机的前置和后置摄像头。
这是我的清单文件 (AndroidManifest.xml) 中的功能和权限列表:
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" /> …Run Code Online (Sandbox Code Playgroud) android ×10
android-camera2 ×10
java ×2
zoom ×2
camera ×1
capture ×1
image ×1
mediacodec ×1
opengl-es ×1
surfaceview ×1