打印
[i.MX]

怎么转换才能满足imx6q vpu的输入要求?

[复制链接]
4737|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xu0xiang0|  楼主 | 2015-11-24 18:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Rita:
         求格式转换的代码。
          imx6q的vpu要求输入格式是 YUV420,我实在不知道要怎么样才能满足这个条件。
          我从摄像头采集的数据存在文件里面,是灰度图,每个像素 1个字节,1000*720的大小,当我在imx6q上用纯软件的方法压缩的时候,能很好的将图片压缩成视频:    fakesrc blocksize=1000*720--->capsfilter:video/x-raw-gray width=1000,height=720----->ffmepgcolorspace---->ffenc_mpeg4------>filesink
          当我用vpuenc代替ffmpegcolorspace的时候,程序能执行,不过压缩出来的视频无法播放。我用gst-inspect察看了vpuenc,发现她的src只支持 YUV420的格式,我试过很多方法,弄了很久,包括手动在图片数据后面插入UV数据(0),都没用。是否vpuenc对输入的数据流有特殊的规定?是否在Y和UV之间要插入特定的数据?
          国内根本搜不到Gstream的例子代码 ,做Gstream的也少,只能找你们公司懂Gstream的人给我们演示下怎么做格式转换(比如将gray转换成YUV420,嘿嘿。就别用gst-launch了),我看到论坛里面好几个人都有这样的问题了,不过,没有人将解决方法公布出来。
         
   

相关帖子

沙发
mini1986| | 2015-11-24 21:53 | 只看该作者
目前就是,有问题的时候都出来问,自己解决了,然后就不吭声了......

使用特权

评论回复
板凳
xu0xiang0|  楼主 | 2015-11-25 09:17 | 只看该作者
mini1986 发表于 2015-11-24 21:53
目前就是,有问题的时候都出来问,自己解决了,然后就不吭声了......

至少我在这上面发帖,不管是自己解决的还是别人帮的,都把解决方法说出来了。

使用特权

评论回复
地板
qqman173| | 2015-11-25 09:26 | 只看该作者
你将驱动里的输出格式fmt定为YUV420的不行么?就不需要从应用层进行转换,你可以试试呀

使用特权

评论回复
5
xu0xiang0|  楼主 | 2015-11-25 10:00 | 只看该作者
qqman173 发表于 2015-11-25 09:26
你将驱动里的输出格式fmt定为YUV420的不行么?就不需要从应用层进行转换,你可以试试呀 ...

谢谢,不过,这边的情况比较特殊,从摄像头出来的数据先要经过一个FPGA,然后还要用OpenCV对其做处理,如果我改格式,估计他们要叫了.....

使用特权

评论回复
6
mini1986| | 2015-11-25 10:26 | 只看该作者
xu0xiang0 发表于 2015-11-25 09:17
至少我在这上面发帖,不管是自己解决的还是别人帮的,都把解决方法说出来了。 ...

除了nda之外的东西,我一般知道的就回复,不知道的就只能表示关注了......

使用特权

评论回复
7
lisosos| | 2015-11-25 17:17 | 只看该作者
这个我们公司的软件工程师会,.也用Gstream....我做硬件的不懂,我们也用imx6

使用特权

评论回复
8
史迪威将军| | 2015-11-25 21:03 | 只看该作者
用vpuenc代替ffmpegcolorspace的时候,程序能执行,不过压缩出来的视频无法播放。是不是什么地方出差错了啊

使用特权

评论回复
9
far5810| | 2015-11-25 22:30 | 只看该作者
fsl的 gstreamer plugin中有  个  imxvideoconvert_g2d和 imxvideoconvert_ipu可以作格式转换的,  你可以加在 up stream试试

使用特权

评论回复
10
Beckham_Owen| | 2015-11-26 16:42 | 只看该作者
xu0xiang0 发表于 2015-11-25 10:00
谢谢,不过,这边的情况比较特殊,从摄像头出来的数据先要经过一个FPGA,然后还要用OpenCV对其做处理,如 ...

opencv对处理图像数据比较强一些吧

使用特权

评论回复
11
xu0xiang0|  楼主 | 2015-11-27 09:58 | 只看该作者
far5810 发表于 2015-11-25 22:30
fsl的 gstreamer plugin中有  个  imxvideoconvert_g2d和 imxvideoconvert_ipu可以作格式转换的,  你可以 ...

谢谢,我试了gst-inspect-0.10,没有这2个插件,估计是我的版本太老了

使用特权

评论回复
12
xu0xiang0|  楼主 | 2015-11-27 10:02 | 只看该作者
Beckham_Owen 发表于 2015-11-26 16:42
opencv对处理图像数据比较强一些吧

opencv那边说图片压缩成mp4他不会....输入法体验不好,要加入长按和滑动效果,应用端说没时间改,让我这个做驱动的,一路从驱动,tslib,qt4.8.6改过来,从qt内部实现滑动和长按......

使用特权

评论回复
13
xu0xiang0|  楼主 | 2015-11-27 10:29 | 只看该作者
本帖最后由 xu0xiang0 于 2015-11-27 10:31 编辑

现在可以压缩了,虽然播放的时候会卡1,2秒钟然后继续播放.....
我说下vpuenc无法压缩成mp4的原因吧:
      用纯软件可以压缩,用vpuenc代替ffmpegcolorspace后,生成的文件始终说无图像数据(!!!!)。左试右试,在快要崩溃的情况下再度找到主板供应方,他们勉强给了我一个脚本(这还是老板带着我去要的),是gst-launch的,我仔细看了看这个脚本,发现他们是从UYVY--->I420---->H264的,也就是说,他们的 vpuenc codec=avc,我试了他们的脚本,确实可以生成视频,然后我将 codec=mpeg,结果就报生成的视频无图像数据了....然后,我突然想起来,之前看论坛帖子 Rita说过,mxc_vpu_test.out 只能压缩h264,我估计是vpu的老软件版本也只能压缩h264.....,然后,我将原来的代码,修改 codec=avc,就能压缩了。
    所以,原因出来了,应该是vpu的软件版本太老。我之前是找Rita要过 4.0.0的ltib的,去问主板供应方如何升级的时候,他们告诉我,用他们的文件系统就行了,替换后,我看确实可以软件压缩了,就没升级,结果出了这档子事情,看来还是有必要升级。
    也许有人会要找怎么写格式转换的 “format”吧,要知道,大陆局域网内是搜不到的,我写出来吧:
   g_object_set( G_OBJECT( geFltGray ),"caps",
           gst_caps_new_simple("video/x-raw-gray",
                                       "width",G_TYPE_INT,1000,
                                "height",G_TYPE_INT,720,
                                "bpp",G_TYPE_INT,8,
                                "depth",G_TYPE_INT,8,
                                "framerate",GST_TYPE_FRACTION,1,1,//帧率,根据自己情况修改
                                 NULL
                                ),NULL);

   g_object_set( G_OBJECT( geFltI420 ),"caps",
           gst_caps_new_simple("video/x-raw-yuv",
                    "format",GST_TYPE_FOURCC,GST_MAKE_FOURCC( 'I','4','2','0'  ),
                                       "width",G_TYPE_INT,1000,
                                "height",G_TYPE_INT,720,
                                "framerate",GST_TYPE_FRACTION,1,1,
                NULL
                                ),NULL);

使用特权

评论回复
14
far5810| | 2015-11-27 14:13 | 只看该作者
xu0xiang0 发表于 2015-11-27 09:58
谢谢,我试了gst-inspect-0.10,没有这2个插件,估计是我的版本太老了

这个在0.1的版本里可能名字不同,
我说的是gst-1.0后里的名字

使用特权

评论回复
15
Beckham_Owen| | 2015-11-29 20:14 | 只看该作者
先升级插件,升级到最新版本

使用特权

评论回复
16
Tennasi| | 2015-11-29 20:36 | 只看该作者
做的少说明有前途啊

使用特权

评论回复
17
xu0xiang0|  楼主 | 2015-12-1 09:02 | 只看该作者
我已经做完了,我把gst-launch写出来吧,
gst-launch  -v filesrc location=/BigFile blocksize=720000 num-buffers=180 ! 'video/x-raw-gray,width=1000,height=720,bpp=8,depth=8,framerate=25/1' ! ffmpegcolorspace ! mfw_ipucsc ! 'video/x-raw-yuv,format=(fourcc)I420,width=1000,height=720,framerate=25/1' ! mfw_deinterlacer ! vpuenc framerate-nu=25000 seqheader-method=3 framerate-de=1000 codec=avc ! 'video/x-h264,width=1000,height=720' ! matroskamux ! filesink location=/examplebottle.mp4

我预先把图片都存在一个文件名为 BigFile 的文件里面了,图片是8位灰度图,1000*720格式,180幅图片,在用vpuenc硬压缩后,需要加一个 matroskamux,这个可能是封装之类的,也是我从这个论坛上一个兄弟的帖子那里看到的(不过他的问题没人帮他解决).... vpuenc 的quant是压缩比例,范围是1~50 ,数字越大压缩得越狠,这个在arm板上用gst-inspect就可以看到了

千万别用VIM编辑这个gst-launch,用gedit,不然,这么长的命令,被VIM自动截成3行,执行就会报错。

.....我在想,Rita会不会来一句:感谢楼主分享。

使用特权

评论回复
18
mini1986| | 2015-12-1 11:10 | 只看该作者
我先来一句吧,感谢楼主分享.....

使用特权

评论回复
19
xu0xiang0|  楼主 | 2015-12-1 11:25 | 只看该作者
好吧,结贴,不难为她了

使用特权

评论回复
20
ryanhc| | 2017-8-24 13:38 | 只看该作者
感谢楼主分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

36

帖子

0

粉丝