JPG图片转化成视频文件
-使用TMPGEnc将JPG图片转化成视频的问题及参数设置。
? 出现问题
在使用TMPGEnc工具转化图片成视频文件,最后能过bin2h.exe工具转成对就 .h 文件,用CMD命令运行bin2h.exe文件,最后能过Com_cpi.c中的void api_show_Test_logo_2(UINT32 addr,UINT32 len)函数将其显示在屏幕上。如果在转化的过程中TMPGEnc的参数设置不当会出现运行vdec_vbv_update(g_decv_dev, uSizeGot);后,图片不会马上在屏幕上刷新。要等到下次使用vdec_vbv_update()函数才能显示本次要显示的图片。
正确的参数设置示例如下:
其中 码率可调整,码率越高对就转化的视频越清晰,但是文件大小越大。
图片尺寸根实际图片。
高级选项如上如上图,其它参数选项默认。
解决图标闪烁现象的方法,在api_show_Test_logo_2(UINT32 addr,UINT32 len)的基础上进行了修正,实现在void api_show_Test_logo_3(UINT32 addr,UINT32 len, UINT32 lastbuf)函数中。 闪烁问题分析: 1出现的原因 :
使用vdec_vbv_request(g_decv_dev,len, &pWriteBuffer,&uSizeGot,NULL)函数申请内存,len 为想要申请的内存空间大小,uSizeGot为实际申请到的空间大小,pWriteBuffer为申请到的内存空间的起始地址,当申请 到的内存大小uSizeGot小于想要的需要的大小 len时,将要显示的图片内容写MEMCPY(pWriteBuffer,(void*)addr,uSizeGot);(addr为图片地址),vdec_vbv_update(g_decv_dev, uSizeGot);后显示刚写入的图片,因为空间不
是整个图片大小 ,相当于只更新了图片的前一部分(图片显示时从左上角一行一行的扫描更新),如果上次的加亮图标没有被更新掉,就会导致视觉上的闪烁效果。
2解决办法之一:
void api_show_Test_logo_3(UINT32 addr,UINT32 len, UINT32 lastbuf)解决的策略是 如果申请到的内存不能更新掉整个图片,就继续显示上次的内容(既把申请到的长度不跑的空间中写入上次显示的内容,因为二次内容是一样的,既不会出现闪烁现象)。到申请到足够的长度空间时再显示要更新的图片。实现见Com_cpi.c中的api_show_Test_logo_3().该方法是一个比较愚笨的方法,表现1会增加系统的处理时间影响性能,会导致延迟(当然延迟的时间是很小的感觉不到)。2不是彻底的解决问题,比如出现上面的图片转化参数设置不一样会,退图片延迟一次刷新 这个方法就失效! 更好的方法,应该从vdec_vbv_request着手,让其每次都返回想要的长度内存空间。请熟知vdec 模块的同事进行相应修改,更好的解决闪烁问题。