GitHub repository: techyian/MMALSharp
Description: C# wrapper to Broadcom's MMAL with an API to the Raspberry Pi camera.
Topics: c-sharp, camera, dotnet, dotnetcore, exif, mono, netcore, photography, raspberry-pi, raspberry-pi-camera

Version 0.6.0: tag_name: v0.6.0
body: I'm delighted to announce the general release of MMALSharp v0.6. The main focus of this release has been to improve the API around feeding data to encoder/decoder components from an input stream, asynchronous API improvements and bug fixes. In addition, the library now uses `Microsoft.Extensions.Logging.Abstractions` to provide package agnostic logging.

MMALSharp can now be used without a camera module using the `MMALStandalone` API. This API is very similar to the `MMALCamera` API and is used exclusively for feeding data to encoder/decoder components from an input stream. In addition, this API allows components to be connected to eachother so you can perform operations between encoder/decoder components in the same pipeline. A splitter component can also be used which makes the library very flexible to your needs.

Below are the tickets resolved in this release:

#43 - Motion detection: Phase 1
#47 - Implement "vc.ril.isp" component
#81 - Circular buffer
#85 - Set framerate range based on shutter speed
#93 - Store motion vectors to separate file
#95 - File to Splitter
#98 - Abstract logging to interface
#99 - Add raw video capture helper method
#101 - Timelapse Resolution 0x0.
#102 - Timeout and Timelapse helper method issues
#109 - Problem using InMemoryCaptureHandler to Capture "Stream"
#110 - InMemoryCaptureHandler clear on PostProcess
#114 - Still port burst mode global config
#116 - SonarCloud integration
#121 - InputStreamCaptureHandler read value check
#128 - CapturePictureTimeout generates some partial corrupt image files

I'd like to say a big thank you to everyone who continues to use the library, and also to @snakefoot who provided assistance with the logging migration. 
Version 0.5.1: tag_name: v0.5.1
body: Version 0.5.1 is a small release featuring a couple of enhancements which were requested:

#88 Allow user defined port type when constructing component
#90 Fixed/custom name on taken pictures

There are now 3 new examples in the wiki to reflect the work done for #88: [Raw video capture from resizer component](https://github.com/techyian/MMALSharp/wiki/Advanced-Examples#Video-From-Resizer), [Raw video capture from splitter component](https://github.com/techyian/MMALSharp/wiki/Advanced-Examples#raw-video-capture-from-splitter-component) and [Raw video from resizer with splitter component](https://github.com/techyian/MMALSharp/wiki/Advanced-Examples#raw-video-from-resizer-with-splitter-component). This work has greatly improved how far you can push the MMAL pipeline.
Version 0.5.0: tag_name: v0.5.0
body: Happy new year! 

I'm excited to announce the availability of v0.5.0 of MMALSharp. After 6 months in development, this release has undergone lots of stability work and improvements to the API which makes it much easier to understand and provides a good framework for future improvements.

To summarise the tickets closed for this release:

#32 - Encode/Decode video from file
#34 - Allow video colour space change
#59 - Strip Bayer filter data from frame
#60 - JPEG thumbnails
#68 - Investigate async context usage
#69 - Allow annotation justify and offset
#75 - Rapid image capture
#77 - Image processing part 1
#78 - Standalone functionality without camera

I'd like to focus on a few of these items to provide some context on their importance. 


### Encode/Decode video from file

This particular ticket has had a status of "In Progress" for months now and it has taken conversations with @6by9 over at the Raspberry Pi forums to find out what the issue was. It was eventually released that I was wrongly saving the MMAL_EVENT_FORMAT_CHANGED event data to the decoded file which then caused issues when re-encoding. This is an advanced piece of functionality, and I'm not sure how many people will find it useful, but I felt it was a positive and rewarding feature to include for this release.

### Image processing part 1

Since starting the project, I've been on a journey myself learning more about image processing, and it's clear there's still a long way to go. For this release I have introduced some basic image post-processing functionality which is mainly based around matrix convolutions. The API is quite stable and it's a cool part of MMALSharp to play around with, get stuck in and please post back any feedback!

### Rapid image capture

