【发布时间】:2015-04-04 04:16:04
【问题描述】:
我正在尝试将视频渲染到纹理表面,但纹理坐标存在一些问题。
我正在使用 CoreVideo 通过 CVOpenGLESTextureCacheCreateTextureFromImage 调用来抓取纹理表面。这部分工作正常。现在我想旋转视频,使其以正确的方向显示。让我感到震惊的是,一种方法是通过纹理坐标矩阵。为此,我从我的 AVAssetTrack 中获取了 preferredTransform 和 naturalSize。
现在我开始遇到问题了。 preferredTransform 包含一个以像素为单位的平移 (tx, ty) 但我需要这个“标准化”,所以我执行以下操作来获取我的矩阵:
CGSize transSize = CGSizeApplyAffineTransform( videoSize, videoTransform );
videoTransform.tx /= -transSize.width;
videoTransform.ty /= -transSize.height;
(请注意,我不确定为什么我需要否定转换后的大小,但如果我不这样做,那么事情就不会在 0->1 范围内结束)。
然后我形成一个 GLKMatrix3 如下:
GLKMatrix3 CGAffineTransformToGLKMatrix3( CGAffineTransform affineTransform )
{
return GLKMatrix3Make( affineTransform.a, affineTransform.b, 0,
affineTransform.c, affineTransform.d, 0,
affineTransform.tx, affineTransform.ty, 1 );
}
这似乎几乎完美地改变了一切。然而,虽然横向拍摄的视频看起来很完美,但纵向拍摄的视频却是颠倒的。
所以很明显我做错了什么,但我在这方面花了相当多的时间却一无所获。有人知道我哪里出错了吗?
【问题讨论】:
标签: ios c opengl-es avfoundation core-video