status_t CameraMetadata::sort() { if (mLocked) { ALOGE("%s: CameraMetadata is locked", __FUNCTION__); return INVALID_OPERATION; } return sort_camera_metadata(mBuffer); }
status_t CameraMetadata::sort() { return sort_camera_metadata(mBuffer); }
void QCameraHardwareInterface::runCommandThread(void *data) { /** * This function implements the main service routine for the incoming * frame requests, this thread routine is started everytime we get a * notify_request_queue_not_empty trigger, this thread makes the * assumption that once it receives a NULL on a dequest_request call * there will be a fresh notify_request_queue_not_empty call that is * invoked thereby launching a new instance of this thread. Therefore, * once we get a NULL on a dequeue request we simply let this thread die */ int res; camera_metadata_t *request=NULL; mPendingRequests=0; while(mRequestQueueSrc) { ALOGV("%s:Dequeue request using mRequestQueueSrc:%p",__func__,mRequestQueueSrc); mRequestQueueSrc->dequeue_request(mRequestQueueSrc,&request); if(request==NULL) { ALOGE("%s:No more requests available from src command \ thread dying",__func__); return; } mPendingRequests++; /* Set the metadata values */ /* Wait for the SOF for the new metadata values to be applied */ /* Check the streams that need to be active in the stream request */ sort_camera_metadata(request); camera_metadata_entry_t streams; res = find_camera_metadata_entry(request, ANDROID_REQUEST_OUTPUT_STREAMS, &streams); if (res != NO_ERROR) { ALOGE("%s: error reading output stream tag", __FUNCTION__); return; } res = tryRestartStreams(streams); if (res != NO_ERROR) { ALOGE("error tryRestartStreams %d", res); return; } /* 3rd pass: Turn on all streams requested */ for (uint32_t i = 0; i < streams.count; i++) { int streamId = streams.data.u8[i]; QCameraStream *stream = QCameraStream::getStreamAtId(streamId); /* Increment the frame pending count in each stream class */ /* Assuming we will have the stream obj in had at this point may be * may be multiple objs in which case we loop through array of streams */ stream->onNewRequest(); } ALOGV("%s:Freeing request using mRequestQueueSrc:%p",__func__,mRequestQueueSrc); /* Free the request buffer */ mRequestQueueSrc->free_request(mRequestQueueSrc,request); mPendingRequests--; ALOGV("%s:Completed request",__func__); }