嵌入式小白一个,跑这个demo搞了好久,搞了两天终于跑起demo,主要是编译链的问题搞了好久
使用主线5.2,按照这个教程成功安装了cedar,dev出现了cedar和ion设备
https://github.com/aodzip/cedar/
编译链要用这个:
https://pan.baidu.com/s/1-WXlwxLoQNzKGDdIJ5JDpw
测试了几个编译链都不行,各种问题,用上面的就可以,buildroot根文件系统也要统一用这个
下载这个解码库,里面有f1c200s的配置,所以应该是可以用的
https://github.com/EmperG/lindenis-v536-package
主要看里面的
tina_multimedia和tina_multimedia_demo两个文件夹
进入libcedarc按照里面的说明文件编译,平台选arm-none-linux-gnueabi,注意编译的时候统一编译链,configure和make都带上CC=/...你的编译链路径
进入tina_multimedia/jpegdecode,继续make,注意带编译链路径
进入tina_multimedia_demo/jpegdecodedemo,makefile文件可以借鉴一下改成我这个:
Target = demo
SourceIncludePath := -I/tina_multimedia/jpegdecode -I/tina_multimedia/libcedarc/include -L/tina_multimedia/jpegdecode -L/output/libcedarc/lib -L/tina_multimedia/libcedarc/library/arm-none-linux-gnueabi
CompileFlags = $(CFLAGS) $(SourceIncludePath)
LoadFlags += -ljpegdecode -lvdecoder -lVE \
-lMemAdapter -lcdc_base -ldl
CC=/opt/arm-2014.05/bin/arm-none-linux-gnueabi-gcc
LDFLAGS= -Wl,-rpath-link /tina_multimedia/libcedarc/library/arm-none-linux-gnueabi
$(Target): jpegdecodedemo.c
$(CC) -o $@ $^ $(CompileFlags) $(LDFLAGS) $(LoadFlags)
路径名字对应改就行,很好看懂,其中/output/libcedarc/lib路径是编译tina_multimedia时的输出路径
然后make就有程序生成了,用arm-none-linux-gnueabi-readelf命令看一下依赖库,把对应的库拷到板子的/lib文件夹,如libvideoengine.so这些可能没显示,但是运行出错会提示缺什么的,缺就都拷进去就行了
这是运行效果:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> tina_multimedia <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
tag : tina3.5
branch: tina-dev
date : Mon Jul 15 19:04:59 2019 +0800
Change-Id: I5f6c8a88d7b387a312b7744797a0d5f8ab07ee7a
-------------------------------------------------------------------------------
debug : ionAlloc <__GetIonMemOpsS:985>:*** get __GetIonMemOpsS ***
debug : ionAlloc <ion_alloc_open:134>:begin ion_alloc_open
debug : cedarc <VeSetSpeed:1559>: *** set ve freq to 300 Mhz ***
debug : cedarc <VeInitialize:1198>: ve init ok
debug : ionAlloc <ion_alloc_open:175>:** phy offset = 40000000
debug : cedarc <VeRelease:1253>: ve release ok
DEBUG : jpegdecode <JpegDecoderCreate:406>: AddVDPlugin first
warning: cedarc <AddVDPlugin:1538>: 1117 get local path: /lib/
warning: cedarc <AddVDPlugin:1548>: 1117 load so: /lib/libawh265.so
debug : cedarc <AddVDPluginSingle:1501>: vdecoder open lib: /lib/libawh265.so
warning: cedarc <VDecoderRegister:127>: register codec: '116:h265' success.
warning: cedarc <AddVDPlugin:1548>: 1117 load so: /lib/libawmpeg4h263.so
debug : cedarc <AddVDPluginSingle:1501>: vdecoder open lib: /lib/libawmpeg4h263.so
warning: cedarc <VDecoderRegister:127>: register codec: '104:mpeg4H263' success.
warning: cedarc <VDecoderRegister:127>: register codec: '10b:mpeg4H263' success.
warning: cedarc <VDecoderRegister:127>: register codec: '10d:mpeg4H263' success.
warning: cedarc <AddVDPlugin:1548>: 1117 load so: /lib/libawavs.so
debug : cedarc <AddVDPluginSingle:1501>: vdecoder open lib: /lib/libawavs.so
warning: cedarc <VDecoderRegister:127>: register codec: '117:avs' success.
warning: cedarc <AddVDPlugin:1548>: 1117 load so: /lib/libawmjpeg.so
debug : cedarc <AddVDPluginSingle:1501>: vdecoder open lib: /lib/libawmjpeg.so
warning: cedarc <VDecoderRegister:127>: register codec: '101:mjpeg' success.
warning: cedarc <AddVDPlugin:1548>: 1117 load so: /lib/libawmpeg4normal.so
debug : cedarc <AddVDPluginSingle:1501>: vdecoder open lib: /lib/libawmpeg4normal.so
warning: cedarc <VDecoderRegister:127>: register codec: '10a:mpeg4Normal' success.
warning: cedarc <VDecoderRegister:127>: register codec: '10c:mpeg4Normal' success.
warning: cedarc <VDecoderRegister:127>: register codec: '108:mpeg4Normal' success.
warning: cedarc <VDecoderRegister:127>: register codec: '109:mpeg4Normal' success.
warning: cedarc <AddVDPlugin:1548>: 1117 load so: /lib/libawmjpegplus.so
debug : cedarc <AddVDPluginSingle:1501>: vdecoder open lib: /lib/libawmjpegplus.so
warning: cedarc <VDecoderRegister:127>: register codec: '101:mjpegplus' success.
warning: cedarc <AddVDPlugin:1548>: 1117 load so: /lib/libawh264.so
debug : cedarc <AddVDPluginSingle:1501>: vdecoder open lib: /lib/libawh264.so
warning: cedarc <VDecoderRegister:127>: register codec: '115:h264' success.
warning: cedarc <AddVDPlugin:1548>: 1117 load so: /lib/libawvp9Hw.so
debug : cedarc <AddVDPluginSingle:1501>: vdecoder open lib: /lib/libawvp9Hw.so
warning: cedarc <VDecoderRegister:127>: register codec: '113:Vp9Hw' success.
warning: cedarc <AddVDPlugin:1548>: 1117 load so: /lib/libawwmv3.so
debug : cedarc <AddVDPluginSingle:1501>: vdecoder open lib: /lib/libawwmv3.so
warning: cedarc <VDecoderRegister:127>: register codec: '110:vc1' success.
warning: cedarc <AddVDPlugin:1548>: 1117 load so: /lib/libawmpeg4dx.so
debug : cedarc <AddVDPluginSingle:1501>: vdecoder open lib: /lib/libawmpeg4dx.so
warning: cedarc <VDecoderRegister:127>: register codec: '105:mpeg4dx' success.
warning: cedarc <VDecoderRegister:127>: register codec: '106:mpeg4dx' success.
warning: cedarc <VDecoderRegister:127>: register codec: '107:mpeg4dx' success.
warning: cedarc <VDecoderRegister:127>: register codec: '10e:mpeg4dx' success.
warning: cedarc <VDecoderRegister:127>: register codec: '10f:mpeg4dx' success.
warning: cedarc <AddVDPlugin:1548>: 1117 load so: /lib/libawmpeg4vp6.so
debug : cedarc <AddVDPluginSingle:1501>: vdecoder open lib: /lib/libawmpeg4vp6.so
warning: cedarc <VDecoderRegister:127>: register codec: '111:Mpeg4Vp6' success.
warning: cedarc <AddVDPlugin:1548>: 1117 load so: /lib/libawmpeg2.so
debug : cedarc <AddVDPluginSingle:1501>: vdecoder open lib: /lib/libawmpeg2.so
warning: cedarc <VDecoderRegister:127>: register codec: '102:mpeg2' success.
warning: cedarc <VDecoderRegister:127>: register codec: '103:mpeg2' success.
warning: cedarc <AddVDPlugin:1548>: 1117 load so: /lib/libawvp8.so
debug : cedarc <AddVDPluginSingle:1501>: vdecoder open lib: /lib/libawvp8.so
warning: cedarc <VDecoderRegister:127>: register codec: '112:vp8' success.
warning: cedarc <AddVDPlugin:1548>: 1117 load so: /lib/libawmpeg4base.so
warning: cedarc <AddVDPluginSingle:1498>: Invalid plugin, CedarPluginVDInit not found.
srcBuf = 0x1a7e8,srcBufLen = 25676
JpegDecoderSetDataSource end
debug : cedarc <LogVersionInfo:40>:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Cedar Codec <<<<<<<<<<<<<<<<<<<<<<<<<<<<
tag : CedarC-v1.1.9
branch: master
commit: 1951abe1456450ea48bfd446e801861a1354e93c
date : Wed May 30 18:59:36 2018 +0800
author: jenkins8080
patch :
----------------------------------------------------------------------
debug : cedarc <CreateVideoDecoder:215>:CreateVideoDecoder ****
debug : cedarc <InitializeVideoDecoder:344>:*** pVconfig->nVeFreq = 0
debug : ionAlloc <__GetIonMemOpsS:985>:*** get __GetIonMemOpsS ***
debug : ionAlloc <ion_alloc_open:134>:begin ion_alloc_open
warning: cedarc <InitializeVideoDecoder:422>:warning: the nDecodeSmoothFrameBufferNum is 0
warning: cedarc <InitializeVideoDecoder:428>:warning: the nDeInterlaceHoldingFrameBufferNum is 0
warning: cedarc <InitializeVideoDecoder:434>:warning: the nDisplayHoldingFrameBufferNum is 0
debug : cedarc <DecideStreamBufferSize:1897>:nBufferSize=2097152
debug : cedarc <VeSetSpeed:1559>: *** set ve freq to 300 Mhz ***
debug : cedarc <VeInitialize:1198>: ve init ok
debug : cedarc <VideoEngineCreate:388>: *** pEngine->nIcVeVersion = 1663, decIpVersion = 0
debug : cedarc <CreateSpecificDecoder:1209>: Create decoder '101:mjpeg'
debug : cedarc <VideoEngineCreate:481>: **************eCtlAfcbMode = 0
debug : cedarc <GetSbmInterface:1705>:*********GetSbmInterface, nType=0
debug : cedarc <GetSbmInterfaceStream:732>:******* sbm-type: Stream*******
DEBUG : jpegdecode <JpegDecoderGetFrame:616>: Request Video Stream Buffer ok
DEBUG : jpegdecode <JpegDecoderGetFrame:636>: Copy Video Stream Data ok!
DEBUG : jpegdecode <JpegDecoderGetFrame:652>: Submit Video Stream Data ok!
debug : fbm.c <FbmCreateBuffer:133>:FbmCreate, total fbm number: 2, decoder needed: 2, nWidth=200, nHeight=200 nAlignStride = 0
debug : fbm.c <FbmCreateBuffer:226>:** call allocate pic buf, i = 0, maxNum = 2
debug : fbm.c <FbmCreateBuffer:379>:*** finish fbmCreateBuffer
decode time = 4194 us
DEBUG : jpegdecode <JpegDecoderGetFrame:680>: decoder one pic...
DEBUG : jpegdecode <JpegDecoderGetFrame:681>: pic nWidth is 224,nHeight is 224
DEBUG : jpegdecode <JpegDecoderGetFrame:682>: videoPicture->nWidth = 224,videoPicture->nHeight = 224,videoPicture->nLineStride = 224
DEBUG : jpegdecode <JpegDecoderGetFrame:684>: videoPicture->nTopOffset = 0,videoPicture->nLeftOffset = 0,videoPicture->nBottomOffset = 200,videoPicture->nRightOffset = 200
DEBUG : jpegdecode <JpegDecoderGetFrame:704>: ready flush YUV cache
ready save yuvDEBUG : jpegdecode <saveYuvPic:184>: acturalWidth = 200,height = 200
DEBUG : jpegdecode <saveYuvPic:225>: save yuv data successfully,path = /root/yuv200_200_nv21.dat
DEBUG : jpegdecode <JpegDecoderGetFrame:774>: free jpeg data
JpegDecoderGetFrame successfully,imgFrame->mWidth = 224,imgFrame->mHeight = 224,imgFrame->mYuvData = 0x3cc40,imgFrame->mYuvSize = 60000
imgFrame->mRGB565Data = (nil),imgFrame->mRGB565Size = 0
debug : cedarc <VeRelease:1253>: ve release ok
最近编辑记录 f1c100_ (2020-10-14 02:00:20)
离线
然后问题来了,输出rgb565图片,图片是杂乱的,看源码解码的时候是先输出YUV格式,然后再转为RGB的,猜想是否是转换问题,于是直接输出yv12,写了个程序提取前面的Y分量生成灰度图,这张是输入
这张是提取的灰度图
很明显是转码出现了错误,我卡住了,等大神继续搞一下
离线
我其中测试了一幅图,生成后提取Y分量灰度图是这样的
和原图已经很接近了,就是多了那些黑色的竖纹,没有竖纹的话就和原图一样了,所以我感觉还是能抢救以下的
离线
这个100s有没有硬件编码的?
离线
这个100s有没有硬件编码的?
肯定带硬解码器的
离线
sprintf 说:这个100s有没有硬件编码的?
肯定带硬解码器的
看全志官网介绍好像只有mjpeg编码,解码的话多了h.264的。
离线
f1c100_ 说:sprintf 说:这个100s有没有硬件编码的?
肯定带硬解码器的
看全志官网介绍好像只有mjpeg编码,解码的话多了h.264的。
淘宝上卖的代码有jpeg硬解码的
离线
自己来填完这个坑吧。
后面又继续跑了.264硬解,还是有这个问题,首先硬解是肯定能用的,那估计就是哪里的转换格式出问题了。
找了一番源码目录,看到xplayer下有个配置文件:vd_output_fmt = mb32,感觉格式问题八九不离十了。
仔细阅读了源码,videodecoder的格式是由vconfig中的eOutputPixelFormat控制的,有以下格式可选:
但是很可惜,我测试了下,f1c100/200不管怎么设置都没用,只能使用yuv_mb32,mb32是个什么鬼格式?谷歌翻箱倒柜找到全志文档:
简单的说就是以tile为单位进行扫描,一般一个tile为32x32,知道原理就好办了,修改下转换,这是结果:
源图:
转换后:
bingo,成功转换,但是能看到有不小的色差,这应该是yuv->rgb的转换公式问题,后面修改下校正就行了,关键的问题已经解决了
.264视频的硬解应该也要这样搞
离线
楼主真是一个神奇的存在, 膜拜大神.
请问可以提供一个荔枝派nano或者widora tiny200的固件吗?
离线
楼主真是一个神奇的存在, 膜拜大神.
请问可以提供一个荔枝派nano或者widora tiny200的固件吗?
DD了个nano的TF固件出来
https://whycan.com/files/members/5219/nano-tf.rar
root目录下执行./demo jpg文件就行了
例如:
./demo ./123.jpg
离线
哦豁哦豁 说:楼主真是一个神奇的存在, 膜拜大神.
请问可以提供一个荔枝派nano或者widora tiny200的固件吗?
DD了个nano的TF固件出来
https://whycan.com/files/members/5219/nano-tf.rarroot目录下执行./demo jpg文件就行了
例如:
./demo ./123.jpg
感谢大佬分享, 请问是用哪组串口呢?我用widora tiny200测试了一下,发现串口没有输出呢。
离线
嘴巴里塞个棒棒很让人想歪了。
离线
f1c100_ 说:哦豁哦豁 说:楼主真是一个神奇的存在, 膜拜大神.
请问可以提供一个荔枝派nano或者widora tiny200的固件吗?
DD了个nano的TF固件出来
https://whycan.com/files/members/5219/nano-tf.rarroot目录下执行./demo jpg文件就行了
例如:
./demo ./123.jpg感谢大佬分享, 请问是用哪组串口呢?我用widora tiny200测试了一下,发现串口没有输出呢。
好像nano默认的0串口输出,tiny200是1串口
离线
楼主厉害!大神!
感谢分享!
离线
我也是在这个地方卡了很久,后来才知道yuv_mb32这种格式,其实f1c100s的 display engine 就支持yuv_mb32视频图层,不需要软件去转换。
离线
我也是在这个地方卡了很久,后来才知道yuv_mb32这种格式,其实f1c100s的 display engine 就支持yuv_mb32视频图层,不需要软件去转换。
有display engine跑通的例子么?我看1c200s手册上可以配置layer层输入是YUV然后显示到LCD上的,但是没配置成功。
离线
我也是在这个地方卡了很久,后来才知道yuv_mb32这种格式,其实f1c100s的 display engine 就支持yuv_mb32视频图层,不需要软件去转换。
大佬有跑通吗,我也在研究yuv,看源码diplay engine调用了/dev/disp设备,不知道这个怎么搞出来就卡住了。还有另外一种是通过libdrm来显示yuv,但是我用yuv初始化drm后屏幕就只显示彩色乱码,写内存也显示没变化了。
离线
感谢分享,这个可以研究一下
离线
zhouyu2019 说:我也是在这个地方卡了很久,后来才知道yuv_mb32这种格式,其实f1c100s的 display engine 就支持yuv_mb32视频图层,不需要软件去转换。
有display engine跑通的例子么?我看1c200s手册上可以配置layer层输入是YUV然后显示到LCD上的,但是没配置成功。
按道理drm是直接能用的,只是我嫌不够灵活,于是我自己根据数据手册去写display-engine的驱动,但也很不容易,最后还是参考了tina里面的驱动才跑通的。根据我调试的结果,直接用de-be的YUV图层是可以正常使用的,但是不支持YUV420_MB32的格式。如果要支持YUV420_MB32,还是得用de-fe,而de-fe的用法要比de-be复杂很多。
离线
大佬,参考一下
离线
F1C200s主线gstreamer使用openmax调用cedar硬解码
http://whycan.com/t_5824.html
(出处:哇酷开发者社区【全志 V3S/F1C100s/X3】)
和这个帖子配合一起看,更有参考意义,感谢楼主!
离线
@f1c100_
请教大神,使用的显示屏是16位还是18位的
离线
请教大神,显示屏是用的什么接口呢
离线
离线
@zhouyu2019
硬件功能是有一个RGB转BRG功能. 能不能改造一下当大小端切换?
离线