GPUImageMovie不尊重imageOrientation

时间:2014-11-04 17:08:14

标签: ios gpuimage

我正在使用播放电影文件的GPUImageMovie,此文件已录制在iOS设备上。

然而,当GPUImageMovie播放时,它的方向错误,因此视频不会旋转以便正确显示。

如何让它尊重它的方向?我试过没有运气修改OpenGL代码。

2 个答案:

答案 0 :(得分:8)

使用GPUImageMovie播放在iOS设备中录制的视频时遇到同样的问题。我使用以下函数解决了它:

通过传递过滤器来调用此setRotationForFilter:方法。 orientationForTrack:将返回您当前的视频方向。

- (void)setRotationForFilter:(GPUImageOutput<GPUImageInput> *)filterRef {
    UIInterfaceOrientation orientation = [self orientationForTrack:self.playerItem.asset];
    if (orientation == UIInterfaceOrientationPortrait) {
        [filterRef setInputRotation:kGPUImageRotateRight atIndex:0];
    } else if (orientation == UIInterfaceOrientationLandscapeRight) {
        [filterRef setInputRotation:kGPUImageRotate180 atIndex:0];
    } else if (orientation == UIInterfaceOrientationPortraitUpsideDown) {
        [filterRef setInputRotation:kGPUImageRotateLeft atIndex:0];
    }
}

- (UIInterfaceOrientation)orientationForTrack:(AVAsset *)asset
{
    AVAssetTrack *videoTrack = [[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
    CGSize size = [videoTrack naturalSize];
    CGAffineTransform txf = [videoTrack preferredTransform];

    if (size.width == txf.tx && size.height == txf.ty)
        return UIInterfaceOrientationLandscapeRight;
    else if (txf.tx == 0 && txf.ty == 0)
        return UIInterfaceOrientationLandscapeLeft;
    else if (txf.tx == 0 && txf.ty == size.width)
        return UIInterfaceOrientationPortraitUpsideDown;
    else
        return UIInterfaceOrientationPortrait;
}

希望这能解决您的问题。

答案 1 :(得分:0)

添加到@Ameet Dhas:     设置旋转的一个地方是调用下一个过滤器之前的位置。

[currentTarget setInputRotation:outPutRotation atIndex:targetTextureIndex];
[currentTarget newFrameReadyAtTime:currentSampleTime atIndex:targetTextureIndex];