YUV图片旋转

1、从H264视频流中解析出来的图片格式是YUV

  YUV旋转可以选择手工旋转,也可以利用libYUV,libYUV开启NEON指令之后可以加快处理速度

  在iOS系统上,利用Accelcerate库进行加速,其中旋转的方法是libYUV旋转的20倍

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//测试YUV to RGBA 旋转然后 再到YUV 性能
 
int width  = inFrame->width;
int height = inFrame->height;
int size   = width*height*4;
uint8 *pRGBA = (uint8 *)calloc(size*3, sizeof(uint8));
uint8 *pDstRGBA = (uint8 *)calloc(size*3, sizeof(uint8));
 
start = [NSDate date];
 
libyuv::I420ToARGB(inFrame->data[0],
                   inFrame->linesize[0],
                   inFrame->data[1],
                   inFrame->linesize[1],
                   inFrame->data[2],
                   inFrame->linesize[2],
                   pRGBA,
                   width*4,
                   width,
                   height);
 
Pixel_8888 bgColor = {0,0,0,0};
vImageRotate_ARGB8888((const vImage_Buffer *)pRGBA,
                      (const vImage_Buffer *)pDstRGBA,
                      NULL,
                      angle,
                      bgColor,
                      kvImageBackgroundColorFill);
 
libyuv::ARGBToI420(pDstRGBA,
                   height*4,
                   _rotFrame->data[0],
                   _rotFrame->linesize[0],
                   _rotFrame->data[1],
                   _rotFrame->linesize[1],
                   _rotFrame->data[2],
                   _rotFrame->linesize[2],
                   width,
                   height);
 
LOGE("YUV Rotate -[vImageRotate_ARGB8888] cost : %f", [[NSDate date] timeIntervalSinceDate:start]);
 
free(pRGBA);
free(pDstRGBA);

  

posted @   兜兜有糖的博客  阅读(2783)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示