我已将我的Xcode版本从5.0升级到5.1&在GPUImage库中出现错误以下 GPUImageVideoCamera.m:301:54:隐式转换失去整数精度:' NSInteger' (又名' long')to' int32_t' (又名' int')
在此行的下方功能" connection.videoMaxFrameDuration = CMTimeMake(1,_frameRate);"发生错误。
- (void)setFrameRate:(NSInteger)frameRate;
{
_frameRate = frameRate;
if (_frameRate > 0)
{
for (AVCaptureConnection *connection in videoOutput.connections)
{
if ([connection respondsToSelector:@selector(setVideoMinFrameDuration:)])
connection.videoMinFrameDuration = CMTimeMake(1, _frameRate);
if ([connection respondsToSelector:@selector(setVideoMaxFrameDuration:)])
connection.videoMaxFrameDuration = CMTimeMake(1, _frameRate);
}
}
else
{
for (AVCaptureConnection *connection in videoOutput.connections)
{
if ([connection respondsToSelector:@selector(setVideoMinFrameDuration:)])
connection.videoMinFrameDuration = kCMTimeInvalid;
// This sets videoMinFrameDuration back to default
if ([connection respondsToSelector:@selector(setVideoMaxFrameDuration:)])
connection.videoMaxFrameDuration = kCMTimeInvalid;
// This sets videoMaxFrameDuration back to default
}
}
}
答案 0 :(得分:9)
问题与architecture
有关。如果您在Xcode 5.1中打开现有项目,它的默认arch设置是64位体系结构。
注意:打开时请注意以下体系结构问题 Xcode 5.1中的现有项目:
您可以在this apple's doc中看到此行。
NSInteger在64位代码中更改大小。使用NSInteger类型 贯穿Cocoa Touch;它是32位运行时中的32位整数 和64位运行时中的64位整数。所以收到时 使用NSInteger类型的框架方法中的信息 保存结果的NSInteger类型。
但是int is a 32-bit integer
,所以只有这会出现这个错误。您可以通过将架构设置为standard architecture including 64-bit
或执行简单类型转换来解决此问题。
connection.videoMinFrameDuration = CMTimeMake((int64_t)1, (int32_t)_frameRate);
请参阅CMTimeMake语法。
CMTime CMTimeMake (
int64_t value,
int32_t timescale
);