philaphlous
Member
- Joined
- Jun 24, 2020
- Messages
- 33
- Reaction score
- 25
- Location
- Washington, District Of Columbia
- Country
- United States
Hey all,
I have renewed interest in my CT9500 crosstour action camera that I recently destroyed and now have a new one coming that should be here next week... I ripped off the shutter button and solder pad on the board so yea...its toast. So I have a new camera coming via ebay thankfully. It's super difficult to find the CT9500 and I'm not willing to look at other models. I've also invested in an Akaso V50x which should be coming and possibly a Campark V30. The common thing in all these cameras is they supposedly all use the Hi3559V200 chipset and I believe IMX458 image sensor. YEARS ago I attempted to purchase new M12 lenses to eliminate the fisheye/distortion with no success. Well apparently there's a few more companies that have come out since then and they now have some pretty good lenses.
Step 1: Lens Mod
I did a teardown back in 2020 and attempted to add some thermal pads to help dissipate heat from the Hi3559v200 chipset...it didn't work real well as the heat would just go to the screen. I have a copper sheet that I'm planning on creating a heatspreader for.
Both companies I've been able to find are on Digikey which gives me great confidence in their quality and shipping. Yes, they're more expensive but well all know you get what you pay for. The two companies I've found are Commonlands and EDATEC. EDATEC is chinese so obviously a much cheaper option. I went with 2 different lenses to test out from them first. I got the 2.8mm wide angle - https://edatec.cn/docs/m12-lens/230280-08/ds/ and I also got the 3.56mm lens https://edatec.cn/docs/m12-lens/230356-08/ds/ I'm thinking the image sensor is just too small to properly render wide angle well and that should be more reserved for bigger camera sensors. Awhile back I was only looking for lenses on aliexpress and ebay... I had no idea they existed elsewhere at other more reputable places. In addition, I didn't really understand focal length, F-stop, crop factor, etc. Now I do, so armed with that knowledge, I've been able to make much better purchase decisions, although the quality is still in question for these products, I now know what I'm getting and how that'll impact the image quality. the 2.8mm lens should be ~20mm focal length and the 3.56mm should be around 26mm. A regular iphone camera is around the 26mm FL so this should give me a reasonably decent image quality. I'm afraid to go any longer in FL as it'll start to impact my DOF and what's in/out of focus. Choosing a wide enough lens will ensure everything is in focus and it should be pretty easy to do manually focusing the M12 lens.
After this thought, backup a few years, right around covid times, this is when I picked up the CT9500 when it was still on amazon before they got kicked off. I was just starting to get into cameras. I picked up my first "real" camera, a Sony A6000. It was fantastic, I ended up getting the Sigma F1.4 trio. I started doing professional photography work, obtained my own business and now do professional work on the side of my full-time job. I sold that camera years ago and upgraded to what is referred to as possibly having the best full frame sensor available, the Sony A7RIII. I have a ton of prime lenses now too! 18mm, 28mm, 35mm, 50mm, 85mm, and 135mm.
Step 2: Firmware bitrate mod
I can't believe I'm saying this....but I've since used chatGPT to learn linux/python to extract firmware files I received from the manufacture back in 2020 when I asked for an updated firmware version. It's actually pretty amazing just copy/pasting into chatGPT and having it walk you through the code. I knew nothing about extracting firmware files and was quite intimidated by it...however, after a few days of work, I believe I have finally arrived at where I can modify the bitrates for video quality.
Step 1 will be to verify the bitrates for each video spec and compare that with the rates I'm seeing within the *.ini files from the extracted jffs2 file. This is what the file structure looks like:
I was first concentrating on extracting the media_app_zip.bin file. I did find some bitrate information in there, but nothing as it related to video parameters... it has audio codecs and audio bitrate though.... but I have since spent my time extracting the appfs.jffs2 file instead. After some trial and error getting jefferson to work within python3 I was able to get all the files extracted. The crazy nuts thing is the *.ini files are all plain text and I can easily modify them using notepad, notepad++... crazy right? So this is where I've arrived right now, I don't know how I'll be able to repackage the jffs2 file but that'll hopefully come later. What I have found is the following information contained within just one of the .ini files:
; ============= VideoMode Specified Configure =============
[common]
mediamode = "HI_PDT_MEDIAMODE_4K2K_30_REC"
; ============= VB Configure =============
[vb]
max_poolcnt = "4"
[vb.pool.0]
blk_size = "12493440"; 3840*2160*1.5+2160*24
blk_count = "8"
[vb.pool.1]
blk_size = "8709120";
blk_count = "3"
[vb.pool.2]
blk_size = "7962624"; align(3840*DISCropRatio,16)*align(2160*DISCropRatio,16)*1.5, default😀ISCropRatio=0.8; 3072*2160*1.5
blk_count = "2"
[vb.pool.3]
blk_size = "898560"; 1024*576*1.5+576*24
blk_count = "7"
; ============= Vcapture Configure =============
[vcap.0.sensor]
res_width = "3840"
res_height = "2160"
wdr_mode = "WDR_MODE_NONE";
max_framerate = "30"
sensor_mode = "0"
[vcap.0.device]
res_width = "3840"
res_height = "2160"
wdr_mode = "WDR_MODE_NONE";
[vcap.0.pipe.0]
src_framerate = "30"
dst_framerate = "30"
vi_vpss_mode = "VI_ONLINE_VPSS_OFFLINE"
[vcap.0.pipe.0.scene]
linear_param_idx = "0"
[vcap.0.pipe.0.isp]
res_width = "3840"
res_height = "2160"
framerate = "30"
[vcap.0.pipe.0.chn.0]
dst_res_width = "3840"
dst_res_height = "2160"
src_framerate = "30"
dst_framerate = "30"
; ============= Vprocessor Configure =============
[vpss.0]
max_width = "3840"
max_height = "2160"
src_framerate = "30"
dst_framerate = "30"
; ============= Vencoder Configure =============
[venc.0]
bufsize = "20971520 "; bytes
res_width = "3840"
res_height = "2160"
src_framerate = "30"
dst_framerate = "30"
gop = "30"
h265bitrate = "30720"; kbps 45Mbps
h264bitrate = "51200"; kbps 54Mbps
stat_time = "2"; second
mpf_size_width = "0"
mpf_size_height = "0"
[venc.1]
bufsize = "819200 "; bytes
res_width = "1024"
res_height = "576"
src_framerate = "30"
dst_framerate = "30"
gop = "30"
h265bitrate = "2048"; kbps
h264bitrate = "2048"
stat_time = "2"; second
mpf_size_width = "0"
mpf_size_height = "0"
[venc.2]
bufsize = "12441600"; bytes
res_width = "3840"
res_height = "2160"
src_framerate = "30"
dst_framerate = "10"
gop = "10"
h265bitrate = "0"; kbps
h264bitrate = "0"
stat_time = "2"; second
mpf_size_width = "960"
mpf_size_height = "540"
[venc.3]
bufsize = "32768"; bytes
res_width = "160"
res_height = "120"
src_framerate = "30"
dst_framerate = "30"
gop = "0"
h265bitrate = "0"; Kbps
h264bitrate = "0"
stat_time = "2"; second
mpf_size_width = "0"
mpf_size_height = "0"
So I'll keep digging into each of the ini files, there's about 45 of these files. Thankfully they reference in the name what configuration they are. I'll create an excel table with these bitrates and confirm them with actual video. Once I have that, I'll see if I can increase the bitrate. From what I can tell, Akaso V50x uses ~50Mbps which, from what I've seen, gives pretty good video quality. My plan to to hopefully get the bitrate upto around 75-100Mbps. My Sony A7RIII can only do 4k video either 60mbps or 100mbps, if I can match that quality, I'll be super happy! I still can't believe I found the bitrate values in plain text from the extract...after yearsssss of wondering if I can do it, I believe I'm super close to having custom firmware.
I digress, going back to ~2020, I was apart of the goprawn forum which I believe is now defunct... there were some users that were trying to help me out and I never really got anywhere with it. I spent so much time and got nowhere. Thankfully chatGPT, which wasn't even around then, has done some amazing work for me.
Step 3: Future - Image quality mod?
I'm not sure if its even possible to increase the quality of the images but I'm also going to go down this route in seeing if I can up the image quality. It was never bad to begin with but I'm wondering if there's anything to gain here. The sensor is only a 13MP sensor so the 16MP and 20MP images are interpolated images, just fake pixels added... I'm going to see if I can get full 13MP images instead of the default 12MP image size...I'm not sure if the image is resized or using a cropped section of the sensor, reducing image quality but I'll take a look at this after I verify that I can successfully modify the firmware for video first....
Stay tuned! I'm gitty with excitement that I might have actually finally arrived at a workable firmware mod. I was so jealous of all the users that could do the Yi 4k bitrate mods...I might have finally been able to do it for the hi3559v200 chipsets!
I have renewed interest in my CT9500 crosstour action camera that I recently destroyed and now have a new one coming that should be here next week... I ripped off the shutter button and solder pad on the board so yea...its toast. So I have a new camera coming via ebay thankfully. It's super difficult to find the CT9500 and I'm not willing to look at other models. I've also invested in an Akaso V50x which should be coming and possibly a Campark V30. The common thing in all these cameras is they supposedly all use the Hi3559V200 chipset and I believe IMX458 image sensor. YEARS ago I attempted to purchase new M12 lenses to eliminate the fisheye/distortion with no success. Well apparently there's a few more companies that have come out since then and they now have some pretty good lenses.
Step 1: Lens Mod
I did a teardown back in 2020 and attempted to add some thermal pads to help dissipate heat from the Hi3559v200 chipset...it didn't work real well as the heat would just go to the screen. I have a copper sheet that I'm planning on creating a heatspreader for.
Both companies I've been able to find are on Digikey which gives me great confidence in their quality and shipping. Yes, they're more expensive but well all know you get what you pay for. The two companies I've found are Commonlands and EDATEC. EDATEC is chinese so obviously a much cheaper option. I went with 2 different lenses to test out from them first. I got the 2.8mm wide angle - https://edatec.cn/docs/m12-lens/230280-08/ds/ and I also got the 3.56mm lens https://edatec.cn/docs/m12-lens/230356-08/ds/ I'm thinking the image sensor is just too small to properly render wide angle well and that should be more reserved for bigger camera sensors. Awhile back I was only looking for lenses on aliexpress and ebay... I had no idea they existed elsewhere at other more reputable places. In addition, I didn't really understand focal length, F-stop, crop factor, etc. Now I do, so armed with that knowledge, I've been able to make much better purchase decisions, although the quality is still in question for these products, I now know what I'm getting and how that'll impact the image quality. the 2.8mm lens should be ~20mm focal length and the 3.56mm should be around 26mm. A regular iphone camera is around the 26mm FL so this should give me a reasonably decent image quality. I'm afraid to go any longer in FL as it'll start to impact my DOF and what's in/out of focus. Choosing a wide enough lens will ensure everything is in focus and it should be pretty easy to do manually focusing the M12 lens.
After this thought, backup a few years, right around covid times, this is when I picked up the CT9500 when it was still on amazon before they got kicked off. I was just starting to get into cameras. I picked up my first "real" camera, a Sony A6000. It was fantastic, I ended up getting the Sigma F1.4 trio. I started doing professional photography work, obtained my own business and now do professional work on the side of my full-time job. I sold that camera years ago and upgraded to what is referred to as possibly having the best full frame sensor available, the Sony A7RIII. I have a ton of prime lenses now too! 18mm, 28mm, 35mm, 50mm, 85mm, and 135mm.
Step 2: Firmware bitrate mod
I can't believe I'm saying this....but I've since used chatGPT to learn linux/python to extract firmware files I received from the manufacture back in 2020 when I asked for an updated firmware version. It's actually pretty amazing just copy/pasting into chatGPT and having it walk you through the code. I knew nothing about extracting firmware files and was quite intimidated by it...however, after a few days of work, I believe I have finally arrived at where I can modify the bitrates for video quality.
Step 1 will be to verify the bitrates for each video spec and compare that with the rates I'm seeing within the *.ini files from the extracted jffs2 file. This is what the file structure looks like:
I was first concentrating on extracting the media_app_zip.bin file. I did find some bitrate information in there, but nothing as it related to video parameters... it has audio codecs and audio bitrate though.... but I have since spent my time extracting the appfs.jffs2 file instead. After some trial and error getting jefferson to work within python3 I was able to get all the files extracted. The crazy nuts thing is the *.ini files are all plain text and I can easily modify them using notepad, notepad++... crazy right? So this is where I've arrived right now, I don't know how I'll be able to repackage the jffs2 file but that'll hopefully come later. What I have found is the following information contained within just one of the .ini files:
; ============= VideoMode Specified Configure =============
[common]
mediamode = "HI_PDT_MEDIAMODE_4K2K_30_REC"
; ============= VB Configure =============
[vb]
max_poolcnt = "4"
[vb.pool.0]
blk_size = "12493440"; 3840*2160*1.5+2160*24
blk_count = "8"
[vb.pool.1]
blk_size = "8709120";
blk_count = "3"
[vb.pool.2]
blk_size = "7962624"; align(3840*DISCropRatio,16)*align(2160*DISCropRatio,16)*1.5, default😀ISCropRatio=0.8; 3072*2160*1.5
blk_count = "2"
[vb.pool.3]
blk_size = "898560"; 1024*576*1.5+576*24
blk_count = "7"
; ============= Vcapture Configure =============
[vcap.0.sensor]
res_width = "3840"
res_height = "2160"
wdr_mode = "WDR_MODE_NONE";
max_framerate = "30"
sensor_mode = "0"
[vcap.0.device]
res_width = "3840"
res_height = "2160"
wdr_mode = "WDR_MODE_NONE";
[vcap.0.pipe.0]
src_framerate = "30"
dst_framerate = "30"
vi_vpss_mode = "VI_ONLINE_VPSS_OFFLINE"
[vcap.0.pipe.0.scene]
linear_param_idx = "0"
[vcap.0.pipe.0.isp]
res_width = "3840"
res_height = "2160"
framerate = "30"
[vcap.0.pipe.0.chn.0]
dst_res_width = "3840"
dst_res_height = "2160"
src_framerate = "30"
dst_framerate = "30"
; ============= Vprocessor Configure =============
[vpss.0]
max_width = "3840"
max_height = "2160"
src_framerate = "30"
dst_framerate = "30"
; ============= Vencoder Configure =============
[venc.0]
bufsize = "20971520 "; bytes
res_width = "3840"
res_height = "2160"
src_framerate = "30"
dst_framerate = "30"
gop = "30"
h265bitrate = "30720"; kbps 45Mbps
h264bitrate = "51200"; kbps 54Mbps
stat_time = "2"; second
mpf_size_width = "0"
mpf_size_height = "0"
[venc.1]
bufsize = "819200 "; bytes
res_width = "1024"
res_height = "576"
src_framerate = "30"
dst_framerate = "30"
gop = "30"
h265bitrate = "2048"; kbps
h264bitrate = "2048"
stat_time = "2"; second
mpf_size_width = "0"
mpf_size_height = "0"
[venc.2]
bufsize = "12441600"; bytes
res_width = "3840"
res_height = "2160"
src_framerate = "30"
dst_framerate = "10"
gop = "10"
h265bitrate = "0"; kbps
h264bitrate = "0"
stat_time = "2"; second
mpf_size_width = "960"
mpf_size_height = "540"
[venc.3]
bufsize = "32768"; bytes
res_width = "160"
res_height = "120"
src_framerate = "30"
dst_framerate = "30"
gop = "0"
h265bitrate = "0"; Kbps
h264bitrate = "0"
stat_time = "2"; second
mpf_size_width = "0"
mpf_size_height = "0"
So I'll keep digging into each of the ini files, there's about 45 of these files. Thankfully they reference in the name what configuration they are. I'll create an excel table with these bitrates and confirm them with actual video. Once I have that, I'll see if I can increase the bitrate. From what I can tell, Akaso V50x uses ~50Mbps which, from what I've seen, gives pretty good video quality. My plan to to hopefully get the bitrate upto around 75-100Mbps. My Sony A7RIII can only do 4k video either 60mbps or 100mbps, if I can match that quality, I'll be super happy! I still can't believe I found the bitrate values in plain text from the extract...after yearsssss of wondering if I can do it, I believe I'm super close to having custom firmware.
I digress, going back to ~2020, I was apart of the goprawn forum which I believe is now defunct... there were some users that were trying to help me out and I never really got anywhere with it. I spent so much time and got nowhere. Thankfully chatGPT, which wasn't even around then, has done some amazing work for me.
Step 3: Future - Image quality mod?
I'm not sure if its even possible to increase the quality of the images but I'm also going to go down this route in seeing if I can up the image quality. It was never bad to begin with but I'm wondering if there's anything to gain here. The sensor is only a 13MP sensor so the 16MP and 20MP images are interpolated images, just fake pixels added... I'm going to see if I can get full 13MP images instead of the default 12MP image size...I'm not sure if the image is resized or using a cropped section of the sensor, reducing image quality but I'll take a look at this after I verify that I can successfully modify the firmware for video first....
Stay tuned! I'm gitty with excitement that I might have actually finally arrived at a workable firmware mod. I was so jealous of all the users that could do the Yi 4k bitrate mods...I might have finally been able to do it for the hi3559v200 chipsets!
Last edited: