gpt4 book ai didi

ios - CMTime/CMTimeMake 菜鸟问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:09:43 24 4
gpt4 key购买 nike

CMTimeMake 没有给我预期的结果。以下代码:

CMTime testTime = CMTimeMake(0, 30);
NSLog(@"testTime w/ input 0, 30: value: %d, timescale %d, seconds: %f",
testTime.value, testTime.timescale,
(float) testTime.value / testTime.timescale);

testTime = CMTimeMake(1, 30);
NSLog(@"testTime w/ input 1, 30: value: %d, timescale %d, seconds: %f",
testTime.value, testTime.timescale,
(float) testTime.value / testTime.timescale);

testTime = CMTimeMake(15, 30);
NSLog(@"testTime w/ input 15, 30: value: %d, timescale %d, seconds: %f",
testTime.value, testTime.timescale,
(float) testTime.value / testTime.timescale);

产生以下输出:

testTime w/input 0, 30: value: 0, timescale 0, seconds: 0.000000

testTime w/input 1, 60: value: 1, timescale 0, seconds: 0.000000

testTime w/input 15, 60: value: 15, timescale 0, seconds: 0.000000

为什么 testTime.timescale 总是零?

最佳答案

NSLog 的格式字符串有问题。由于您的问题标题表明您是“菜鸟”,我将花一些时间来解释这里发生了什么。

采用可变数量参数的函数,如 NSLog(NSString* format, ...) 需要根据格式字符串读取额外的参数...

  • %d 表示:读取四个字节(32位)并将其视为十进制整数。
  • %f 表示:读取四个字节(32 位)并将其视为 float 。

让我们检查一下您的最后一个示例:

您在格式字符串中传递 %d %d %f,后跟:

testTime.value     // A 64-bit integer (8 bytes) with the value 15
testTime.timescale // A 32-bit integer (4-bytes) with the value 30
(float)15 / 30 // A 32-bit float (4-bytes) with the value 0.5f

由于这些数字的传入方式,您最终会读取第一个 %dtestTime.value 的最低有效 32 位,这恰好是正确解释为 15,然后对于第二个 %d%f,您正在读取高 32 位 (0) 和一些填充字节以获得 0.0。我实际上有点困惑为什么你得到 0.0 而不是一些小数字,因为我希望 30 被解释为 float ,这将是 4.2E-44 - 如果有人知道请告诉我。

无论如何,解决它的方法是将第一个 %d 更改为 %lld,这将正确显示值。 testTime 变量实际上一直保持着正确的值。

关于ios - CMTime/CMTimeMake 菜鸟问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5999975/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com