Commit Graph

26025 Commits

Author SHA1 Message Date
Jeff Epler
a8614a61dc ParallelImageCapture: Add continuous capture on espressif
By having a pair of buffers, the capture hardware can fill one buffer while
Python code (including displayio, etc) operates on the other buffer.  This
increases the responsiveness of camera-using code.

On the Kaluga it makes the following improvements:
 * 320x240 viewfinder at 30fps instead of 15fps using directio
 * 240x240 animated gif capture at 10fps instead of 7.5fps

As discussed at length on Discord, the "usual end user" code will look like
this:

    camera = ...

    with camera.continuous_capture(buffer1, buffer2) as capture:
        for frame in capture:
            # Do something with frame

However, rather than presenting a context manager, the core code consists of
three new functions to start & stop continuous capture, and to get the next
frame.  The reason is twofold.  First, it's simply easier to implement the
context manager object in pure Python.  Second, for more advanced usage, the
context manager may be too limiting, and it's easier to iterate on the right
design in Python code.  In particular, I noticed that adapting the
JPEG-capturing programs to use continuous capture mode needed a change in
program structure.

The camera app was structured as
```python
while True:
    if shutter button was just pressed:
        capture a jpeg frame
    else:
        update the viewfinder
```

However, "capture a jpeg frame" needs to (A) switch the camera settings and (B)
capture into a different, larger buffer then (C) return to the earlier
settings. This can't be done during continuous capture mode. So just
restructuring it as follows isn't going to work:

```python
with camera.continuous_capture(buffer1, buffer2) as capture:
    for frame in capture:
        if shutter button was just pressed:
            capture a jpeg frame, without disturbing continuous capture mode
        else:
            update the viewfinder
```

The continuous mode is only implemented in the espressif port; others
will throw an exception if the associated methods are invoked.  It's not
impossible to implement there, just not a priority, since these micros don't
have enough RAM for two framebuffer copies at any resonable sizes.

The capture code, including single-shot capture, now take mp_obj_t in the
common-hal layer, instead of a buffer & length.  This was done for the
continuous capture mode because it has to identify & return to the user the
proper Python object representing the original buffer.  In the Espressif port,
it was convenient to implement single capture in terms of a multi-capture,
which is why I changed the singleshot routine's signature too.
2021-11-03 11:02:46 -05:00
Dan Halbert
38c381633b
Merge pull request #5534 from jepler/add-rainbowio
Add rainbowio
2021-11-02 21:57:08 -04:00
Dan Halbert
4770120c60
Merge pull request #5536 from jepler/better_boot_out_txt
main: redesign boot_out.txt writing
2021-11-02 21:55:00 -04:00
Jeff Epler
63e01cde77 we decided not to add rainbowio on simmel 2021-11-02 19:01:05 -05:00
Jeff Epler
efffb62b36 truncate boot_out.txt if it's long
Now this boot.py:
```py
for i in range(1000):
    print(i)
```
creates a 512-byte boot_out.txt that ends
```
88
89
...
```
2021-11-02 18:23:42 -05:00
Dan Halbert
ec7fc6fb5e
Merge pull request #5539 from kattni/link-fix
Update link.
2021-11-02 16:10:36 -04:00
Kattni Rembor
94fa322ebe Update link. 2021-11-02 13:52:40 -04:00
microDev
41dcfda593
update wifi_monitor_make_new and arg parsing 2021-11-02 19:17:48 +05:30
microDev
27b137f931
Merge branch 'main' into monitor-mode 2021-11-02 13:56:56 +05:30
microDev
4e207853f0
rearrange hostname 2021-11-02 12:33:11 +05:30
microDev
95172cf3ce
add monitor class
Co-authored-by: anecdata <16617689+anecdata@users.noreply.github.com>
2021-11-02 12:32:09 +05:30
Jeff Epler
694af3dd23 main: redesign boot_out.txt writing
New design:
 * capture output to a vstr
 * compare the complete vstr to boot_out.txt
 * rewrite if not a complete match

This is resilient against future changes to the automatic
text written to boot_out.txt.

This also fixes rewriting boot_out.txt in the case where
boot.py prints something.

Perhaps it also saves a bit of code space. Some tricks:
 * no need to close a file in read mode
 * no need to switch on/off USB write access, going down to the
   oofatfs layer doesn't check it anyway
2021-11-01 23:05:34 -05:00
Jeff Epler
18eaee9beb reenable RAINBOWIO on these boards 2021-11-01 12:52:13 -05:00
microDev
0f9448d1a4
Merge pull request #5533 from CytronTechnologies/reverse-pr-4981
Reversal of PR #4981
2021-11-01 18:24:16 +05:30
Kong Wai Weng
36459c8a5a Fixed whitespace issues. 2021-11-01 16:50:46 +08:00
Kong Wai Weng
e0332c1e49 Using 4x spaces instead of a tab. 2021-11-01 16:47:02 +08:00
Kong Wai Weng
b64ec36418 Using GP0 as default LED pin. 2021-11-01 16:43:13 +08:00
Kong Wai Weng
0034472778 Reversal of PR #4981. GPIO25 on Maker Pi RP2040 is not connected to anything. 2021-11-01 16:26:40 +08:00
Jeff Epler
df3f54f24a
Merge pull request #5532 from weblate/weblate-circuitpython-main
Translations update from Weblate
2021-10-31 16:36:03 -05:00
Hosted Weblate
b26e6a04c5
Merge remote-tracking branch 'origin/main' 2021-10-31 12:37:11 +01:00
hexthat
ef95ff3fa5
Translated using Weblate (Chinese (Pinyin))
Currently translated at 100.0% (1007 of 1007 strings)

