summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Expand)Author
2021-02-02android: camera_device: Alphabetically sort keysJacopo Mondi
2021-02-01libcamera: formats: Add RGB565_BE formatLaurent Pinchart
2021-02-01android: camera_device: Fix exposure time tag in exif and androidPaul Elder
2021-01-29libcamera: pipeline: rkisp1: Avoid race when processing parameter buffersNiklas Söderlund
2021-01-29libcamera: pipeline: rkisp1: Remove TimelineNiklas Söderlund
2021-01-29libcamera: pipeline: rkisp1: Use SOF event to warn about late parametersNiklas Söderlund
2021-01-29libcamera: pipeline: rkisp1: Use delayed controlsNiklas Söderlund
2021-01-29libcamera: camera_sensor: Expose the camera deviceNiklas Söderlund
2021-01-29libcamera: raspberrypi: Remove StaggeredCtrlNiklas Söderlund
2021-01-29libcamera: raspberrypi: Switch to DelayedControlsNiklas Söderlund
2021-01-29libcamera: delayed_controls: Add helper for controls that apply with a delayNiklas Söderlund
2021-01-29android: camera_device: Set AE precapture trigger according to requestPaul Elder
2021-01-27android: jpeg: Set thumbnail and JPEG quality based on requestPaul Elder
2021-01-27android: camera_device: Cache request metadataPaul Elder
2021-01-27android: jpeg: Configure thumbnailer based on request metadataPaul Elder
2021-01-27android: Set result metadata and EXIF fields based on request metadataPaul Elder
2021-01-27android: camera_device: Load make and model from platform settingsPaul Elder
2021-01-27android: jpeg: exif: Add functions for setting various valuesPaul Elder
2021-01-27android: jpeg: exif: Fix setOrientation EXIF valuesPaul Elder
2021-01-27android: jpeg: exif: Expand setString to support different encodingsPaul Elder
2021-01-26ipa: raspberrypi: Remove legacy Rasberry Pi loggingDavid Plowman
2021-01-26ipa: raspberrypi: Replace Raspberry Pi debug with libcamera debugDavid Plowman
2021-01-26ipa: raspberrypi: awb: Replace Raspberry Pi debug with libcamera debugDavid Plowman
2021-01-26ipa: raspberrypi: alsc: Replace Raspberry Pi debug with libcamera debugDavid Plowman
2021-01-26ipa: raspberrypi: controller: Replace Raspberry Pi debug with libcamera debugDavid Plowman
2021-01-25android: camera_device: Report the required dynamic metadataJacopo Mondi
2021-01-25android: camera_device: Support AWB_AUTOJacopo Mondi
2021-01-25android: camera_device: Handle SCALER_CROP_REGIONJacopo Mondi
2021-01-25libcamera: ipu3: Report ScalerCrop in metadataJacopo Mondi
2021-01-25android: camera_device: Register MAX_DIGITAL_ZOOMJacopo Mondi
2021-01-25libcamera: ipu3: Register ScalerCrop controlJacopo Mondi
2021-01-25android: camera_device: Report EXPOSURE_TIMEJacopo Mondi
2021-01-25android: camera_device: Register EXPOSURE_TIME_RANGEJacopo Mondi
2021-01-25libcamera: ipu3: Register Exposure controlJacopo Mondi
2021-01-25libcamera: camera_sensor: Make V4L2_CID_EXPOSURE mandatoryJacopo Mondi
2021-01-25libcamera: CameraSensor: Mention V4L2 in get/setControls()Jacopo Mondi
2021-01-22android: camera_device: Clone settings in request descriptorJacopo Mondi
2021-01-22android: camera_metadata: Add defaul constructorJacopo Mondi
2021-01-22android: camera_device: Copy camera3 buffers in descriptorJacopo Mondi
2021-01-22android: camera_device: Pass camera3 request to descriptorJacopo Mondi
2021-01-22android: camera_metadata: Add copy constructor and getEntryPaul Elder
2021-01-20ipa: raspberrypi: config: Update shutter speeds for imx219/477 and ov5647Naushir Patuck
2021-01-20libcamera: raspberrypi: Add control of sensor vblankingNaushir Patuck
2021-01-20libcamera: controls: Add frame duration controlNaushir Patuck
2021-01-18android: camera_device: Do not default pixel array propertiesJacopo Mondi
2021-01-18libcamera: camera_sensor: Initialize VIMC propertiesJacopo Mondi
2021-01-18libcamera: media_object: Add a const version of dev()Jacopo Mondi
2021-01-18libcamera: uvc: Initialize the pixel array propertiesJacopo Mondi
2021-01-18libcamera: camera_sensor: Do not default 'rotation'Jacopo Mondi
2021-01-18libcamera: camera_sensor: Default 'location' to ExternalJacopo Mondi
class="hl com"> * * Only controls specified in \a controlParams are handled. If it's desired to * mix delayed controls and controls that take effect immediately the immediate * controls must be listed in the \a controlParams map with a delay value of 0. */ DelayedControls::DelayedControls(V4L2Device *device, const std::unordered_map<uint32_t, ControlParams> &controlParams) : device_(device), maxDelay_(0) { const ControlInfoMap &controls = device_->controls(); /* * Create a map of control ids to delays for controls exposed by the * device. */ for (auto const &param : controlParams) { auto it = controls.find(param.first); if (it == controls.end()) { LOG(DelayedControls, Error) << "Delay request for control id " << utils::hex(param.first) << " but control is not exposed by device " << device_->deviceNode(); continue; } const ControlId *id = it->first; controlParams_[id] = param.second; LOG(DelayedControls, Debug) << "Set a delay of " << controlParams_[id].delay << " and priority write flag " << controlParams_[id].priorityWrite << " for " << id->name(); maxDelay_ = std::max(maxDelay_, controlParams_[id].delay); } reset(); } /** * \brief Reset state machine * * Resets the state machine to a starting position based on control values * retrieved from the device. */ void DelayedControls::reset() { running_ = false; firstSequence_ = 0; queueCount_ = 1; writeCount_ = 0; /* Retrieve control as reported by the device. */ std::vector<uint32_t> ids; for (auto const &param : controlParams_) ids.push_back(param.first->id()); ControlList controls = device_->getControls(ids); /* Seed the control queue with the controls reported by the device. */ values_.clear(); for (const auto &ctrl : controls) { const ControlId *id = device_->controls().idmap().at(ctrl.first); /* * Do not mark this control value as updated, it does not need * to be written to to device on startup. */ values_[id][0] = Info(ctrl.second, false); } } /** * \brief Push a set of controls on the queue * \param[in] controls List of controls to add to the device queue * * Push a set of controls to the control queue. This increases the control queue * depth by one. * * \returns true if \a controls are accepted, or false otherwise */ bool DelayedControls::push(const ControlList &controls) { /* Copy state from previous frame. */ for (auto &ctrl : values_) { Info &info = ctrl.second[queueCount_]; info = values_[ctrl.first][queueCount_ - 1]; info.updated = false; } /* Update with new controls. */ const ControlIdMap &idmap = device_->controls().idmap(); for (const auto &control : controls) { const auto &it = idmap.find(control.first); if (it == idmap.end()) { LOG(DelayedControls, Warning) << "Unknown control " << control.first; return false; } const ControlId *id = it->second; if (controlParams_.find(id) == controlParams_.end()) return false; Info &info = values_[id][queueCount_]; info = Info(control.second); LOG(DelayedControls, Debug) << "Queuing " << id->name() << " to " << info.toString() << " at index " << queueCount_; } queueCount_++; return true; } /** * \brief Read back controls in effect at a sequence number * \param[in] sequence The sequence number to get controls for * * Read back what controls where in effect at a specific sequence number. The * history is a ring buffer of 16 entries where new and old values coexist. It's