summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAri Hausman-Cohen <arihc@google.com>2016-05-24 13:32:29 -0700
committerAlex Deymo <deymo@google.com>2016-08-25 16:35:39 -0700
commit3382242b298bb171ed3b13cef4e51e92a69f0f25 (patch)
treeda5623cf1b33209d69942601e5e0a3403aa50be9
parentd075131bcf1ee173db1ee2afff42bb1599e1f41a (diff)
downloadcommon-3382242b298bb171ed3b13cef4e51e92a69f0f25.tar.gz
Fixes brillo_camera_client to compile for nyc.
BUG: 28935775 TEST: program compiles (cherry picked from commit e60fd1d098e406db4a92fe49f5c484c41ad09d73) Change-Id: I55d5fba3ed17f426f2133f7a8d0016e56d1c555f
-rw-r--r--brillo_camera/main.cpp101
1 files changed, 64 insertions, 37 deletions
diff --git a/brillo_camera/main.cpp b/brillo_camera/main.cpp
index 6d5a3f8..081eb4f 100644
--- a/brillo_camera/main.cpp
+++ b/brillo_camera/main.cpp
@@ -25,10 +25,12 @@
#include <brillo/message_loops/base_message_loop.h>
#include <brillo/syslog_logging.h>
#include <camera/CameraMetadata.h>
-#include <camera/ICameraService.h>
+#include <android/hardware/ICameraService.h>
#include <camera/camera2/CaptureRequest.h>
-#include <camera/camera2/ICameraDeviceCallbacks.h>
-#include <camera/camera2/ICameraDeviceUser.h>
+#include <camera/camera2/SubmitInfo.h>
+#include <android/hardware/camera2/BnCameraDeviceCallbacks.h>
+#include <android/hardware/camera2/ICameraDeviceCallbacks.h>
+#include <android/hardware/camera2/ICameraDeviceUser.h>
#include <camera/camera2/OutputConfiguration.h>
#include <gui/BufferQueue.h>
#include <gui/BufferQueueConsumer.h>
@@ -42,21 +44,23 @@
#include <utils/String8.h>
#include <utils/StrongPointer.h>
-using android::BnCameraDeviceCallbacks;
+using android::binder::Status;
using android::BufferQueue;
using android::CameraMetadata;
-using android::CaptureRequest;
using android::CaptureResultExtras;
using android::CpuConsumer;
-using android::ICameraDeviceCallbacks;
-using android::ICameraDeviceUser;
-using android::ICameraService;
+using android::hardware::camera2::BnCameraDeviceCallbacks;
+using android::hardware::camera2::CaptureRequest;
+using android::hardware::camera2::ICameraDeviceCallbacks;
+using android::hardware::camera2::ICameraDeviceUser;
+using android::hardware::camera2::utils::SubmitInfo;
+using android::hardware::ICameraService;
using android::IGraphicBufferConsumer;
using android::IGraphicBufferProducer;
using android::OK;
+using android::sp;
using android::String16;
using android::Surface;
-using android::sp;
namespace {
@@ -72,32 +76,44 @@ class CameraDeviceCallbacks : public BnCameraDeviceCallbacks {
public:
explicit CameraDeviceCallbacks(brillo::MessageLoop* loop) : loop_(loop) {}
- void onDeviceError(ICameraDeviceCallbacks::CameraErrorCode error_code,
- const CaptureResultExtras& /* result_extras */) override {
+ Status onDeviceError(
+ int error_code,
+ const CaptureResultExtras& /* result_extras */) override {
LOG(ERROR) << "Received camera error = " << error_code;
loop_->BreakLoop();
+ return Status::ok();
}
- void onDeviceIdle() override {
+ Status onDeviceIdle() override {
LOG(INFO) << "Camera device is idle";
+ return Status::ok();
}
- void onCaptureStarted(
+ Status onCaptureStarted(
const CaptureResultExtras& /* result_extras */,
int64_t /* timestamp */) override {
LOG(INFO) << "Capture started.";
+ return Status::ok();
}
- void onResultReceived(
+ Status onResultReceived(
const CameraMetadata& /* metadata */,
const CaptureResultExtras& /* result_extras */) override {
LOG(INFO) << "Capture result received";
result_received_ = true;
loop_->BreakLoop();
+ return Status::ok();
}
- void onPrepared(int stream_id) override {
+ Status onPrepared(int stream_id) override {
LOG(INFO) << "Camera is prepared for stream " << stream_id;
+ return Status::ok();
+ }
+
+ Status onRepeatingRequestError(int64_t lastFrameNumber) {
+ LOG(INFO) << "Repeating request error, last frame = " << lastFrameNumber;
+ loop_->BreakLoop();
+ return Status::ok();
}
bool result_received() { return result_received_; }
@@ -115,7 +131,7 @@ int main() {
brillo::InitLog(brillo::kLogToStderr);
// Create a message loop.
- brillo::BaseMessageLoop message_loop;
+ brillo::BaseMessageLoop message_loop(new base::MessageLoopForIO);
// Initialize a binder watcher.
brillo::BinderWatcher watcher(&message_loop);
@@ -123,35 +139,37 @@ int main() {
LOG(INFO) << "Retrieving a binder for the camera service.";
sp<ICameraService> camera_service;
- android::status_t status = android::getService(
+ android::status_t service_status = android::getService(
String16(kCameraServiceName), &camera_service);
- CHECK(status == OK)
+ CHECK(service_status == OK)
<< "Failed to get ICameraService binder from service manager!";
LOG(INFO) << "Asking how many cameras we have.";
- const int32_t num_cameras = camera_service->getNumberOfCameras(
- ICameraService::CAMERA_TYPE_ALL);
+ int32_t num_cameras;
+ Status status = camera_service->getNumberOfCameras(
+ ICameraService::CAMERA_TYPE_ALL, &num_cameras);
+ CHECK(status.isOk()) << "Failed to get number of cameras";
CHECK(num_cameras > 0)
<< "ICameraService reports no cameras available";
const int camera_id = 0;
LOG(INFO) << "Connecting to camera " << camera_id;
sp<CameraDeviceCallbacks> camera_cb =
- new CameraDeviceCallbacks(&message_loop);
+ new CameraDeviceCallbacks(&message_loop);
sp<ICameraDeviceCallbacks> camera_cb_alias = camera_cb;
const String16 client_package_name("brillo");
sp<ICameraDeviceUser> camera_device_user;
status = camera_service->connectDevice(
camera_cb_alias, camera_id, client_package_name,
ICameraService::USE_CALLING_UID,
- camera_device_user);
- CHECK(status == OK) << "Failed to connect to camera id=" << camera_id
- << " error=" << status;
+ &camera_device_user);
+ CHECK(status.isOk()) << "Failed to connect to camera id="
+ << camera_id << " error=" << status;
LOG(INFO) << "Obtaining camera info";
CameraMetadata camera_metadata;
status = camera_device_user->getCameraInfo(&camera_metadata);
- CHECK(status == OK) << "Failed to get camera info, error=" << status;
+ CHECK(status.isOk()) << "Failed to get camera info, error=" << status;
LOG(INFO) << "Calculating smallest stream configuration";
camera_metadata_entry streamConfigs =
@@ -159,12 +177,16 @@ int main() {
int32_t width = std::numeric_limits<int32_t>::max();
int32_t height = 1;
for (size_t i = 0; i < streamConfigs.count; i += 4) {
+ LOG(INFO) << "Found " << streamConfigs.count << " stream configs.";
int32_t fmt = streamConfigs.data.i32[i];
+ LOG(INFO) << "Format: " << fmt;
int32_t inout = streamConfigs.data.i32[i + 3];
+ LOG(INFO) << "inout: " << inout;
if (fmt == ANDROID_SCALER_AVAILABLE_FORMATS_RAW16 &&
inout == ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT) {
int32_t w = streamConfigs.data.i32[i + 1];
int32_t h = streamConfigs.data.i32[i + 2];
+ LOG(INFO) << "w: " << w << " h: " << h;
if (width * height > w * h) {
width = w;
@@ -190,19 +212,21 @@ int main() {
LOG(INFO) << "Configuring the camera";
status = camera_device_user->beginConfigure();
- CHECK(status == OK) << "Failed calling ICameraDeviceUser::beginConfigure()"
- << " error = " << status;
+ CHECK(status.isOk()) << "Failed calling ICameraDeviceUser::beginConfigure()"
+ << " error = " << status;
android::OutputConfiguration output_configuration(
buffer_producer, CAMERA3_STREAM_ROTATION_0);
- status = camera_device_user->createStream(output_configuration);
- CHECK(status == OK) << "Failed calling ICameraDeviceUser::createStream()"
- << " error = " << status;
+ int32_t stream_id;
+ status = camera_device_user->createStream(output_configuration, &stream_id);
+ CHECK(status.isOk()) << "Failed calling ICameraDeviceUser::createStream()"
+ << " error = " << status;
status = camera_device_user->endConfigure(false /* isConstrainedHighSpeed */);
- CHECK(status == OK) << "Failed calling ICameraDeviceUser::endConfigure()"
- << " error = " << status;
+ CHECK(status.isOk()) << "Failed calling ICameraDeviceUser::endConfigure()"
+ << " error = " << status;
LOG(INFO) << "Creating capture_request";
- sp<CaptureRequest> capture_request = new CaptureRequest;
+ // CaptureRequest doesn't define incStrong, can't be strong pointer.
+ CaptureRequest* capture_request = new CaptureRequest;
status = camera_device_user->createDefaultRequest(
CAMERA3_TEMPLATE_STILL_CAPTURE, &capture_request->mMetadata);
sp<Surface> surface = new Surface(
@@ -211,11 +235,11 @@ int main() {
capture_request->mIsReprocess = false;
LOG(INFO) << "Submitting capture request";
- int64_t last_frame_number = 0;
+ SubmitInfo submit_info;
status = camera_device_user->submitRequest(
- capture_request, false, &last_frame_number);
- CHECK(status == OK) << "Got error=" << status
- << " while submitting capture request.";
+ *capture_request, false, &submit_info);
+ CHECK(status.isOk()) << "Got error=" << status
+ << " while submitting capture request.";
LOG(INFO) << "Waiting for the camera to take a picture.";
// If we don't hear back from the camera for long enough, just time out.
@@ -229,5 +253,8 @@ int main() {
// TODO(wiley) render this image to a file to save somewhere.
+ // Cleanup.
+ delete capture_request;
+
return 0;
}