Translation: CircuitPython/main
Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/zh_Latn/
2021-10-31 12:37:11 +01:00
microDev
0a02974505
Merge pull request #5531 from Senuros/main
Several more german translations added
2021-10-31 17:07:04 +05:30
Senuros
409092b180 several more german translations added 2021-10-31 06:17:31 +01:00
Dan Halbert
8657c6a2f5
Merge pull request #5528 from kattni/update-troubleshooting
Update Troubleshooting.
2021-10-29 23:45:52 -04:00
Kattni Rembor
f5ac0ac3e1 Update to point to guide. 2021-10-29 18:15:48 -04:00
Kattni Rembor
7b0660ff92 Update Troubleshooting. 2021-10-29 16:40:51 -04:00
Scott Shawcroft
575843a761
Merge pull request #5527 from Senuros/main
Added some german translations
2021-10-29 10:09:05 -07:00
Senuros
7734e85eeb Added some german translations 2021-10-29 17:55:23 +02:00
Dan Halbert
9e96a3cedc
Merge pull request #5524 from tannewt/fix_nrf_ble_crash
Split listdir entries across two packets
2021-10-28 22:08:35 -04:00
Dan Halbert
fd85ebf88a
Merge pull request #5523 from kattni/led-docs-update
Update D13 to LED, add PWM example.
2021-10-28 15:11:28 -04:00
Scott Shawcroft
bf0bef9684
Split listdir entries across two packets
when the MTU of the BLE connection is smaller than the 28 bytes of
the header. (The smallest possible MTU is 20.)

Fixes #5511
2021-10-28 10:57:16 -07:00
Kattni Rembor
a63af1d04a Update D13 to LED, add PWM example. 2021-10-28 13:30:51 -04:00
Jeff Epler
e733876574 dither in x/y, not i/j
The easiest thing to implement was to use the i/j numbers, but they were not
directly related to image x/y coordinates.  This may slow things down a tiny
little bit, but it looks much better.
2021-10-27 16:52:56 -05:00
Jeff Epler
ef4623dfae gifio: Add dithered output
It's not a great dither, but we're low on CPU time sooo
2021-10-27 10:54:31 -05:00
Jeff Epler
dc00226143 gifio: write block data directly into output buffer 2021-10-27 09:38:07 -05:00
Dan Halbert
a8b69f2852
Merge pull request #5518 from jepler/deleted-board-ci
account for deleted boards
2021-10-26 17:49:13 -04:00
Dan Halbert
62cd878e0c
Merge pull request #5517 from ladyada/main
add a nuuuuuboard
2021-10-26 17:48:44 -04:00
Dan Halbert
c61ab864da
Update ports/espressif/boards/adafruit_feather_esp32s2/board.c 2021-10-26 17:14:23 -04:00
Limor "Ladyada" Fried
037d893923
Update ports/espressif/boards/adafruit_feather_esp32s2/pins.c
Co-authored-by: Dan Halbert <halbert@halwitz.org>
2021-10-26 15:55:18 -04:00
Limor "Ladyada" Fried
ccb6c5e5a9
Update ports/espressif/boards/adafruit_feather_esp32s2/mpconfigboard.h
Co-authored-by: Dan Halbert <halbert@halwitz.org>
2021-10-26 15:55:11 -04:00
Limor "Ladyada" Fried
5e59fa65ec
Update ports/espressif/boards/adafruit_feather_esp32s2/mpconfigboard.mk
Co-authored-by: Dan Halbert <halbert@halwitz.org>
2021-10-26 15:54:49 -04:00
Jeff Epler
b881aec4c5 disable gifio on meowbit 2021-10-26 14:24:11 -05:00
lady ada
613f314857 will delete later 2021-10-26 15:09:05 -04:00
Jeff Epler
30f3cf31e2 account for deleted boards 2021-10-26 14:06:07 -05:00
lady ada
ba4e9797c7 add a nuuuuuboard 2021-10-26 15:05:10 -04:00
Jeff Epler
7d6ac96001 GifWriter: improve efficiency
* Increase colorspace conversion efficiency.
   This not only avoids a function call, it avoids the time-consuming
   switch statement in conver_pixel (replacing it with a single
   conditional on the byteswap flag + accounting for BGR/RGB during
   palette creation)

 * Buffer all the bytes of a single frame together.  By reducing
   low level write calls we get a decent speed increase even though
   it increases data-shuffling a bit.

Together with some other changes that enable "double buffered" camera
capture, this gets me to 8.8fps capturing QVGA (320x240) gifs and
11fps capturing 240x240 square gifs.
2021-10-26 11:11:28 -05:00
Jeff Epler
3e020a73a8 Disable gifio if no displayio & for small boards
Technically all gifio needs from displayio is the definition of
colorspaces, but let's just disable it for now.
2021-10-26 08:54:18 -05:00
Jeff Epler
8c7760b1a6 don't include gifio on samd21 boards 2021-10-26 08:54:18 -05:00
Jeff Epler
081f636c17 Fix typing 2021-10-26 08:54:18 -05:00
Jeff Epler
b0203381db Update module list in test 2021-10-26 08:54:18 -05:00