Merge "EmulatedFakeCamera2: Update to match camera_metadata changes"

This commit is contained in:
Eino-Ville Talvala
2012-05-16 10:59:14 -07:00
committed by Android (Google) Code Review
2 changed files with 34 additions and 43 deletions

View File

@@ -455,81 +455,73 @@ bool EmulatedFakeCamera2::ConfigureThread::threadLoop() {
sort_camera_metadata(mRequest); sort_camera_metadata(mRequest);
uint8_t *streams; camera_metadata_entry_t streams;
size_t streamCount;
res = find_camera_metadata_entry(mRequest, res = find_camera_metadata_entry(mRequest,
ANDROID_REQUEST_OUTPUT_STREAMS, ANDROID_REQUEST_OUTPUT_STREAMS,
NULL, &streams);
(void**)&streams,
&streamCount);
if (res != NO_ERROR) { if (res != NO_ERROR) {
ALOGE("%s: error reading output stream tag", __FUNCTION__); ALOGE("%s: error reading output stream tag", __FUNCTION__);
mParent->signalError(); mParent->signalError();
return false; return false;
} }
// TODO: Only raw stream supported // TODO: Only raw stream supported
if (streamCount != 1 || streams[0] != 0) { if (streams.count != 1 || streams.data.u8[0] != 0) {
ALOGE("%s: TODO: Only raw stream supported", __FUNCTION__); ALOGE("%s: TODO: Only raw stream supported", __FUNCTION__);
mParent->signalError(); mParent->signalError();
return false; return false;
} }
camera_metadata_entry_t e;
res = find_camera_metadata_entry(mRequest, res = find_camera_metadata_entry(mRequest,
ANDROID_REQUEST_FRAME_COUNT, ANDROID_REQUEST_FRAME_COUNT,
NULL, &e);
(void**)&mNextFrameNumber,
NULL);
if (res != NO_ERROR) { if (res != NO_ERROR) {
ALOGE("%s: error reading frame count tag", __FUNCTION__); ALOGE("%s: error reading frame count tag", __FUNCTION__);
mParent->signalError(); mParent->signalError();
return false; return false;
} }
mNextFrameNumber = *e.data.i32;
res = find_camera_metadata_entry(mRequest, res = find_camera_metadata_entry(mRequest,
ANDROID_SENSOR_EXPOSURE_TIME, ANDROID_SENSOR_EXPOSURE_TIME,
NULL, &e);
(void**)&mNextExposureTime,
NULL);
if (res != NO_ERROR) { if (res != NO_ERROR) {
ALOGE("%s: error reading exposure time tag", __FUNCTION__); ALOGE("%s: error reading exposure time tag", __FUNCTION__);
mParent->signalError(); mParent->signalError();
return false; return false;
} }
mNextExposureTime = *e.data.i64;
res = find_camera_metadata_entry(mRequest, res = find_camera_metadata_entry(mRequest,
ANDROID_SENSOR_FRAME_DURATION, ANDROID_SENSOR_FRAME_DURATION,
NULL, &e);
(void**)&mNextFrameDuration,
NULL);
if (res != NO_ERROR) { if (res != NO_ERROR) {
ALOGE("%s: error reading frame duration tag", __FUNCTION__); ALOGE("%s: error reading frame duration tag", __FUNCTION__);
mParent->signalError(); mParent->signalError();
return false; return false;
} }
if (*mNextFrameDuration < mNextFrameDuration = *e.data.i64;
*mNextExposureTime + Sensor::kMinVerticalBlank) {
*mNextFrameDuration = *mNextExposureTime + Sensor::kMinVerticalBlank; if (mNextFrameDuration <
mNextExposureTime + Sensor::kMinVerticalBlank) {
mNextFrameDuration = mNextExposureTime + Sensor::kMinVerticalBlank;
} }
res = find_camera_metadata_entry(mRequest, res = find_camera_metadata_entry(mRequest,
ANDROID_SENSOR_SENSITIVITY, ANDROID_SENSOR_SENSITIVITY,
NULL, &e);
(void**)&mNextSensitivity,
NULL);
if (res != NO_ERROR) { if (res != NO_ERROR) {
ALOGE("%s: error reading sensitivity tag", __FUNCTION__); ALOGE("%s: error reading sensitivity tag", __FUNCTION__);
mParent->signalError(); mParent->signalError();
return false; return false;
} }
mNextSensitivity = *e.data.i32;
uint32_t *hourOfDay;
res = find_camera_metadata_entry(mRequest, res = find_camera_metadata_entry(mRequest,
EMULATOR_SCENE_HOUROFDAY, EMULATOR_SCENE_HOUROFDAY,
NULL, &e);
(void**)&hourOfDay,
NULL);
if (res == NO_ERROR) { if (res == NO_ERROR) {
ALOGV("Setting hour: %d", *hourOfDay); ALOGV("Setting hour: %d", *e.data.i32);
mParent->mSensor->getScene().setHour(*hourOfDay); mParent->mSensor->getScene().setHour(*e.data.i32);
} }
// TODO: Fetch stride from gralloc // TODO: Fetch stride from gralloc
@@ -541,10 +533,10 @@ bool EmulatedFakeCamera2::ConfigureThread::threadLoop() {
bool vsync = mParent->mSensor->waitForVSync(kWaitPerLoop); bool vsync = mParent->mSensor->waitForVSync(kWaitPerLoop);
if (vsync) { if (vsync) {
ALOGV("Configuring sensor for frame %d", *mNextFrameNumber); ALOGV("Configuring sensor for frame %d", mNextFrameNumber);
mParent->mSensor->setExposureTime(*mNextExposureTime); mParent->mSensor->setExposureTime(mNextExposureTime);
mParent->mSensor->setFrameDuration(*mNextFrameDuration); mParent->mSensor->setFrameDuration(mNextFrameDuration);
mParent->mSensor->setSensitivity(*mNextSensitivity); mParent->mSensor->setSensitivity(mNextSensitivity);
/** Get buffer to fill for this frame */ /** Get buffer to fill for this frame */
// TODO: Only does raw stream // TODO: Only does raw stream
@@ -684,12 +676,12 @@ bool EmulatedFakeCamera2::ReadoutThread::threadLoop() {
// Got sensor data, construct frame and send it out // Got sensor data, construct frame and send it out
ALOGV("Readout: Constructing metadata and frames"); ALOGV("Readout: Constructing metadata and frames");
uint8_t *metadata_mode; camera_metadata_entry_t metadataMode;
res = find_camera_metadata_entry(mRequest, res = find_camera_metadata_entry(mRequest,
ANDROID_REQUEST_METADATA_MODE, ANDROID_REQUEST_METADATA_MODE,
NULL, (void**)&metadata_mode, NULL); &metadataMode);
if (*metadata_mode == ANDROID_REQUEST_METADATA_FULL) { if (*metadataMode.data.u8 == ANDROID_REQUEST_METADATA_FULL) {
ALOGV("Metadata requested, constructing"); ALOGV("Metadata requested, constructing");
camera_metadata_t *frame = NULL; camera_metadata_t *frame = NULL;
@@ -719,12 +711,11 @@ bool EmulatedFakeCamera2::ReadoutThread::threadLoop() {
&captureTime, &captureTime,
1); 1);
uint32_t hourOfDay = (uint32_t)mParent->mSensor->getScene().getHour(); int32_t hourOfDay = (int32_t)mParent->mSensor->getScene().getHour();
uint32_t *requestedHour; camera_metadata_entry_t requestedHour;
res = find_camera_metadata_entry(frame, res = find_camera_metadata_entry(frame,
EMULATOR_SCENE_HOUROFDAY, EMULATOR_SCENE_HOUROFDAY,
NULL, &requestedHour);
(void**)&requestedHour, NULL);
if (res == NAME_NOT_FOUND) { if (res == NAME_NOT_FOUND) {
ALOGV("Adding vendor tag"); ALOGV("Adding vendor tag");
res = add_camera_metadata_entry(frame, res = add_camera_metadata_entry(frame,
@@ -735,7 +726,7 @@ bool EmulatedFakeCamera2::ReadoutThread::threadLoop() {
} }
} else if (res == OK) { } else if (res == OK) {
ALOGV("Replacing value in vendor tag"); ALOGV("Replacing value in vendor tag");
*requestedHour = hourOfDay; *requestedHour.data.i32 = hourOfDay;
} else { } else {
ALOGE("Error looking up vendor tag"); ALOGE("Error looking up vendor tag");
} }

View File

@@ -151,10 +151,10 @@ private:
// working on them // working on them
camera_metadata_t *mRequest; camera_metadata_t *mRequest;
uint32_t *mNextFrameNumber; int32_t mNextFrameNumber;
uint64_t *mNextExposureTime; int64_t mNextExposureTime;
uint64_t *mNextFrameDuration; int64_t mNextFrameDuration;
uint32_t *mNextSensitivity; int32_t mNextSensitivity;
buffer_handle_t *mNextBuffer; buffer_handle_t *mNextBuffer;
int mNextBufferStride; int mNextBufferStride;
}; };