[swscaler] Warning: data is not aligned! This can lead to a speedloss 的解决方法FFmpeg

古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。这篇文章主要讲述[swscaler] Warning: data is not aligned! This can lead to a speedloss 的解决方法FFmpeg相关的知识,希望能为你提供帮助。


[swscaler] Warning: data is not aligned! This can lead to a speedloss 的解决相信如果你用了FFmpeg一段时间,对以下的黄色警告肯定不会陌生


[swscaler] Warning: data is not aligned! This can lead to a speedloss 的解决方法FFmpeg

文章图片



这种刺眼的黄色警告(还会影响性能),对一个强迫症患者来说,实在是不能忍!
其实导致报警的原因很简单,就是swscaler的缩放的目标尺寸不合适,它想要的大小是 16 的倍数!


只要简单的代码就解决掉这个讨厌的警告:
m_dst_h = (dst_h > > 4) < < 4 ;
m_dst_w = (dst_w > > 4) < < 4 ;





如果是按比例的话,就是:
float ratio = 1.0f * getSrcWidth()/getSrcHeight();
m_dst_h = (dst_h > > 4) < < 4 ;
m_dst_w = (int(ratio * m_dst_h)> > 4)< < 4 ;



如图,世界就清净了


[swscaler] Warning: data is not aligned! This can lead to a speedloss 的解决方法FFmpeg

文章图片





注意以上方法得到的尺寸是不大于原大小的,如果想得到不小于原大小尺寸,那么就要改为以下方法:
size = (size + 0xf) & ~0xf;





如果想得到2次幂的宽高,且不小于原宽高,那么改为以下方法:


int tmp = 1;
int w = bitmap.getWidth();
int h = bitmap.getHeight();
while (w > tmp || h > tmp)
tmp < < = 1;

int width = tmp;
int height = tmp;









【[swscaler] Warning: data is not aligned! This can lead to a speedloss 的解决方法FFmpeg】




    推荐阅读