CVPixelBuffer 到 CIImage 总是返回 nil

2024-01-12

我试图将从 AVPlayerItemVideoOutput 中提取的 PixelBuffer 转换为 CIImage 但总是为零。

The Code

if([videoOutput_ hasNewPixelBufferForItemTime:player_.internalPlayer.currentItem.currentTime])
{
    CVPixelBufferRef pixelBuffer = [videoOutput_ copyPixelBufferForItemTime:player_.internalPlayer.currentItem.currentTime
                                                         itemTimeForDisplay:nil];

    CIImage *image = [CIImage imageWithCVPixelBuffer:pixelBuffer]; // Always image === nil
    CIFilter *filter = [FilterCollection filterSepiaForImage:image];
    image = filter.outputImage;

    CIContext *context = [CIContext contextWithOptions:nil];
    CGImageRef cgimg = [context createCGImage:image fromRect:[image extent]];
    [pipLayer_ setContents:(id)CFBridgingRelease(cgimg)];

} 

下面是一个详细信息pixelBuffer用于创建 CIImage(始终导致 nil):

$0 = 0x09b48720 <CVPixelBuffer 0x9b48720 width=624 height=352 bytesPerRow=2496 pixelFormat=BGRA iosurface=0x0 attributes=<CFBasicHash 0x98241d0 [0x1d244d8]>{type = immutable dict, count = 3,
entries =>
    0 : <CFString 0x174cf4 [0x1d244d8]>{contents = "Height"} = <CFNumber 0x9a16e70 [0x1d244d8]>{value = +352, type = kCFNumberSInt32Type}
    1 : <CFString 0x174ce4 [0x1d244d8]>{contents = "Width"} = <CFNumber 0x9a109d0 [0x1d244d8]>{value = +624, type = kCFNumberSInt32Type}
    2 : <CFString 0x1750e4 [0x1d244d8]>{contents = "PixelFormatType"} = <CFArray 0x1090ddd0 [0x1d244d8]>{type = mutable-small, count = 1, values = (
    0 : <CFNumber 0x7a28050 [0x1d244d8]>{value = +1111970369, type = kCFNumberSInt32Type}
)}
}
 propagatedAttachments=<CFBasicHash 0x9b485c0 [0x1d244d8]>{type = mutable dict, count = 6,
entries =>
    0 : <CFString 0x174ff4 [0x1d244d8]>{contents = "CVImageBufferTransferFunction"} = <CFString 0x174f84 [0x1d244d8]>{contents = "ITU_R_709_2"}
    2 : <CFString 0x174f74 [0x1d244d8]>{contents = "CVImageBufferYCbCrMatrix"} = <CFString 0x174f94 [0x1d244d8]>{contents = "ITU_R_601_4"}
    9 : <CFString 0x174f14 [0x1d244d8]>{contents = "CVPixelAspectRatio"} = <CFBasicHash 0x9b1bc30 [0x1d244d8]>{type = immutable dict, count = 2,
entries =>
    0 : <CFString 0x174f34 [0x1d244d8]>{contents = "VerticalSpacing"} = <CFNumber 0x9b0f730 [0x1d244d8]>{value = +1, type = kCFNumberSInt32Type}
    2 : <CFString 0x174f24 [0x1d244d8]>{contents = "HorizontalSpacing"} = <CFNumber 0x9b0f730 [0x1d244d8]>{value = +1, type = kCFNumberSInt32Type}
}

    10 : <CFString 0x174fb4 [0x1d244d8]>{contents = "CVImageBufferColorPrimaries"} = <CFString 0x174fd4 [0x1d244d8]>{contents = "SMPTE_C"}
    11 : <CFString 0x174e24 [0x1d244d8]>{contents = "QTMovieTime"} = <CFBasicHash 0x7a47940 [0x1d244d8]>{type = immutable dict, count = 2,
entries =>
    0 : <CFString 0x174e44 [0x1d244d8]>{contents = "TimeScale"} = <CFNumber 0x7a443d0 [0x1d244d8]>{value = +90000, type = kCFNumberSInt32Type}
    2 : <CFString 0x174e34 [0x1d244d8]>{contents = "TimeValue"} = <CFNumber 0x7a476e0 [0x1d244d8]>{value = +1047297, type = kCFNumberSInt64Type}
}

    12 : <CFString 0x174eb4 [0x1d244d8]>{contents = "CVFieldCount"} = <CFNumber 0x9b0f730 [0x1d244d8]>{value = +1, type = kCFNumberSInt32Type}
}
 nonPropagatedAttachments=<CFBasicHash 0x9b44b40 [0x1d244d8]>{type = mutable dict, count = 0,
entries =>
}
>

解决了这个问题 - 我正在模拟器上尝试,但似乎仅在设备上受支持。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CVPixelBuffer 到 CIImage 总是返回 nil 的相关文章

