То, что я пробовал:
Реализация кода: < /p>
Настройка Aimagereader и обратный вызов изображения: < /p>
// Creating AImageReader
AImageReader_new(320, 240, AIMAGE_FORMAT_JPEG, 10,
&imageReader);
AImageReader_ImageListener listener = {
.context = nullptr,
.onImageAvailable = ImageCallback
};
AImageReader_setImageListener(imageReader, &listener);
< /code>
обратный вызов изображения < /p>
void ImageCallback(void* context, AImageReader* reader) {
LOG("Image Available Callback Triggered!");
AImage* image;
media_status_t imgStatus = AImageReader_acquireLatestImage(reader, &image);
if (imgStatus != AMEDIA_OK || !image) {
LOGE("Failed to acquire image, status: %d", imgStatus);
return;
}
int32_t width, height, format;
AImage_getWidth(image, &width);
AImage_getHeight(image, &height);
AImage_getFormat(image, &format);
LOG("Received Image: %dx%d, Format: %d", width, height, format);
AImage_delete(image);
}
< /code>
Конфигурация запроса захвата < /p>
ACameraDevice_createCaptureRequest(cameraDevice, TEMPLATE_PREVIEW, &captureRequest);
// Attach ImageReader to Capture Request
ANativeWindow* nativeWindow;
AImageReader_getWindow(imageReader, &nativeWindow);
ACameraOutputTarget* imageReaderTarget;
ACameraOutputTarget_create(nativeWindow, &imageReaderTarget);
ACaptureRequest_addTarget(captureRequest, imageReaderTarget);
// Set Capture Request Parameters
ACaptureRequest_setEntry_i32(captureRequest, ACAMERA_SENSOR_SENSITIVITY, 1, (int32_t[]){400});
ACaptureRequest_setEntry_i32(captureRequest, ACAMERA_CONTROL_AE_TARGET_FPS_RANGE, 2, (int32_t[]){15, 30});
ACaptureRequest_setEntry_i32(captureRequest, ACAMERA_SCALER_CROP_REGION, 4, (int32_t[]){0, 0, 320, 240});
// Start Capture Session
camera_status_t cam_status = ACameraCaptureSession_setRepeatingRequest(
captureSession, nullptr, 1, &captureRequest, nullptr);
if (cam_status != ACAMERA_OK) {
LOGE("Failed to start capture session, status: %d", cam_status);
return;
}
LOG("Camera Capture Started!");
Подробнее здесь: https://stackoverflow.com/questions/794 ... magereader
Мобильная версия