summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2019-10-04ipa: ipa_manager: Print the loaded IPA modules pathJacopo Mondi
Add debug message to report which IPA modules have been loaded and in which order. The loading order is particularly relevant for the test VIMC IPA, as the same IPA is compiled with an open source license tag and a proprietary one and they both match() against the VIMC pipeline handler. Being informed about their loading order is helpful to understand which one of the two is actually in use. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2019-10-04libcamera: ipa_manager: Sort IPA modules by nameLaurent Pinchart
Sort IPA modules by name when enumerating modules in a directory in order to guarantee a stable ordering. This eases debugging by making issues more reproducible. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2019-10-04libcamera: camera_manager: Fix typo in the documentationLaurent Pinchart
Fix a typo in the CameraManager documentation. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2019-10-01qcam: Fix timers not emitting timeout signalNiklas Söderlund
The timer signal was never emitted in QtEventDispatcher::timerEvent(), this results in timers not working as designed running under the Qt event loop. Fix this by emitting the signal on timeout. Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2019-10-01qcam: Stop timer on timeoutNiklas Söderlund
Stopping the timer will reset the Timer::deadline_ field to 0 fixing potential bugs and call QtEventDispatcher::unregisterTimer() which will take care of the cleanup. Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2019-09-27qcam: Fix unregister of not registered timerNiklas Söderlund
If an unregistered timer is given to QtEventDispatcher::unregisterTimer() an error is printed and Qt gets confused and locks up. Fix this by following the libcamera documentation that passing a unregistered timer is a no-op. Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2019-09-24qcam: Fix ViewFinder memory leakKieran Bingham
When setting the format on the ViewFinder, a new image_ is allocated. Any change in format deletes the existing allocation, but it is not cleaned up on shutdown: Direct leak of 32 byte(s) in 1 object(s) allocated from: #0 0x7f0bf8a7e17f in operator new(unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x10e17f) #1 0x564c7205f7b0 in ViewFinder::setFormat(unsigned int, unsigned int, unsigned int) ../src/qcam/viewfinder.cpp:43 #2 0x564c71fec467 in MainWindow::startCapture() ../src/qcam/main_window.cpp:152 #3 0x564c71fe6c1a in MainWindow::MainWindow(libcamera::CameraManager*, OptionsParser::Options const&) ../src/qcam/main_window.cpp:40 #4 0x564c71fdf133 in main ../src/qcam/main.cpp:76 #5 0x7f0bf5944b6a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x26b6a) Provide a ViewFinder destructor, and delete the allocation as appropriate. Fixes: 97e8b3a2eb32 ("qcam: Add Qt-based GUI application") Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2019-09-23libcamera: ipa_manager: Rework error messages when enumerating IPAsLaurent Pinchart
When enumerating IPAs, the system IPA directory and all the directories listed in the LIBCAMERA_IPA_MODULE_PATH environment variable are listed in turn. Failing to list any of those directories results in an error message being printed for every failure. This is particularly common when developing libcamera, as IPAs may not have been installed locally. To avoid unnecessarily worrying error messages, rework the enumeration procedure to only print a message when no IPA can be found at all. Individual missing directories are not considered as an issue anymore. The message is also downgraded from an error to a warning as the situation may still be normal. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
2019-09-23clang-format: Don't indent namespacesLaurent Pinchart
Our coding style doesn't indent namespace contents. Update .clang-format accordingly. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2019-09-16test: buffer_import: Initialize video_ to nullptrJacopo Mondi
When the vivid module used to test buffer importing is not loaded, the test correctly bails out, but during the clean up procedure tries to access the video_ field, which, if not correctly initialized to nullptr contains random values and accessing it causes a segfault. Fix this by initializing video_ field to nullptr to make sure it is properly handled in cleanup(). Fixes: e1a5873701a9 ("test: camera: Add buffer import and mapping test") Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2019-09-16Documentation: Fix warnings when compiling with Doygen 1.8.16Jacopo Mondi
Since doxygen version 1.8.16 the following warnings are reported: warning: Tag 'PERL_PATH' at line 2138 of file 'Documentation/Doxyfile.in' has become obsolete. This tag has been removed. warning: Tag 'MSCGEN_PATH' at line 2160 of file 'Documentation/Doxyfile.in' has become obsolete. This tag has been removed. Remove the two tags to fix the warnings. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2019-09-15libcamera: proxy: linux: Initialise pointer members at construction timeLaurent Pinchart
If the IPAProxyLinux constructor fails to locate the proxy worker, the socket_ and proc_ member pointers will be left uninitialised, leading the a crash in the destructor. Initialise them both to nullptr. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2019-09-15ipa: Generate the two dummy IPA modules from the same sourceLaurent Pinchart
The ipa_dummy.cpp and ipa_dummy_isolate.cpp only differ in the license reported in the IPAModuleInfo structure. Drop the second file and generate the two .so from ipa_dummy.cpp, with the license defined through the command line. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2019-09-15libcamera: Move list of private headers to src/libcamera/include/meson.buildLaurent Pinchart
The libcamera private headers are listed in src/libcamera/meson.build, while they are located in src/libcamera/include/. The lack of a meson.build in src/libcamera/include/ increases the risk of forgetting to add new headers to the libcamera_headers array. Fix it by moving it to src/libcamera/include/meson.build, and add the missing v4l2_controls.h entry. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2019-09-15libcamera: Move ipa includes to the same level as libcameraLaurent Pinchart
The ipa includes are located in include/libcamera/ipa/. This gives an incorrect impression that they are a sub-part of the rest of the libcamera API, while they are the API towards the IPA the same way that include/libcamera/ contains the API towards applications. To clarify this, move them to include/ipa/. The IPA headers are however still part of libcamera, so installing them to ${prefix}/include/ipa/ would make little sense. To fix this, move the application facing API to ${prefix}/include/libcamera/libcamera/ when installed, and the IPA to ${prefix}/include/libcamera/ipa/. When major versions of libcamera will be released, they could then be installed side by side in ${prefix}/include/libcamera-${version}/. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2019-09-14libcamera: Switch to the std::chrono APILaurent Pinchart
Replace the clock_gettime()-based API with durations expressed as integers with the std::chrono API. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2019-09-14libcamera: utils: Add clock helpersLaurent Pinchart
In preparation for standardisation of the std::chrono::steady_clock as the libcamera default clock, define aliases for the clock, duration and time point, and add helper functions to convert a duration to a timespec and a time point to a string. More helpers will be added later as needed. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2019-09-13qcam: Fix compilation errors with gcc-9 and Qt < 5.13Laurent Pinchart
gcc-9 has introduced a deprecated-copy warning that is triggered by Qt header files. The issue has been fixed in Qt 5.13. Fix compilation with earlier Qt versions by disabling the warning. In order to still benefit from the warning when possible, only disable it for gcc-9 and Qt < 5.13. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2019-09-13libcamera: device_enumerator_udev: Support entities sharing device nodesLaurent Pinchart
Some media devices, such as V4L2 M2M devices, share the same device node for multiple entities. The udev enumerator used to support this, but commit 6e620349009d ("libcamera: device_enumerator: fix udev media graph loading dependency") broke this. To fix the problem, rework the media device to V4L2 devices matching code. A new MediaDeviceDeps internal struct stores unmet device number dependencies for a media device, and is stored in a list of pending media devices. To avoid linear lookups, the dependencies are cached in a reverse map of device number to media device dependencies. Fixes: 6e620349009d ("libcamera: device_enumerator: fix udev media graph loading dependency") Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Tested-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
2019-09-13libcamera: device_enumerator_udev: Avoid double list lookupLaurent Pinchart
DeviceEnumeratorUdev::populateMediaDevice() searches for orphan devices in an std::list, and if found removes them using std::list::remove(). This ends up looking up the entry twice. Replace the remove() call with erase() to fix it. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
2019-09-13libcamera: device_enumerator_udev: Delay device node lookupLaurent Pinchart
When populating media devices, we look up device nodes for every entity in the media device, regardless of if the entity is present in the orphans list. This causes unnecessary lookups (that may also fail as the device node may not be ready yet at that time). Move the lookup at a later time, when the device node is actually needed. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
2019-09-13libcamera: device_enumerator: Move lookupDeviceNode() to child classesLaurent Pinchart
The lookupDeviceNode() method is declared as pure virtual in the base DeviceEnumerator class, but is only called by derived classes. Move it to the DeviceEnumeratorSysfs and DeviceEnumeratorUdev. This allows changing the udev version to take a dev_t instead of separate major/minor, as that's what both the caller and the callee end up using. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
2019-09-13Documentation: Exclude bound_method.{h,cpp}Laurent Pinchart
The bound method classes are not part of the public API, even though they need to be exposed to applications due to the Object and Signal template methods that use them. They are excluded from documentation generation through EXCLUDE_SYMBOLS, but the corresponding .h file is still listed in the generated documentation. Fix this by excluding the bound_method.{h,cpp} files themselves. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2019-09-13test: process: Extend timeout durationKieran Bingham
The process test runs for just 100mS. The spawned process runs for at least 50mS. Ordinarily this should allow plenty of time for both the process to be spawned and run, but when adding extra debug instrumentation, the processes can be slowed down, leading to a false negative test failure. Extend the timeout to 2 seconds to allow the short process to be run correctly - but use the now initialised exitStatus_ to exit the event loop as soon as the process has completed. Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2019-09-13test: process: Initialise member variablesKieran Bingham
The ProcessTest() declares member variables but leaves them unitialised. Set them appropriately from the constructor. Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2019-09-13test: process: Connect signal before launching processKieran Bingham
The procFinished event handler is registered after the process is started. This doesn't actually create any race, as the finished signal is emitted after a SIGCHLD is caught and handled through the ProcessManager and processed by the event loop. However, to follow the best practice that resources should be acquired before performing an action, connect the finished signal before starting the process. Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2019-09-09src/libcamera/meson.build: link with atomic when neededFabrice Fontaine
On some architectures, atomic binutils are provided by the libatomic library from gcc. Linking with libatomic is therefore necessary, otherwise the build fails with: src/libcamera/4ab8042@@camera@sha/message.cpp.o: In function `libcamera::Message::registerMessageType()': message.cpp:(.text+0x178): undefined reference to `__atomic_fetch_add_4' collect2: error: ld returned 1 exit status This is often for example the case on sparc v8 32 bits. Fixes: - http://autobuild.buildroot.org/results/1f0b8338f5f39aa86b9d432598dae2f53c5f7c84 Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> [Kieran: Updated commit message to refer to build failure on current master, rather than the old code currently built by buildroot] Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2019-09-08libcamera: device_enumerator: fix udev media graph loading dependencyPaul Elder
When a MediaDevice is enumerated and populated by the DeviceEnumeratorUdev, there is a possibility that the member device nodes of the media graph would not be ready (either not created, or without proper permissions set by udev yet). The MediaDevice is still passed up to the pipeline handler, where an attempt to access the device nodes will fail in EPERM. This whole issue is especially likely to happen when libcamera is run at system init time. To fix this, we first split DeviceEnumerator::addDevice() into three methods: - createDevice() to simply create the MediaDevice - populateMediaDevice() to populate the MediaDevice - addDevice() to pass the MediaDevice up to the pipeline handler DeviceEnumeratorSysfs calls these methods in succession, similar to what it did before when they were all together as addDevice(). DeviceEnumeratorUdev additionally keeps a map of MediaDevices to a list of pending device nodes (plus some other auxillary maps), and a simple list of orphan device nodes. If a v4l device node is ready and there does not exist any MediaDevice node for it, then it goes to the orphan list, otherwise it is initialized and removed from the pending list of the corresponding MediaDevice in the dependency map. When a MediaDevice is populated via DeviceEnumeratorUdev::populateMediaDevice(), it first checks the orphan list to see if the device nodes it needs are there, otherwise it tries to initialize the device nodes and if it fails, then it adds the device nodes it wants to its list in the dependency map. This allows MediaDevice instances to be created and initialized properly with udev when v4l device nodes in the media graph may not be ready when the MediaDevice is populated. Signed-off-by: Paul Elder <paul.elder@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2019-09-05android: camera_device: Report available keysJacopo Mondi
Report the list of available static metadata tags (characteristicKeys), of supported controls (requestKeys) and produced metadata (resultKeys) in the static metadata pack. Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2019-09-05android: camera_device: Fix handling of request templateJacopo Mondi
According to the Android camera HALv3 documentation, the request template metadata pack should not be modified after it is returned to the camera stack from the HAL. Currently, the same metadata pack is used for all types of template request, without updating the capture intent there contained to match the requested template type, as correctly reported by the cros_camera_test test application. In order to avoid modifying the single request template already returned to the camera stack in order to update the capture intent it contains, create a map that associates a dedicated template to each supported capture type. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2019-09-05android: camera_device: Use the new CameraMetadata helper classLaurent Pinchart
Simplify the implementation of metadata handling in the CameraDevice class by using the new CameraMetadata helper class. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2019-09-05android: Add CameraMetadata helper classLaurent Pinchart
The new CameraMetadata helper class wraps the Android camera_metadata_t to simplify its usage. Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2019-09-05android: camera_device: Use precise sizes for request templateJacopo Mondi
Use more opportune sizes, manually calculated, for the generated request template. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2019-09-05android: camera_device: Add missing tags in request templateJacopo Mondi
Add two missing tags from the request template generated by the HAL. The tags are reported as missing by the cros_camera_test tool. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2019-09-05android: camera_device: Remove tags from request templateJacopo Mondi
Remove metadata tags wrongly added to the request template constructed by the libcamera HAL. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2019-09-05android: camera_device: Use correct sizes for static metadataJacopo Mondi
Use more opportune sizes for the static metadata pack, and for the dynamic metadata sizes which where wrongly set to use the ones defined for the static pack. Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2019-09-05android: camera_device: Add missing static metadataJacopo Mondi
Add all the static metadata keys part of the BC (backward compatible) metadata group, which represent the minimum requirement for devices supporting the LIMITED hardware level. Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2019-08-29libcamera: v4l2_device: Fix error messages in setControls()Niklas Söderlund
The error messages are copied from getControls() without being updated for the set controls case, fix this. Fixes: eb068f4e67eedacd ("libcamera: v4l2_device: Implement get and set controls") Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Acked-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2019-08-22meson: Rename 'tests' option to 'test'Laurent Pinchart
The 'tests' option enables compilation of tests. On Gentoo and Chrome OS, the corresponding package USE flag is named 'test'. Rename the option to 'test' to bring it in line. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2019-08-22meson: Define _FORTIFY_SOURCE for optimised buildsLaurent Pinchart
_FORTIFY_SOURCE adds useful checks during compilation. The option is enabled by default by gcc on all non-optimised builds (as it requires -O1 or higher). Enable it explicitly for clang. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2019-08-22libcamera: process: Properly ignore unused result with gccLaurent Pinchart
Casting the return value of a function to (void) doesn't ignore the unused result warning with gcc. Use a #pragma to fix this properly, to fix compilation with _FORTIFY_SOURCE. Fixes: df23ab95f3d7 ("libcamera: process: fix compilation on Chromium OS") Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
2019-08-21libcamera: v4l2_videodevice: Support MPLANE M2M devicesKieran Bingham
M2M devices using MPLANE API will set the V4L2_CAP_VIDEO_M2M_MPLANE capability flag. Ensure that this is matched when checking for Multiplanar capabilities. Fixes: 4f7625cca7ec ("libcamera: v4l2_videodevice: Support M2M devices") Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2019-08-19android: camera_device: Store static metadata in cacheLaurent Pinchart
The CameraDevice class has a mechanism to cache static metadata, but doesn't use it. Fix it. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2019-08-19libcamera: camera_manager: Construct CameraManager instances manuallyLaurent Pinchart
The CameraManager class is not supposed to be instantiated multiple times, which led to a singleton implementation. This requires a global instance of the CameraManager, which is destroyed when the global destructors are executed. Relying on global instances causes issues with cleanup, as the order in which the global destructors are run can't be controlled. In particular, the Android camera HAL implementation ends up destroying the CameraHalManager after the CameraManager, which leads to use-after-free problems. To solve this, remove the CameraManager::instance() method and make the CameraManager class instantiable directly. Multiple instances are still not allowed, and this is enforced by storing the instance pointer internally to be checked when an instance is created. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2019-08-19android: camera_hal_manager: Clean up resources when terminatingLaurent Pinchart
The CameraHalManager starts the libcamera CameraManager and creates CameraProxy instances for each camera in the system. Clean up those resources when the CameraHalManager terminates. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2019-08-19android: camera_hal_manager: Remove unused close() methodLaurent Pinchart
The CameraHalManager::close() method isn't used, remove it. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2019-08-19android: camera_hal_manager: Stop thread when destroyingLaurent Pinchart
The CameraHalManager starts a thread that is never stopped. This leads to the thread being destroyed while running, which causes a crash. Fix this by stopping the thread and waiting for it to finish in the destructor of the CameraHalManager. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2019-08-19android: Pass Camera shared pointer to CameraProxy by const referenceLaurent Pinchart
The CameraProxy is constructed with a Camera instance passed through a shared pointer. It forwards it to the CameraDevice constructor, which takes a reference used for the sole purpose of making an internal copy of the shared pointer. Both constructors can thus take a const reference instead of a value or a mutable reference. This optimises the constructors slightly. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2019-08-19test: camera: Use the CameraManager from the CameraTest base classLaurent Pinchart
Make the camera manager a protected field of the CameraTest class, and use it instead of CameraManager::instance() in the camera tests. This prepares for the removal of CameraManager::instance(). Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2019-08-19test: Get event dispatcher from current threadLaurent Pinchart
For all tests that don't otherwise require access to the camera manager, get the event dispatcher from the current thread instead of the camera manager. This prepares for the removal of CameraManager::instance(). Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>