零、目的
搞一下v3s或者s3的H264硬件编解码
一、硬件
1.1 V3S方案
1.1.1 主板
在x宝上搞了一块v3s的行车记录仪的板子,当时买的是20块钱板子+7块钱邮费,现在降价了 15块钱+7块钱邮费,真的是挺便宜的,
这里称之为小篮板吧。这个算是标准的v3s官方行车记录仪板子了。
但是没有这个小蓝板的原理图,下面用逆向跟万用表来搞一下基本的原理图。
引出打印串口看一下启动log,可以看出来用的是camdroid sdk,ar0330 mipi摄像头。
把小蓝板上的spi norflash拆下来,型号是ic25lp128,用编程器读出里面的8MByte的bin,
然后截取0x32000~0x39FFF这段保存成sys_config.bin,
再用sunxi-tools工具里面的bin2fex把sys_config.bin转成sys_config.fex,这个就是板子的实际引脚了,再用万用表验证一下几个关键的点就可以了。
没有引出网口来,直接飞线简单的引一下就行。
1.1.2.摄像头
通过打印跟逆向出来的sys_config.fex看到上面这块板子用是mipi摄像头ar0330,一搜太贵了,得换一个!
因为mipi的摄像头要用isp配置参数,就找了一下Tina SDK里面看到有现成的ov9732的isp配置(具体isp参数要跟着摄像头、lens来调)
ov9732是720p方案,30块吧。
1.1.3.lcd
sys_config.fex里面看到是t27p06,serial RGB,在x宝上买一2.7寸320*240,25块+25邮费,真黑!
我看DOPI开源摄像头(HI3516/HI3518),里面用的2.4的好像也是可以的,20+10。
1.1.4.spinand
把小蓝板的spi nor换成spi nand, MX35LF1GE4AB, x宝上的散件,6.3块,买了4片包邮
整体飞完线的样子就是这样了:15+7+30+25+25+ 6.3*4
喇叭、麦克、液晶、摄像头、网口、调试串口
1.2 S3方案:
华嵌的S3核心板,没有底板,之前搞过一个飞线板子调双网口。等搞完v3s的方案后再来搞吧。
二、SDK及参考资料
2.1 SDK
晕哥帖子里的 编译索智(Sochip) S3 SDK (zeta) 的37楼有对camdroid zeta 海豚派这几个里面编解码库的对比
手头上一个官方的camdroid SDK, 里面的摄像头、264编解码、rendor都有,就是有点复杂。
没有海豚派的sdk、没有S3 的 Zeta sdk,也就没有研究这两个。
我直接用了一个叫彩虹派的rainbow-pi-sdk的(晕哥帖子有介绍过这个板子),同时把小蓝板的spi nor换成spi nand, MX35LF1GE4AB, x宝上的散件,6.3块。
2.2例子及资料
这个rainbow-pi-sdk里面没有编解码的例子,但是有编解码的库,
编解码的例子的话网上搜到一个https://gitee.com/kinglaw/Zeta_Linux_Samples,其实就是Zeta的例子,只看demo_CaptureToEncoding
资料参考晕哥帖子里提到的【社区逆向出来的编解码器资料】: https://github.com/allwinner-zh/media-codec,
只看media-codec/sunxi-cedarx/doc/ 下的 Video Decoder API.pdf / Video Encoder API.pdf也就够了
三、调试说明
3.1摄像头ov9732
没有啥好改的,配上了驱动基本没问题,
使用rainbow-pi-sdk里面自带的app/demo-camera例子就能实现preview(摄像头直接显示到lcd),验证一下摄像头好用,(或者自己用v4l2写一个例子保存yuv文件也行)
注意lcd比较小,而且这个例子时用yuv软转rgb然后显示到lcd的
摄像头isp就先不调了。
3.2H264编码
Zeta_Linux_Samples/demo_CaptureToEncoding,修改一下编出264,主要是看一下sps、pps、i、p,为后面mediastreamer写适配库用。
待续...
离线
真棒,关注一下!
离线
感谢楼主分享,期待更新
离线
关注,感谢分享。有没有可能实现裸机的编解码。我看了下代码,貌似编码的插件源码一个都没有
离线
感谢楼主分享,期待更新, 并求行车记录仪购买链接.
问了一下店家,已经没有板子了。应该是拆机的散件。
离线
延时和压缩率怎么样
离线
真棒,非常优秀的项目!留个脚印先!
离线
我看着板子这么熟悉呢,之前我也买了两块,准备用来拆零件
离线
厉害了,N多看不懂,能看看,摄像头的拍照效果?
最近编辑记录 kesion (2020-08-16 22:24:52)
离线
优秀,屏幕是spi屏幕? 还是rgb 屏
离线
Rainbow-Pi的 SDK支持SPi-Nand启动吗?
问了一下店家,已经没有板子了。应该是拆机的散件。
离线
Rainbow-Pi的sdk是支持spinand的,用的MX35LF1GE4AB。
这几天使用华嵌的S3核心板尝试跑Rainbow-Pi的sdk,但是烧录不上(打包出img来后用tf卡烧录的方式),这个板子是用的emmc,用Rainbow-Pi的sdk没有在上面跑起来,然后把华嵌的S3核心板上emmc替换成MX35LF1GE4AB,也是烧录不上。
然后又尝试去搞一下tina,看到里面有一个r11跟s3 、v3s差不多,都是f35吧,试了一下也是烧录不上。
有哪位大侠用过s3跑官方sdk的么。
下面是华嵌的S3核心板上emmc替换成MX35LF1GE4AB,使用tf卡烧录时的log:
HELLO! BOOT0 is starting!
boot0 version : 4.0.0
boot0 commit : 5bde7999aad829824ac6b80a49dad0a502609447
fel flag = 0x00000000
rtc[0] value = 0x00000000
rtc[1] value = 0x00000000
rtc[2] value = 0x00000000
rtc[3] value = 0x00000000
rtc[4] value = 0x00000000
rtc[5] value = 0x00000000
rtc[6] value = 0x00000000
rtc[7] value = 0x00000000
DRAM DRIVE INFO: V0.7
DRAM Type = 3 (2:DDR2,3:DDR3,6:LPDDR2,7:LPDDR3)
DRAM CLK = 408 MHz
DRAM zq value: 000039bb
DRAM size = 128 MB
dram size =128
card boot number = 0
card no is 0
sdcard 0 line count 4
[mmc]: mmc driver ver 2014-12-10 21:20:39
[mmc]: ***Try SD card 0***
[mmc]: SD/MMC Card: 4bit, capacity: 3840MB
[mmc]: vendor: Man 00000000 Snr 12800003
[mmc]: product: APPSD
[mmc]: revision: 0.0
[mmc]: ***SD/MMC 0 init OK!!!***
sdcard 0 init ok
The size of uboot is 000ac000.
sum=aa12155c
src_sum=aa12155c
Succeed in loading uboot from sdmmc flash.
Ready to disable icache.
Jump to secend Boot.
[ 0.306]
U-Boot 2011.09-rc1-00000-g5bde799-dirty (Jun 18 2020 - 09:44:02) Allwinner Technology
[ 0.315]version: 1.1.0
[ 0.318]uboot commit : 5bde7999aad829824ac6b80a49dad0a502609447
[ 0.328]pmbus: ready
not set main pmu id
axp_probe error
[ 0.334]PMU: pll1 408 Mhz,PLL6=600 Mhz
AXI=204 Mhz,AHB=204 Mhz, APB1=102 Mhz
set power on vol to default
dcdc2_vol = 1200
axp set dcdc2_vol to 1200 failed
dcdc3_vol = 3300
axp set dcdc3_vol to 3300 failed
aldo2_vol = 2500
axp set aldo2_vol to 2500 failed
aldo3_vol = 3000
axp set aldo3_vol to 3000 failed
ldo1_vol = 3300
axp set ldo1_vol to 3300 failed
ldo2_vol = 3000
axp set ldo2_vol to 3000 failed
ldo3_vol = 2800
axp set ldo3_vol to 2800 failed
ldo4_vol = 1800
axp set ldo4_vol to 1800 failed
find power_sply to end
vbus exist
no battery, limit to dc
dram_para_set start
dram_para_set end
[ 0.468]DRAM: 128 MiB
relocation Offset is: 0709c000
save config for small mem_size
Not Found clk pll_de in script
Not Found clk pll_video1 in script
Not Found clk pll_video in script
Not Found clk pll_periph0 in script
DRV_DISP_Init end
[ 0.576]fetch script data boot_disp.output_disp fail
[ 0.581]fetch script data boot_disp.output_type fail
[ 0.586]fetch script data boot_disp.output_mode fail
[ 0.591]fetch script data boot_disp.auto_hpd fail
[ 0.596]lcd0_para.lcd_used=0
[disk_read_fs] no the partition
error: open disp_rsl.fex, maybe it is not exist
disp0 device type(0) enable
workmode = 17
storage type = 1
NAND_UbootProbe start
NB1 : enter phy init
NandHwInit: Start Nand Hardware initializing .....
uboot:nand version: 2 25 20150917 1145
Reg 0x01c20848: 0x3333
Reg 0x01c2085c: 0x55
Reg 0x01c20864: 0x10
uboot nand_request_tx_dma: reqest genernal dma for nand success, 0x47a319b0
request general tx dma channel ok!
uboot nand_request_tx_dma: reqest genernal dma for nand success, 0x47a319cc
request general rx dma channel ok!
SPI nand ID: 0 0
_SearchNandArchi fail
[ERR]NandHwInit: SCN_AnalyzeNandSystem() failed!
NandHwInit: End Nand Hardware initializing ..... FAIL!
NB1 : nand phy init fail
NB1 : enter phy Exit
nand release dma:47a319b0
nand release dma:0
NAND_UbootProbe end: 0xffffffff
try nand fail
[ 0.674][mmc]: mmc driver ver 2015-04-13 14:50:00
err: gpio count < =0 ,gpio_count is: 0
[ 0.683][mmc]: get sdc_phy_wipe fail.
[ 0.686][mmc]: get sdc0 sdc_erase fail.
[ 0.690][mmc]: get sdc_2xmode fail used = 0
[ 0.695][mmc]: get sdc_ddrmode fail used = 0
[ 0.700][mmc]: get sdc_f_max fail,use default 50000000Hz
[ 0.705][mmc]: get card_line fail,use default card_line 4
[ 0.711][mmc]: get sdc_ex_dly_used fail,use default
[ 0.716][mmc]: SUNXI SD/MMC: 2
[ 2.718][mmc]: mmc 2,update clk failed
[ 2.721][mmc]: [mmc]: mmc 2 update clock failed
[ 2.727][mmc]: mmc 2 Found fatal err,so no send cmd
[ 2.732][mmc]: go idle failed
[ 2.735][mmc]: mmc go idle error
[ 2.738][mmc]: erase_grp_size:0x0WrBlk * 0x0 = 0x0 Byte
[ 2.744][mmc]: secure_feature 0x0
[ 2.747][mmc]: secure_removal_type 0x0
MMC init failed
In: serial
Out: serial
Err: serial
--------fastboot partitions--------
mbr not exist
Net: eth0Warning: failed to set MAC address
[ 2.765]Hit any key to stop autoboot: 0
work mode=0x11
run card sprite
try sprite_led_gpio config
[ 2.775]sunxi sprite begin
sunxi sprite error: unable to get firmware start position
sunxi sprite firmware probe fail
sunxi#
离线
老哥,这板子的硬编码弄出来了吗,必须得是camdroid才能用吗
离线
芯片涨价了,做出来已经没有优势了!
离线
老哥,这板子的硬编码弄出来了吗,必须得是camdroid才能用吗
不用的,linux也支持硬件h264编解码。我的贴子有效果。
离线
當 zeta SDK 隱藏在二進制庫中時,這一切有什麼用? 需要用 C 編寫的源代碼,彙編程序
离线
同样的sdk, 在运行demo_CaptureToEncoding时 报这个错 error while loading shared libraries: /usr/lib/libcutils.so: internal error 。会是什么问题呢?
离线
请教一下,S3能通过硬件把rgb888直接编码成H.264吗?
离线