doc:appunti:hardware:sjcam-8pro-custom-firmware
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
doc:appunti:hardware:sjcam-8pro-custom-firmware [2022/06/28 08:15] – [YUV Profiles] niccolo | doc:appunti:hardware:sjcam-8pro-custom-firmware [2023/06/09 07:30] – [My Custom firmware] niccolo | ||
---|---|---|---|
Line 3: | Line 3: | ||
The **SCAM SJ8 Pro** is a mid-range priced action camera, equipped with chips well known for their quality: the **Ambarella H22 S85** and the **Sony IMX377** sensor. Still in 2022 it was well placed between the expensives GoPros and the plethora low-end budget cameras. Unfortunately the support from SJCAM was ended in 2020 with the **firwmare 1.3.2** still affected by various bugs, image quality and video codec settings **definitely to be improved**. Also the Adnroid app is disappointing. | The **SCAM SJ8 Pro** is a mid-range priced action camera, equipped with chips well known for their quality: the **Ambarella H22 S85** and the **Sony IMX377** sensor. Still in 2022 it was well placed between the expensives GoPros and the plethora low-end budget cameras. Unfortunately the support from SJCAM was ended in 2020 with the **firwmare 1.3.2** still affected by various bugs, image quality and video codec settings **definitely to be improved**. Also the Adnroid app is disappointing. | ||
- | Fortunately enough, being equipped with the Ambarella chip, it was possible to **reverse engineer** some of its firmware and API. Creating a custom firmware you can imporove | + | Fortunately enough, being equipped with the Ambarella chip, it was possible to **reverse engineer** some of its firmware and API. Creating a custom firmware you can improve |
The main honorable mention goes to the hacker **VMax**, which created the software **[[https:// | The main honorable mention goes to the hacker **VMax**, which created the software **[[https:// | ||
- | See my other page about the SJCAM SJ8 Pro action camera: **[[sjcam-8pro]]**, **[[sjcam-8pro-ambarella-firmware-modding]]** | + | **WARNING**: |
+ | |||
+ | See my other page about the SJCAM SJ8 Pro action camera: | ||
+ | |||
+ | * **[[sjcam-8pro]]** | ||
+ | * **[[sjcam-8pro-ambarella-firmware-modding]]** | ||
+ | * **[[sjcam-8pro-ambarella-wifi-api]]** | ||
===== My Custom firmware ===== | ===== My Custom firmware ===== | ||
Line 18: | Line 24: | ||
* Increased **keyframes** rates (reducing GOP-N): one keyframe every 1/4 second instead of 1 per second. | * Increased **keyframes** rates (reducing GOP-N): one keyframe every 1/4 second instead of 1 per second. | ||
* **YUV color profiles**: all the three profiles **Default**, | * **YUV color profiles**: all the three profiles **Default**, | ||
- | * Fixed **exposition** profiles: **Center**, **Spot** and **Average**. | + | * Fixed **exposition** profiles: **Center**, **Spot** and **Average** |
* Changed **gamma curves**: added some brightness to shadows with an overall gamma coefficient of 1.10 and removed a slight red casting when using Auto White Balance in early hours of sunny days. All the gamma tables for video modes are the same, for photo modes we leaved a linear gamma (1.0) for R, G and B. | * Changed **gamma curves**: added some brightness to shadows with an overall gamma coefficient of 1.10 and removed a slight red casting when using Auto White Balance in early hours of sunny days. All the gamma tables for video modes are the same, for photo modes we leaved a linear gamma (1.0) for R, G and B. | ||
* Change **chroma curves** to reduce banding in blue sky and to attenuate over-saturated colors. | * Change **chroma curves** to reduce banding in blue sky and to attenuate over-saturated colors. | ||
- | * Changed power-on, power-off and photo shutter **sounds** with louder ones. | + | * Changed power-on, power-off and photo shutter **sounds** with **louder** ones. |
* Disabled **LRV** (low resolution videos) recording. | * Disabled **LRV** (low resolution videos) recording. | ||
Line 60: | Line 66: | ||
^ My Custom SJ8Pro | ^ My Custom SJ8Pro | ||
+ | **WARNING**: | ||
==== YUV Profiles ==== | ==== YUV Profiles ==== | ||
For my taste the two YUV profiles proviede by the stock 1.3.2 firmware are both too exagerated: the **Vivid - SJCAM** profile has **too much contrast** and colors are **too much saturated**, | For my taste the two YUV profiles proviede by the stock 1.3.2 firmware are both too exagerated: the **Vivid - SJCAM** profile has **too much contrast** and colors are **too much saturated**, | ||
- | In my custom firmware I reduced contrast and saturation by changing gamma and chroma tables | + | In my custom firmware I reduced contrast and saturation by changing gamma and chroma tables, so I decided to make **all the YUV profiles neutral and equals**. In this manner I cannot select by mistake an useless profile, like the factory //Flat//. This choice was preferred also due the fact that the user interface does not correctly report the YUV profile currently selected; if you select //Flat// you still read //SJCAM - Vivid// into the menu. A neutral YUV profile is obtained by setting the **multiplier to 1024** (which means a slope of 1.0) and the **offset to zero**. |
^ | ^ | ||
Line 84: | Line 91: | ||
* Group **%%*/0%%** is not used at all. | * Group **%%*/0%%** is not used at all. | ||
- | * Groups | + | * When using **dynamic ISO modes**, groups |
+ | * When using **fixed ISO modes** it seems instead that groups **%%*/ | ||
* It seems that in some **particular circumstances** (some color component of */255 is **very dark**) the gamma curve is replaced automatically with something different, may be a **negative** (descending) curve. | * It seems that in some **particular circumstances** (some color component of */255 is **very dark**) the gamma curve is replaced automatically with something different, may be a **negative** (descending) curve. | ||
Line 94: | Line 102: | ||
* The camera produces rather **fair colors** when set with **neutral gamma** tables and **neutral YUV** profiles. | * The camera produces rather **fair colors** when set with **neutral gamma** tables and **neutral YUV** profiles. | ||
* The stock firmware have somewhat **exagerated saturation and contrast**, just simply reducing them produces a better video quality (in my humble opinion). | * The stock firmware have somewhat **exagerated saturation and contrast**, just simply reducing them produces a better video quality (in my humble opinion). | ||
- | * The **non-automatic white balance** settings (e.g. sunny, cloudy, etc.) produce some un-natural color casting. It is possibile to correct it using **gamma** or **YUV**, but if you fix e.g. the sunny white balance, you will break the others, including the //auto// mode. | + | * The **non-automatic white balance** settings (e.g. sunny, cloudy, etc.) produce some un-natural color casting. It is possibile to correct it using **gamma** or **YUV**, but if you fix e.g. the sunny white balance, you will break the others, including the auto mode. |
Finally I decided to favor the automatic white balance setting: first of all I set a gamma value of **1.10** on all the RGB channels to reduce shadows, then I added some gray balance using the gamma values **(0.973, 1.013, 0.960)** for the three RGB channels. This correction penalizes the images taken in the central hours of the day, but in my opinion it is better for the ones taken in the morning and in the afternoon. | Finally I decided to favor the automatic white balance setting: first of all I set a gamma value of **1.10** on all the RGB channels to reduce shadows, then I added some gray balance using the gamma values **(0.973, 1.013, 0.960)** for the three RGB channels. This correction penalizes the images taken in the central hours of the day, but in my opinion it is better for the ones taken in the morning and in the afternoon. | ||
The curves so calculated were loaded for all the video modes tables: */255, */128 and */0 (despite the latter seems not used at all). For photo modes I leaved a linear gamma (no transformation at all), because I prefer to do color balancing in post-processing. | The curves so calculated were loaded for all the video modes tables: */255, */128 and */0 (despite the latter seems not used at all). For photo modes I leaved a linear gamma (no transformation at all), because I prefer to do color balancing in post-processing. | ||
+ | |||
+ | As you can see from the following graphs, my custom gamma curves have just a little deviation from the **neutral 1.0 gamma**: | ||
+ | |||
+ | {{.: | ||
+ | {{.: | ||
+ | {{.: | ||
+ | |||
+ | The gamma curves of the **original 1.3.2 firmware** do instead **boost the image contrast** by darkening the shadows and brightening the highlights: | ||
+ | |||
+ | {{.: | ||
+ | {{.: | ||
+ | {{.: | ||
==== Chroma curves ==== | ==== Chroma curves ==== | ||
I think that the original chroma curves programmed into the SJ8 Pro are responsible for the over-saturated colors and for some annoying banding often visible in the blue sky. I changed the curves reducing smoothly the graph toward the highlights for the table */128 (used for evenly exposed parts of the image) and increasing smoothly the graph starting from the shadows for the table */0 (used for over-exposed parts of the image). Based on my testing the table */255 is responsible for very low chrominance applied only for heavy under-exposed images, so I leaved the original graph, which is a straight line all at the maximum value. | I think that the original chroma curves programmed into the SJ8 Pro are responsible for the over-saturated colors and for some annoying banding often visible in the blue sky. I changed the curves reducing smoothly the graph toward the highlights for the table */128 (used for evenly exposed parts of the image) and increasing smoothly the graph starting from the shadows for the table */0 (used for over-exposed parts of the image). Based on my testing the table */255 is responsible for very low chrominance applied only for heavy under-exposed images, so I leaved the original graph, which is a straight line all at the maximum value. | ||
+ | |||
+ | In the following images you can see my **custom chroma curves**: | ||
+ | |||
+ | {{.: | ||
+ | {{.: | ||
+ | {{.: | ||
+ | |||
+ | You can compare them with the **stock chroma curves**, from the **original 1.3.2 firmware**: | ||
+ | |||
+ | {{.: | ||
+ | {{.: | ||
+ | {{.: | ||
+ | |||
+ | As far I can understand, the original curves **%%*/ | ||
==== Sounds ==== | ==== Sounds ==== |
doc/appunti/hardware/sjcam-8pro-custom-firmware.txt · Last modified: 2023/06/09 07:38 by niccolo