Earlier in 2018 when I made an announcement about MMALSharp on the Raspberry Pi forums, I received a reply about sending image frame data to the Accord Framework (check it out if you've not heard of it). It was disappointing that the user was only getting around 1-2fps and that was with low resolution frames. It was clear that the time taken to capture images off the camera's still port was bottlenecking what was being processed by Accord. A cool feature of MMAL is that you can use the camera's video port to rapidly capture image frames at a lesser quality and this functionality is now available in v0.5.0!

### Investigate async context usage

Until recently, MMALSharp was relying on a library called Nito.AsyncEx to provide an asynchronous countdown event so I could close down ports once processing had finished. Unfortunately this library was causing some intermittent issues with the native callbacks and would lock up MMALSharp. This library has since been removed and I've added a workaround - so far so good. If anyone notices any lockups, please let me know!

### Other notes

Please read the ticket #70 which documents some breaking changes for this release. I will be updating the wiki over the next few days.

Finally I'd like to thank the contributors for helping out with this release:

@daniel-lerch 
@wadewomersley
@nrandell 
Version 0.4.4 - Patch: tag_name: v0.4.4
body: This is the first patch release following the official v0.4 release a few weeks ago. It is a minor release, however includes an important fix to the setting of the bitrate value for Video Encoder components; there was a regression in this area, and as a result, the bitrate was being set to a default value set natively by the component. In addition, a few fixes have been made to the `TakePictureTimeout` and `TakePictureTimelapse` methods, this is due to them previously calling `TakePicture` internally which caused an additional 2 second delay each run of the camera. These methods now do the manual component creation themselves instead of relying on the `TakePicture` method.


Version 0.4 - Official: tag_name: v0.4
body: Version 0.4 is now officially released on GitHub and is our most stable release yet. Unit tests have undergone a lot of stabilising work and new tests have been added, raising our suite to 176 tests.

Below is a list of issues resolved during the course of this release:

#12 - Colour conversions
#25 - MMAL Connection callbacks
#26 - Allow adjust framerate for image capture
#35 - Include XML Documentation in NuGet Package
#44 - Preview component configuration
#45 - Safer pointer allocation
#48 - Allow sensor mode change
#52 - BufferNumRecommended and BufferSizeRecommended not being set
#56 - Video capture hang
#57 - Fliename error with FrameToVideo utility (v0.4.2)

There was also a number of areas of the public API that was improved upon, details of this can be found in #40 - API changes for 0.4.

We also published to NuGet for the first time a few weeks ago, with the official release being tracked as v0.4.3.

Thanks to everyone who is using the library, please keep the feedback coming!

Ian.
Version 0.3 - Official: tag_name: v0.3
body: Version 0.3 is finally here. After almost a year since the last official release, there has been a lot of work to stabilise the framework and get the API to a state where it's easy to use for the end-user.

Below are the main issues tackled during this release:

#10 Splitter component
#11 Resizer component
#14 Improve logging
#16 .NET Core - EXIF & Annotation
#17 Add MMAL_PARAMETER_SUPPORTED_ENCODINGS check
#18 Encode/Decode image from raw file
#21 Video decoder component
#22 Image decoder component
#24 Render overlay
#28 TakePicture & TakeVideo to be self-contained
#29 FFmpeg RTMP streaming issues
#30 Update to .NET Standard 2.0
#33 Logging Config

The API has changed significantly since the last official release, and a lot of additional features provided by MMAL are now available in MMALSharp, including the Resize and Splitter components and also the ability to encode/decode image files directly from FileStreams.

I hope you enjoy the release and have fun using the latest release in your projects!
v0.2.1: tag_name: v0.2.1
body: Patch for v0.2. Video recording wasn't working as expected due to removing `ConfigureCamera` method. 
v0.2: tag_name: v0.2
body: Lots of new features for this version. The API has been redesigned which I feel works much better and is simpler to understand. 

Main features for this version:

1. Video capture providing H.264 and MJPEG encodings
2. Capture raw image data from still camera port
3. Playable video for elementary streams. This uses FFmpeg to put the stream into an AVI container, allowing it to be consumed by mainstream video players without manually forcing into a container.