GPUImageMovieWriter原生BUG(1)时间戳问题

GPUImageMovieWriter.m, 默认的 代码有个小bug,
就是取时间戳的时候,先会取音频的时间戳,因为音频比视频编码要快,后面就一直取视频时间戳,

这样就造成了第二帧可能比第一帧时间戳小
原声的代码

- (CMTime)duration {
    if( ! CMTIME_IS_VALID(startTime) )
      return kCMTimeZero;
    if( ! CMTIME_IS_NEGATIVE_INFINITY(previousFrameTime) )
      return CMTimeSubtract(previousFrameTime, startTime);

    if( ! CMTIME_IS_NEGATIVE_INFINITY(previousAudioTime) )
      return CMTimeSubtract(previousAudioTime, startTime);

      return kCMTimeZero;
}
- (CMTime)duration {
    if( ! CMTIME_IS_VALID(startTime) ){
        return kCMTimeZero;
    }
    
    CMTime  audioDuration = kCMTimeZero;
    CMTime  videoDuration = kCMTimeZero;
    
    if( ! CMTIME_IS_NEGATIVE_INFINITY(previousFrameTime) ){
        videoDuration = CMTimeSubtract(previousFrameTime, startTime);
        //校验视频时间合法性
        if (CMTIME_COMPARE_INLINE(videoDuration, <, kCMTimeZero)
            || (CMTIME_IS_INVALID(videoDuration))){
                videoDuration = kCMTimeZero;
            }
    }
    if( ! CMTIME_IS_NEGATIVE_INFINITY(previousAudioTime) ){
        audioDuration = CMTimeSubtract(previousAudioTime, startTime);
        //校验音频时间合法性
        if (CMTIME_COMPARE_INLINE(audioDuration, <, kCMTimeZero)
            || (CMTIME_IS_INVALID(audioDuration))){
            audioDuration = kCMTimeZero;
        }
    }
    
    //返回最大的那个
    return CMTimeMaximum(videoDuration, audioDuration);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容