17. Change log¶
17.1. Release 1.13 (2017-02-25)¶
1.13 includes numerous bug fixes and several major enhancements, mostly in the
mmalobj
layer:
- 10 second captures should now work with the V2 module as the default
CAPTURE_TIMEOUT
has been increased to 60 seconds (#284) - A bug in
copy_to()
caused it to copy nothing when it encountered “unknown” timestamps in the stream (#302, #319, #357) - A silly typo in code used by
PiRGBArray
was fixed (#321) - A bug in
capture_continuous()
which caused duplicate frames in the output was fixed (#311) - Bitrate limits were removed on MJPEG, and full checking of H264 bitrates and macroblocks/s was implemented (#315)
- A bug was fixed in the
sensor_mode
attribute which prevented it from being set after construction (#324) - A bug in the custom encoders example was fixed (#337)
- Fixed a rare race condition that occurred when multiple splitter ports were in use (#344)
- Recording overlays is now possible, but currently requires using the lower
level
mmalobj
layer (#196) - Capturing YUV arrays via
PiYUVArray
is faster, thanks to GitHub user goosst (#308) - Added the ability to specify a restart interval for JPEG encoding (#369)
- Added a property allowing users to manually specify a
framerate_range
for the camera (#374) - Added support for partially transparent overlays in RGBA format (#199)
- Improved MJPEG web-streaming recipe, many thanks to GitHub user BigNerd95! (#375)
Substantial work has also gone into improving the documentation. In particular:
- The Advanced Recipes chapter has been thoroughly re-worked and I would encourage anyone using the camera for Computer Vision purposes to re-read that chapter
- The Camera Hardware chapter has been extended to include a thorough introduction to the low level operation of the camera module. This is important for understanding the limitations and peculiarities of the system
- Anyone interested in using a lower level API to control the camera (which includes capabilities like manipulating frames before they hit the video encoder) should read the API - mmalobj chapter
- Finally, some work was done on enhancing the PDF and EPub versions of the documentation. These should now be much more useable in hard-copy and on e-readers
17.2. Release 1.12 (2016-07-03)¶
1.12 is almost entirely a bug fix release:
- Fixed issue with unencoded captures in Python 3 (#297)
- Fixed several Python 3 bytes/unicode issues that were related to #297 (I’d erroneously run the picamera test suite twice against Python 2 instead of 2 and 3 when releasing 1.11, which is how these snuck in)
- Fixed multi-dimensional arrays for overlays under Python 3
- Finished alternate CIE constructors for the
Color
class
17.3. Release 1.11 (2016-06-19)¶
1.11 on the surface consists mostly of enhancements, but underneath includes a major re-write of picamera’s core:
- Direct capture to buffer-protocol objects, such as numpy arrays (#241)
- Add
request_key_frame()
method to permit manual request of an I-frame during H264 recording; this is now used implicitly bysplit_recording()
(#257) - Added
timestamp
attribute to query camera’s clock (#212) - Added
framerate_delta
to permit small adjustments to the camera’s framerate to be performed “live” (#279) - Added
clear()
andcopy_to()
methods toPiCameraCircularIO
(#216) - Prevent setting attributes on the main
PiCamera
class to ease debugging in educational settings (#240) - Due to the core re-writes in this version, you may require cutting edge
firmware (
sudo rpi-update
) if you are performing unencoded captures, unencoded video recording, motion estimation vector sampling, or manual sensor mode setting. - Added property to control preview’s
resolution
separately from the camera’sresolution
(required for maximum resolution previews on the V2 module - #296).
There are also several bug fixes:
- Fixed basic stereoscopic operation on compute module (#218)
- Fixed accessing framerate as a tuple (#228)
- Fixed hang when invalid file format is specified (#236)
- Fixed multiple bayer captures with
capture_sequence()
andcapture_continuous()
(#264) - Fixed usage of “falsy” custom outputs with
motion_output
(#281)
Many thanks to the community, and especially thanks to 6by9 (one of the firmware developers) who’s fielded seemingly endless questions and requests from me in the last couple of months!
17.4. Release 1.10 (2015-03-31)¶
1.10 consists mostly of minor enhancements:
- The major enhancement is the addition of support for the camera’s flash driver. This is relatively complex to configure, but a full recipe has been included in the documentation (#184)
- A new intra_refresh attribute is added to the
start_recording()
method permitting control of the intra-frame refresh method (#193) - The GPIO pins controlling the camera’s LED are now configurable. This is mainly for any compute module users, but also for anyone who wishes to use the device tree blob to reconfigure the pins used (#198)
- The new annotate V3 struct is now supported, providing custom background
colors for annotations, and configurable text size. As part of this work a
new
Color
class was introduced for representation and manipulation of colors (#203) - Reverse enumeration of frames in
PiCameraCircularIO
is now supported efficiently (without having to convert frames to a list first) (#204) - Finally, the API documentation has been re-worked as it was getting too large to comfortably load on all platforms (no ticket)
17.5. Release 1.9 (2015-01-01)¶
1.9 consists mostly of bug fixes with a couple of minor new features:
- The camera’s sensor mode can now be forced to a particular setting upon
camera initialization with the new
sensor_mode
parameter toPiCamera
(#165) - The camera’s initial framerate and resolution can also be specified as
keyword arguments to the
PiCamera
initializer. This is primarily intended to reduce initialization time (#180) - Added the
still_stats
attribute which controls whether an extra statistics pass is made when capturing images from the still port (#166) - Fixed the
led
attribute so it should now work on the Raspberry Pi model B+ (#170) - Fixed a nasty memory leak in overlay renderers which caused the camera to run out of memory when overlays were repeatedly created and destroyed (#174) * Fixed a long standing issue with MJPEG recording which caused camera lockups when resolutions greater than VGA were used (#47 and #179)
- Fixed a bug with incorrect frame metadata in
PiCameraCircularIO
. Unfortunately this required breaking backwards compatibility to some extent. If you use this class and rely on the frame metadata, please familiarize yourself with the newcomplete
attribute (#177) - Fixed a bug which caused
PiCameraCircularIO
to ignore the splitter port it was recording against (#176) - Several documentation issues got fixed too (#167, #168, #171, #172, #182)
Many thanks to the community for providing several of these fixes as pull requests, and thanks for all the great bug reports. Happy new year everyone!
17.6. Release 1.8 (2014-09-05)¶
1.8 consists of several new features and the usual bug fixes:
- A new chapter on detecting and correcting deprecated functionality was added to the docs (#149)
- Stereoscopic cameras are now tentatively supported on the Pi compute module. Please note I have no hardware for testing this, so the implementation is possibly (probably!) wrong; bug reports welcome! (#153)
- Text annotation functionality has been extended; up to 255 characters are now
possible, and the new
annotate_frame_num
attribute adds rendering of the current frame number. In addition, the newannotate_background
flag permits a dark background to be rendered behind all annotations for contrast (#160) - Arbitrary image overlays can now be drawn on the preview using the new
add_overlay()
method. A new recipe has been included demonstrating overlays from PIL images and numpy arrays. As part of this work the preview system was substantially changed; all older scripts should continue to work but please be aware that most preview attributes are now deprecated; the newpreview
attribute replaces them (#144) - Image effect parameters can now be controlled via the new
image_effect_params
attribute (#143) - A bug in the handling of framerates meant that long exposures (>1s) weren’t operating correctly. This should be fixed, but I’d be grateful if users could test this and let me know for certain (Exif metadata reports the configured exposure speed so it can’t be used to determine if things are actually working) (#135)
- A bug in 1.7 broke compatibility with older firmwares (resulting in an error message mentioning “mmal_queue_timedwait”). The library should now on older firmwares (#154)
- Finally, the confusingly named
crop
attribute was changed to a deprecated alias for the newzoom
attribute (#146)
17.7. Release 1.7 (2014-08-08)¶
1.7 consists once more of new features, and more bug fixes:
- Text overlay on preview, image, and video output is now possible (#16)
- Support for more than one camera on the compute module has been added, but hasn’t been tested yet (#84)
- The
exposure_mode
'off'
has been added to allow locking down the exposure time, along with some new recipes demonstrating this capability (#116) - The valid values for various attributes including
awb_mode
,meter_mode
, andexposure_mode
are now automatically included in the documentation (#130) - Support for unencoded formats (YUV, RGB, etc.) has been added to the
start_recording()
method (#132) - A couple of analysis classes have been added to
picamera.array
to support the new unencoded recording formats (#139) - Several issues in the
PiBayerArray
class were fixed; this should now work correctly with Python 3, and thedemosaic()
method should operate correctly (#133, #134) - A major issue with multi-resolution recordings which caused all recordings to stop prematurely was fixed (#136)
- Finally, an issue with the example in the documentation for custom encoders was fixed (#128)
Once again, many thanks to the community for another round of excellent bug reports - and many thanks to 6by9 and jamesh for their excellent work on the firmware and official utilities!
17.8. Release 1.6 (2014-07-21)¶
1.6 is half bug fixes, half new features:
- The
awb_gains
attribute is no longer write-only; you can now read it to determine the red/blue balance that the camera is using (#98) - The new read-only
exposure_speed
attribute will tell you the shutter speed the camera’s auto-exposure has determined, or the shutter speed you’ve forced with a non-zero value ofshutter_speed
(#98) - The new read-only
analog_gain
anddigital_gain
attributes can be used to determine the amount of gain the camera is applying at a couple of crucial points of the image processing pipeline (#98) - The new
drc_strength
attribute can be used to query and set the amount of dynamic range compression the camera will apply to its output (#110) - The intra_period parameter for
start_recording()
can now be set to 0 (which means “produce one initial I-frame, then just P-frames”) (#117) - The burst parameter was added to the various
capture()
methods; users are strongly advised to read the cautions in the docs before relying on this parameter (#115) - One of the advanced recipes in the manual (“splitting to/from a circular
stream”) failed under 1.5 due to a lack of splitter-port support in the
circular I/O stream class. This has now been rectified by adding a
splitter_port parameter to the constructor of
PiCameraCircularIO
(#109) - Similarly, the
array extensions
introduced in 1.5 failed to work when resizers were present in the pipeline. This has been fixed by adding a size parameter to the constructor of all the custom output classes defined in that module (#121) - A bug that caused picamera to fail when the display was disabled has been squashed (#120)
As always, many thanks to the community for another great set of bug reports!
17.9. Release 1.5 (2014-06-11)¶
1.5 fixed several bugs and introduced a couple of major new pieces of functionality:
- The new
picamera.array
module provides a series of custom output classes which can be used to easily obtain numpy arrays from a variety of sources (#107) - The motion_output parameter was added to
start_recording()
to enable output of motion vector data generated by the H.264 encoder. A couple of new recipes were added to the documentation to demonstrate this (#94) - The ability to construct custom encoders was added, including some examples in the documentation. Many thanks to user Oleksandr Sviridenko (d2rk) for helping with the design of this feature! (#97)
- An example recipe was added to the documentation covering loading and conversion of raw Bayer data (#95)
- Speed of unencoded RGB and BGR captures was substantially improved in both Python 2 and 3 with a little optimization work. The warning about using alpha-inclusive modes like RGBA has been removed as a result (#103)
- An issue with out-of-order calls to
stop_recording()
when multiple recordings were active was resolved (#105) - Finally, picamera caught up with raspistill and raspivid by offering a friendly error message when used with a disabled camera - thanks to Andrew Scheller (lurch) for the suggestion! (#89)
17.10. Release 1.4 (2014-05-06)¶
1.4 mostly involved bug fixes with a couple of new bits of functionality:
- The sei parameter was added to
start_recording()
to permit inclusion of “Supplemental Enhancement Information” in the output stream (#77) - The
awb_gains
attribute was added to permit manual control of the auto-white-balance red/blue gains (#74) - A bug which cause
split_recording()
to fail when low framerates were configured was fixed (#87) - A bug which caused picamera to fail when used in UNIX-style daemons, unless the module was imported after the double-fork to background was fixed (#85)
- A bug which caused the
frame
attribute to fail when queried in Python 3 was fixed (#80) - A bug which caused raw captures with “odd” resolutions (like 100x100) to fail was fixed (#83)
Known issues:
- Added a workaround for full-resolution YUV captures failing. This isn’t a complete fix, and attempting to capture a JPEG before attempting to capture full-resolution YUV data will still fail, unless the GPU memory split is set to something huge like 256Mb (#73)
Many thanks to the community for yet more excellent quality bug reports!
17.11. Release 1.3 (2014-03-22)¶
1.3 was partly new functionality:
- The bayer parameter was added to the
'jpeg'
format in the capture methods to permit output of the camera’s raw sensor data (#52) - The
record_sequence()
method was added to provide a cleaner interface for recording multiple consecutive video clips (#53) - The splitter_port parameter was added to all capture methods and
start_recording()
to permit recording multiple simultaneous video streams (presumably with different options, primarily resize) (#56) - The limits on the
framerate
attribute were increased after firmware #656 introduced numerous new camera modes including 90fps recording (at lower resolutions) (#65)
And partly bug fixes:
17.12. Release 1.2 (2014-02-02)¶
1.2 was mostly a bug fix release:
- A bug introduced in 1.1 caused
split_recording()
to fail if it was preceded by a video-port-based image capture (#49) - The documentation was enhanced to try and full explain the discrepancy between preview and capture resolution, and to provide some insight into the underlying workings of the camera (#23)
- A new property was introduced for configuring the preview’s layer at runtime although this probably won’t find use until OpenGL overlays are explored (#48)
17.13. Release 1.1 (2014-01-25)¶
1.1 was mostly a bug fix release:
17.14. Release 1.0 (2014-01-11)¶
In 1.0 the major features added were:
- Debian packaging! (#12)
- The new
frame
attribute permits querying information about the frame last written to the output stream (number, timestamp, size, keyframe, etc.) (#34, #36) - All capture methods (
capture()
et al), and thestart_recording()
method now accept aresize
parameter which invokes a resizer prior to the encoding step (#21) - A new
PiCameraCircularIO
stream class is provided to permit holding the last n seconds of video in memory, ready for writing out to disk (or whatever you like) (#39) - There’s a new way to specify raw captures - simply use the format you require
with the capture method of your choice. As a result of this, the
raw_format
attribute is now deprecated (#32)
Some bugs were also fixed:
- GPIO.cleanup is no longer called on
close()
(#35), and GPIO set up is only done on first use of theled
attribute which should resolve issues that users have been having with using picamera in conjunction with GPIO - Raw RGB video-port based image captures are now working again too (#32)
As this is a new major-version, all deprecated elements were removed:
- The continuous method was removed; this was replaced by
capture_continuous()
in 0.5 (#7)
17.15. Release 0.8 (2013-12-09)¶
In 0.8 the major features added were:
- Capture of images whilst recording without frame-drop. Previously, images
could be captured whilst recording but only from the still port which
resulted in dropped frames in the recorded video due to the mode switch. In
0.8,
use_video_port=True
can be specified on capture methods whilst recording video to avoid this. - Splitting of video recordings into multiple files. This is done via the new
split_recording()
method, and requires that thestart_recording()
method was called with inline_headers set to True. The latter has now been made the default (technically this is a backwards incompatible change, but it’s relatively trivial and I don’t anticipate anyone’s code breaking because of this change).
In addition a few bugs were fixed:
- Documentation updates that were missing from 0.7 (specifically the new video recording parameters)
- The ability to perform raw captures through the video port
- Missing exception imports in the encoders module (which caused very confusing errors in the case that an exception was raised within an encoder thread)
17.16. Release 0.7 (2013-11-14)¶
0.7 is mostly a bug fix release, with a few new video recording features:
- Added
quantisation
andinline_headers
options tostart_recording()
method - Fixed bugs in the
crop
property - The issue of captures fading to black over time when the preview is not running has been resolved. This solution was to permanently activate the preview, but pipe it to a null-sink when not required. Note that this means rapid capture gets even slower when not using the video port
- LED support is via RPi.GPIO only; the RPIO library simply doesn’t support it at this time
- Numerous documentation fixes
17.17. Release 0.6 (2013-10-30)¶
In 0.6, the major features added were:
- New
'raw'
format added to all capture methods (capture()
,capture_continuous()
, andcapture_sequence()
) to permit capturing of raw sensor data - New
raw_format
attribute to permit control of raw format (defaults to'yuv'
, only other setting currently is'rgb'
) - New
shutter_speed
attribute to permit manual control of shutter speed (defaults to 0 for automatic shutter speed, and requires latest firmware to operate - usesudo rpi-update
to upgrade) - New “Recipes” chapter in the documentation which demonstrates a wide variety of capture techniques ranging from trivial to complex
17.18. Release 0.5 (2013-10-21)¶
In 0.5, the major features added were:
- New
capture_sequence()
method continuous()
method renamed tocapture_continuous()
. Old method name retained for compatiblity until 1.0.- use_video_port option for
capture_sequence()
andcapture_continuous()
to allow rapid capture of JPEGs via video port - New
framerate
attribute to control video and rapid-image capture frame rates - Default value for
ISO
changed from 400 to 0 (auto) which fixesexposure_mode
not working by default - intraperiod and profile options for
start_recording()
In addition a few bugs were fixed:
- Byte strings not being accepted by
continuous()
- Erroneous docs for
ISO
Many thanks to the community for the bug reports!
17.19. Release 0.4 (2013-10-11)¶
In 0.4, several new attributes were introduced for configuration of the preview window:
preview_alpha
preview_fullscreen
preview_window
Also, a new method for rapid continual capture of still images was introduced:
continuous()
.
17.20. Release 0.3 (2013-10-04)¶
The major change in 0.3 was the introduction of custom Exif tagging for captured images, and fixing a silly bug which prevented more than one image being captured during the lifetime of a PiCamera instance.
17.21. Release 0.2¶
The major change in 0.2 was support for video recording, along with the new
resolution
property which replaced the separate
preview_resolution
and stills_resolution
properties.