145 Commits

Author SHA1 Message Date
Kamil Trzcinski
19302b93d1 links: to avoid overrun limit amount of buffers enqueued on v4l2 2023-02-24 22:22:00 +01:00
Kamil Trzcinski
d57feb0359 links: enqueue and dequeue buffers in sync (output and capture) asynchronously 2023-02-24 22:22:00 +01:00
Kamil Trzcinski
34ff200ceb camera: add force_active option to make camera always hot 2023-02-24 22:20:36 +01:00
Kamil Trzcinski
6d30270b16 links: improve the implementation (simplify it) 2023-02-24 22:20:36 +01:00
Kamil Trzcinski
49c7d01789 buffer: if last buffer is discovered restart streaming 2023-02-24 19:59:56 +01:00
Kamil Trzcinski
6c14564e75 device: check hw methods being present 2023-02-24 19:59:54 +01:00
Kamil Trzcinski
27b93facc9 libcamera: add frame timeout 2023-02-24 19:59:54 +01:00
Kamil Trzcinski
f2ad561734 libcamera: find camera by partial match (if not found) 2023-02-24 19:59:53 +01:00
Kamil Trzcinski
cd7ab4c281 buffer_lock: Fix buffer lock checking for streaming 2023-02-24 19:59:52 +01:00
Kamil Trzcinski
f7f4eba9ca links: use n_output_lists for link_t 2023-02-24 19:59:51 +01:00
Kamil Trzcinski
2413c7f4fc device: remove decoder_started 2023-02-24 19:59:46 +01:00
Kamil Trzcinski
6ce1869f71 camera: improve resolution scaling to avoid extra rescallers 2023-02-24 19:59:42 +01:00
Kamil Trzcinski
425bbe7745 links: remove link_validate_buffer 2023-02-24 11:40:46 +01:00
Kamil Trzcinski
456eec5847 links: rename buf_list to capture_list or output_list 2023-02-24 11:40:46 +01:00
Kamil Trzcinski
8042743e1a links: allow to log processing statistics 2023-02-24 11:30:26 +01:00
Kamil Trzcinski
8b3ed0b599 links: introduce link_pool_t 2023-02-24 11:27:07 +01:00
Kamil Trzcinski
7c375f70a6 links: rename source and sinks to capture_list and output_lists 2023-02-24 11:26:49 +01:00
Kamil Trzcinski
bf14b915eb links: remove unused global links_init and links_step 2023-02-24 00:26:44 +01:00
Kamil Trzcinski
53bfdcfedf decoder: improve support for rescaller to prefer NV12 2023-02-24 00:08:37 +01:00
Kamil Trzcinski
c139a13ec2 camera: add camera_get_scaled_resolution 2023-02-24 00:07:57 +01:00
Kamil Trzcinski
b1c6fb33ec device: remove device_consume_event and device_set_decoder_start 2023-02-24 00:07:24 +01:00
Kamil Trzcinski
86e89a6291 device: add helpers for count enqueued 2023-02-24 00:07:19 +01:00
Kamil Trzcinski
23491cef49 libcamera: dynamically add new configurations
device: add `buffer_type_t`
2023-02-23 19:17:11 +01:00
Kamil Trzcinski
21ce78a277 camera: improve FPS handling 2023-02-23 19:17:07 +01:00
Kamil Trzcinski
a24e100983 camera: fix output matches to find close-by resolutions 2023-02-23 19:16:11 +01:00
Kamil Trzcinski
529d72b105 libcamera: configure RAW to force correct resolution 2023-02-22 23:04:39 +01:00
Kamil Trzcinski
e2e5762b2b libcamera: improve configuration management 2023-02-22 23:04:39 +01:00
Kamil Trzcinski
10545b6b7a camera: match resolutions close to 32x32 blocks (when re-using) 2023-02-22 21:49:06 +01:00
Kamil Trzcinski
aafd120af3 libcamera: support Rectangle and Size types
Fixes: https://github.com/ayufan/camera-streamer/issues/28
Replaces: https://github.com/ayufan/camera-streamer/pull/30
2023-02-22 18:07:27 +01:00
Kamil Trzcinski
72dfc2e731 camera: limit max rescaller size to 1920 (default for Raspi) 2023-02-22 17:32:47 +01:00
Kamil Trzcinski
3bc447c772 camera: add support for V4L2_PIX_FMT_SBGGR10P 2023-02-22 17:32:47 +01:00
Kamil Trzcinski
c9600d1253 device: allow to use dummy as a way to test streamer
This adds loopback tests via `tests/`
2023-02-22 17:32:47 +01:00
Kamil Trzcinski
2e9718fea7 device: make device_open_buffer_list_capture to use buffer_format_t 2023-02-22 17:32:46 +01:00
Kamil Trzcinski
168181afa5 camera: find device handling the format by format order 2023-02-22 17:32:46 +01:00
Kamil Trzcinski
0c244a61c8 Pass sizeimage to ensure that allocated buffers are of a correct size 2023-02-22 17:32:46 +01:00
Kamil Trzciński
ca08adb62f Add -snapshot.height, -stream.height and -video.height 2023-02-22 17:32:46 +01:00
Kamil Trzcinski
4ff6bee511 device: some random fixes 2023-02-21 23:39:38 +01:00
Kamil Trzcinski
fc8255ed90 device: ensure that sink has capture that can process output - otherwise skip
It appears that if output is enqueued, but there's no capture for longer period
this results EPIPE from mmal.
2023-02-21 23:39:38 +01:00
Kamil Trzcinski
ba369ce597 Log how much memory was used 2023-02-21 15:28:03 +01:00
Kamil Trzciński
3839f051af Refactor buffer_lock_capture method 2022-10-29 11:46:25 +02:00
Kamil Trzciński
79e9bca11f Discover H264 keyframes on dequeue 2022-10-29 11:36:58 +02:00
MK3S+ Printer
ec2ed5e392 Fix top bar for H264 stream 2022-10-29 11:10:49 +02:00
MK3S+ Printer
f0d16f491c Add CAMERA_DECODER_DEBUG to capture debug output of capture into /tmp 2022-10-29 11:10:36 +02:00
MK3S+ Printer
8359362204 Improve decoder selected formats to choose ones with best quality first 2022-10-29 11:10:16 +02:00
Kamil Trzcinski
6bdb33ff3a Fix buffer leakage on camera reconnect 2022-10-25 16:37:30 +02:00
Kamil Trzcinski
5801152b03 Add /video to automatically give HLS to supported browser 2022-09-24 10:40:52 +02:00
noahwilliamsson
d36c2d590c device/libcamera: fix libcamera::Span API breakage (#11)
After upgrading from the July, 2022 releases of Raspberry Pi's libcamera packages to the Aug, 2022 releases, compilation fails with:

```
g++ -std=c++17 -MMD -Werror -Wall -g -I/tmp/camera-streamer -D_GNU_SOURCE -DUSE_FFMPEG -DUSE_LIBCAMERA -I/usr/include/libcamera -DUSE_RTSP -I/usr/include/liveMedia -I/usr/include/groupsock -I/usr/include/BasicUsageEnvironment -I/usr/include/UsageEnvironment -DUSE_LIBDATACHANNEL -Ithird_party/libdatachannel/include -Ithird_party/libdatachannel/deps/json/include -c -o device/libcamera/device.o device/libcamera/device.cc
In file included from device/libcamera/libcamera.hh:22,
                 from device/libcamera/device.cc:2:
/usr/include/libcamera/libcamera/controls.h: In instantiation of 'void libcamera::ControlList::set(const libcamera::Control<T>&, const std::initializer_list<_Up>&) [with T = libcamera::Span<const long int, 2>; V = long int]':
device/libcamera/device.cc:126:100:   required from here
/usr/include/libcamera/libcamera/controls.h:403:14: error: no matching function for call to 'libcamera::ControlValue::set<libcamera::Span<const long int, 2> >(libcamera::Span<const long int, 18446744073709551615>)'
  403 |   val->set<T>(Span<const typename std::remove_cv_t<V>>{ value.begin(), value.size() });
      |   ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/libcamera/libcamera/controls.h:178:7: note: candidate: 'template<class T, typename std::enable_if<((! libcamera::details::is_span<U>::value) && (! std::is_same<std::__cxx11::basic_string<char>, typename std::remove_cv< <template-parameter-1-1> >::type>::value)), std::nullptr_t>::type <anonymous> > void libcamera::ControlValue::set(const T&)'
  178 |  void set(const T &value)
      |       ^~~
/usr/include/libcamera/libcamera/controls.h:178:7: note:   template argument deduction/substitution failed:
/usr/include/libcamera/libcamera/controls.h:177:30: error: no type named 'type' in 'struct std::enable_if<false, std::nullptr_t>'
  177 |            std::nullptr_t> = nullptr>
      |                              ^~~~~~~
/usr/include/libcamera/libcamera/controls.h:190:7: note: candidate: 'template<class T, typename std::enable_if<(libcamera::details::is_span<U>::value || std::is_same<std::__cxx11::basic_string<char>, typename std::remove_cv< <template-parameter-1-1> >::type>::value), std::nullptr_t>::type <anonymous> > void libcamera::ControlValue::set(const T&)'
  190 |  void set(const T &value)
      |       ^~~
/usr/include/libcamera/libcamera/controls.h:190:7: note:   template argument deduction/substitution failed:
/usr/include/libcamera/libcamera/controls.h:403:14: note:   cannot convert 'libcamera::Span<const long int, 18446744073709551615>((& value)->std::initializer_list<long int>::begin(), (& value)->std::initializer_list<long int>::size())' (type 'libcamera::Span<const long int, 18446744073709551615>') to type 'const libcamera::Span<const long int, 2>&'
  403 |   val->set<T>(Span<const typename std::remove_cv_t<V>>{ value.begin(), value.size() });
      |   ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
```

After introducing this change (see raspberrypi/libcamera-apps PR 342), it works with both versions mentioned below:

```
$ apt list --installed
libcamera-apps/now 0~git20220707+35266e8-1 arm64 [installed,upgradable to: 0~git20220830+1bf0cca-1]
libcamera-dev/now 0~git20220705+f30ad033-1 arm64 [installed,upgradable to: 0~git20220826+3fad116f-1]
libcamera-tools/now 0~git20220705+f30ad033-1 arm64 [installed,upgradable to: 0~git20220826+3fad116f-1]
libcamera0/now 0~git20220705+f30ad033-1 arm64 [installed,upgradable to: 0~git20220826+3fad116f-1]
```
2022-09-06 13:52:47 +02:00
Kamil Trzciński
878ad95598 Fix bug introduced by 3c818772d1 (diff-6eb6287b4cf8659acef0809a500f07e26feac08a34f12b17a8897127a5d84ab8) 2022-09-04 19:19:13 +00:00
Kamil Trzcinski
6eaaa57d0b Do not use ISP to produce concurrently low resolution 2022-09-04 20:30:27 +02:00
Kamil Trzcinski
5031cd99f6 Register buffer_lock as a global output 2022-09-04 20:30:26 +02:00