随机推荐

  • 在指定的时间内运行函数:C++ with [重复]

    这个问题在这里已经有答案了 我需要实现一个函数 该函数应该在指定的时间内执行指定的任务 该任务作为参数传递给它 std chrono milliseconds 我想出了代码 void Run std chrono milliseconds
  • 在项目属性中找不到 C/C++

    我正在遵循一个教程 其要求的步骤之一是转到我的项目属性并单击 c c 并添加 其他包含目录 属性的路径 我使用的是 Visual C Express Edition 2008 教程使用的是相同的东西 有没有办法得到这个或替代品 This i
  • 关于C语言中free()的问题[重复]

    这个问题在这里已经有答案了 可能的重复 free 和 malloc 在 C 中如何工作 https stackoverflow com questions 1957099 how do free and malloc work in c 在
  • java中super不能作为构造函数第一行的解决方案

    我正在使用 CSVReader 类 该类将本地文件作为输入 但现在 我需要能够读取本地文件以及具有 URL 路径的文件 例如http example com example txt http example com example txt
  • 单击按钮时无法调用 html 中的 JavaScript 函数

    我正在制作一个 Chrome 扩展 其中有一个 html 文件 一个在新选项卡中打开修改后的链接的 JavaScript 文件 清单文件和图标 它工作正常 但现在我希望 javascript 函数仅在用户单击按钮时才工作 所以我在html文
  • 2013 年的浏览器支持 Web MIDI API?

    有谁知道是否有支持 Web MIDI 的浏览器 我已经尝试过样品http webaudio github io web midi api http webaudio github io web midi api 但他们向我抛出一个错误 说我
  • 将意图从主活动发送到两个片段

    我有2个Fragment我必须发送一些 id 到Fragment 我用这个 public void onItemLongClick View view int position FragmentManager fm getSupportFr
  • 如何配置 ASP.Net OutputCache 以根据 http 与 https 进行变化?

    以下是这样的场景 用户在浏览器中从我们的 WebApp 打开非安全页面 我们称之为 PageA 然后单击其中的链接将他们带到 PageB 的安全实例 进入 PageB 后 用户随后可以单击一个链接 将他们带回到 PageA 的安全实例 他们
  • ETXTBSY 以及如何覆盖它

    我需要写入正在执行的可执行文件 但无法打开它进行写入 例如 include
  • 如何按 MAX(日期) 进行选择?

    这是表结构 CREATE TABLE reports report id int 11 NOT NULL auto increment computer id int 11 NOT NULL default 0 date entered d
  • 在处理网络连接时有没有办法利用多核?

    当我们进行网络编程时 无论使用多进程 多线程还是select poll epoll 都只有一个进程 线程来处理同一端口上的连接 如果你想利用多核 你需要创建工作进程 线程 但是处理网络连接的界限又如何呢 在处理网络连接时有没有办法利用多核
  • 如何限制网站的某个部分,使其一次只能由一台计算机查看? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 创建控制器时,调用目标引发了异常

    我是 ASP NET MVC 5 的初学者 正在构建一个小型应用程序 当我添加控制器时 弹出一条消息 运行所选代码生成器时出错 调用目标已引发异常 在添加控制器之前 我在 Web Config 文件中添加了一个连接字符串 请告诉我如何解决这
  • 如何使用SQL组过滤具有最大日期值的行

    我有下表 CREATE TABLE Test Id int value varchar 20 adate varchar 20 INSERT INTO Test Id value adate VALUES 1 100 2014 01 01
  • 从程序文件访问时文件访问被拒绝

    我有一个用 VS 2010 和 C 开发的小型 Winform 应用程序 并创建了设置 我已将应用程序配置文件放入应用程序文件夹路径中以保存用户凭据 安装后应用程序无法访问配置文件 因为我给定了程序安装默认路径 如下所示 ProgramFi
  • 将数组作为 x-www-form-urlencoded 的一部分发送

    I want to send array using postman the request looks like this Im using postman to execute requests I found on the inter
  • 如何通知另一个线程

    我想知道如何通知另一个线程的最佳方式 例如 我有一个后台线程 public void StartBackgroundThread new Thread new Runnable Override public void run Do som
  • 自定义 jQuery 下拉菜单

    我正在使用 jQuery 创建一个自定义的简单下拉菜单 该下拉菜单根据过度状态隐藏 显示元素 我现在遇到的问题是 当您查看它隐藏的显示元素时 您无法将鼠标移动到创建的下拉列表中 关于如何解决这个问题还有什么想法 有没有更简单的方法来做我所拥
  • 使用 Qt 设计应用程序

    我必须实现图形用户界面设计 选择的框架是Qt 经过一些实施工作后 出现了一些困难和问题 主要的一点是有一些花哨的设计元素 比如渐变 3D效果 阴影等等 目前使用的方法 我真的不太喜欢 是使用图形设计中的位图作为各种小部件的背景 根据元素的放
  • CVPixelBuffer 到 CIImage 总是返回 nil

    我试图将从 AVPlayerItemVideoOutput 中提取的 PixelBuffer 转换为 CIImage 但总是为零 The Code if videoOutput hasNewPixelBufferForItemTime pl