WhyCan Forum(哇酷开发者社区)

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn

您尚未登录。

#1 2020-10-14 01:51:21

f1c100_
会员
注册时间: 2020-09-22
累计积分: 18

f1c100s成功运行jpeg硬解码demo,但输出还是有问题

嵌入式小白一个,跑这个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)

离线

#2 2020-10-14 01:57:57

f1c100_
会员
注册时间: 2020-09-22
累计积分: 18

Re: f1c100s成功运行jpeg硬解码demo,但输出还是有问题

然后问题来了,输出rgb565图片,图片是杂乱的,看源码解码的时候是先输出YUV格式,然后再转为RGB的,猜想是否是转换问题,于是直接输出yv12,写了个程序提取前面的Y分量生成灰度图,这张是输入
FluxBB bbcode 测试
这张是提取的灰度图
FluxBB bbcode 测试
很明显是转码出现了错误,我卡住了,等大神继续搞一下

离线

#3 2020-10-14 02:06:04

f1c100_
会员
注册时间: 2020-09-22
累计积分: 18

Re: f1c100s成功运行jpeg硬解码demo,但输出还是有问题

我其中测试了一幅图,生成后提取Y分量灰度图是这样的
FluxBB bbcode 测试
和原图已经很接近了,就是多了那些黑色的竖纹,没有竖纹的话就和原图一样了,所以我感觉还是能抢救以下的

离线

#4 2020-10-14 08:41:41

sprintf
会员
注册时间: 2020-09-11
累计积分: 22

Re: f1c100s成功运行jpeg硬解码demo,但输出还是有问题

这个100s有没有硬件编码的?

离线

#5 2020-10-14 19:30:48

f1c100_
会员
注册时间: 2020-09-22
累计积分: 18

Re: f1c100s成功运行jpeg硬解码demo,但输出还是有问题

sprintf 说:

这个100s有没有硬件编码的?

肯定带硬解码器的

离线

#6 2020-10-15 11:55:05

vip888888
会员
注册时间: 2020-07-16
累计积分: 82

Re: f1c100s成功运行jpeg硬解码demo,但输出还是有问题

f1c100_ 说:
sprintf 说:

这个100s有没有硬件编码的?

肯定带硬解码器的

看全志官网介绍好像只有mjpeg编码,解码的话多了h.264的。

离线

#7 2020-10-15 13:21:36

f1c100_
会员
注册时间: 2020-09-22
累计积分: 18

Re: f1c100s成功运行jpeg硬解码demo,但输出还是有问题

vip888888 说:
f1c100_ 说:
sprintf 说:

这个100s有没有硬件编码的?

肯定带硬解码器的

看全志官网介绍好像只有mjpeg编码,解码的话多了h.264的。

淘宝上卖的代码有jpeg硬解码的

离线

#8 2020-10-18 22:36:18

f1c100_
会员
注册时间: 2020-09-22
累计积分: 18

Re: f1c100s成功运行jpeg硬解码demo,但输出还是有问题

自己来填完这个坑吧。
后面又继续跑了.264硬解,还是有这个问题,首先硬解是肯定能用的,那估计就是哪里的转换格式出问题了。
找了一番源码目录,看到xplayer下有个配置文件:vd_output_fmt = mb32,感觉格式问题八九不离十了。
仔细阅读了源码,videodecoder的格式是由vconfig中的eOutputPixelFormat控制的,有以下格式可选:
FluxBB bbcode 测试
但是很可惜,我测试了下,f1c100/200不管怎么设置都没用,只能使用yuv_mb32,mb32是个什么鬼格式?谷歌翻箱倒柜找到全志文档:
FluxBB bbcode 测试
简单的说就是以tile为单位进行扫描,一般一个tile为32x32,知道原理就好办了,修改下转换,这是结果:
源图:
FluxBB bbcode 测试
转换后:
FluxBB bbcode 测试

bingo,成功转换,但是能看到有不小的色差,这应该是yuv->rgb的转换公式问题,后面修改下校正就行了,关键的问题已经解决了
.264视频的硬解应该也要这样搞

离线

#9 2020-10-18 22:46:26

哦豁哦豁
会员
注册时间: 2020-01-17
累计积分: 76

Re: f1c100s成功运行jpeg硬解码demo,但输出还是有问题

楼主真是一个神奇的存在, 膜拜大神.

请问可以提供一个荔枝派nano或者widora tiny200的固件吗?

离线

#10 2020-10-18 23:54:56

f1c100_
会员
注册时间: 2020-09-22
累计积分: 18

Re: f1c100s成功运行jpeg硬解码demo,但输出还是有问题

哦豁哦豁 说:

楼主真是一个神奇的存在, 膜拜大神.

请问可以提供一个荔枝派nano或者widora tiny200的固件吗?

DD了个nano的TF固件出来
https://whycan.com/files/members/5219/nano-tf.rar

root目录下执行./demo jpg文件就行了
例如:
./demo ./123.jpg

离线

#11 2020-10-19 08:46:34

哦豁哦豁
会员
注册时间: 2020-01-17
累计积分: 76

Re: f1c100s成功运行jpeg硬解码demo,但输出还是有问题

f1c100_ 说:
哦豁哦豁 说:

楼主真是一个神奇的存在, 膜拜大神.

请问可以提供一个荔枝派nano或者widora tiny200的固件吗?

DD了个nano的TF固件出来
https://whycan.com/files/members/5219/nano-tf.rar

root目录下执行./demo jpg文件就行了
例如:
./demo ./123.jpg

感谢大佬分享, 请问是用哪组串口呢?我用widora tiny200测试了一下,发现串口没有输出呢。

离线

#12 2020-10-19 10:30:05

nonzhe
会员
注册时间: 2020-09-30
累计积分: 3

Re: f1c100s成功运行jpeg硬解码demo,但输出还是有问题

嘴巴里塞个棒棒很让人想歪了。

离线

#13 2020-10-19 11:43:51

f1c100_
会员
注册时间: 2020-09-22
累计积分: 18

Re: f1c100s成功运行jpeg硬解码demo,但输出还是有问题

哦豁哦豁 说:
f1c100_ 说:
哦豁哦豁 说:

楼主真是一个神奇的存在, 膜拜大神.

请问可以提供一个荔枝派nano或者widora tiny200的固件吗?

DD了个nano的TF固件出来
https://whycan.com/files/members/5219/nano-tf.rar

root目录下执行./demo jpg文件就行了
例如:
./demo ./123.jpg

感谢大佬分享, 请问是用哪组串口呢?我用widora tiny200测试了一下,发现串口没有输出呢。

好像nano默认的0串口输出,tiny200是1串口

离线

#14 2020-10-19 19:09:42

dgtg
会员
注册时间: 2017-11-08
累计积分: 173

Re: f1c100s成功运行jpeg硬解码demo,但输出还是有问题

楼主厉害!大神!
感谢分享!

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB