ios libyuv 视频流裁剪

关于libyuv ios 怎么使用 相信大家都有办法 从网上找到,这里就不多说了,

为什么这里要写一遍裁剪的文章呢, 就是因为网上基本找不到这方面的文章,都是关于数据格式转换的,n12->i420 等等。裁剪也有说,但是说的 含含糊糊的。

ConvertToI420 这个是剪裁的方法,这个方法的用途就是把任意格式的数据转化为i420,并且是裁剪原图的一块区域转化。并不需要 先把数据数据转化为i420 然后再去 裁剪。

int ConvertToI420(const uint8* src_frame, size_t src_size,
                  uint8* dst_y, int dst_stride_y,
                  uint8* dst_u, int dst_stride_u,
                  uint8* dst_v, int dst_stride_v,
                  int crop_x, int crop_y,
                  int src_width, int src_height,
                  int crop_width, int crop_height,
                  enum RotationMode rotation,
                  uint32 format);

src_frame:源数据的其实位置

src_size:源数据的大小

rormat:元数据的格式

贴一段转换的代码,数据framebuffer 是从 webrtc 本事render 回调过来的。暂时不知道rotation的用法,只是默认传了0,已经达到我手动转码剪裁的效果了。

 RTCCVPixelBuffer *buffer = frame.buffer;
    CVPixelBufferRef pbuffer = buffer.pixelBuffer;
    CVPixelBufferLockBaseAddress(pbuffer, 0);
    size_t src_stride_y = CVPixelBufferGetBytesPerRowOfPlane(pbuffer, 0);
    size_t src_stride_uv = CVPixelBufferGetBytesPerRowOfPlane(pbuffer, 1);
    uint8_t *src_data_y = CVPixelBufferGetBaseAddressOfPlane(pbuffer, 0);
    uint8_t *src_data_uv = CVPixelBufferGetBaseAddressOfPlane(pbuffer, 1);
    
    CVPixelBufferUnlockBaseAddress(pbuffer, 0);
    RTCI420Buffer *i420buffer = [[RTCI420Buffer alloc] initWithWidth:frame.width/2 height:frame.height/2];
    
    ConvertToI420(src_data_y, frame.width*frame.height*1.5,
                  (void *)i420buffer.dataY, i420buffer.strideY,
                  (void *)i420buffer.dataU, i420buffer.strideU,
                  (void *)i420buffer.dataV, i420buffer.strideV,
                  0,0,
                  frame.width, frame.height,
                  frame.width/2, frame.height/2,
                  kRotate0, FOURCC_NV12);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值