- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试监视 FireWire 摄像机的视频输出流。我创建了一个带有按钮和 NSImageView 的 Interface Builder 界面。当图像监控发生在无限循环中时,我想:
使用按钮功能,我无法循环视频帧监视器,同时仍在寻找按钮按下(很像使用 C 中的按键功能。)有两个选项:
NSOperation
- 如何以允许我通过 Xcode 按钮推送进行连接的方式执行此操作?文档对于创建此类对象非常迟钝。如果我按照我找到的示例创建一个 NSOperation,似乎无法与 Interface Builder 中的对象进行通信。当我创建 NSRunLoop 时,出现对象泄漏错误,并且找不到如何创建实际响应我创建的 RunLoop 的自动释放池的示例。没关系,我什至没有尝试选择辅助运行循环对哪些对象进行采样...
因为 Objective C(显然!)不是我的母语,所以我正在寻找简单的解决方案,抱歉地说......提前致谢
最佳答案
我需要做的几乎与您完全相同,只是通过 FireWire 摄像头进行连续视频显示。就我而言,我使用了 libdc1394 library为我们的 FireWire 相机执行帧捕获和相机属性调整。我知道您也可以使用一些 Carbon Quicktime 函数来完成此操作,但我发现 libdc1394 更容易理解一点。
对于视频捕获循环,我尝试了多种不同的方法,从轮询相机并锁定共享资源的单独线程,到使用一个 NSOperationQueue 与相机交互,最后决定使用 CVDisplayLink以与屏幕刷新率匹配的方式轮询相机。使用以下代码配置 CVDisplayLink:
CGDirectDisplayID displayID = CGMainDisplayID();
CVReturn error = kCVReturnSuccess;
error = CVDisplayLinkCreateWithCGDisplay(displayID, &displayLink);
if (error)
{
NSLog(@"DisplayLink created with error:%d", error);
displayLink = NULL;
}
CVDisplayLinkSetOutputCallback(displayLink, renderCallback, self);
它调用以下函数来触发新相机帧的检索:
static CVReturn renderCallback(CVDisplayLinkRef displayLink,
const CVTimeStamp *inNow,
const CVTimeStamp *inOutputTime,
CVOptionFlags flagsIn,
CVOptionFlags *flagsOut,
void *displayLinkContext)
{
return [(SPVideoView *)displayLinkContext renderTime:inOutputTime];
}
使用以下命令启动和停止 CVDisplayLink:
- (void)startRequestingFrames;
{
CVDisplayLinkStart(displayLink);
}
- (void)stopRequestingFrames;
{
CVDisplayLinkStop(displayLink);
}
每当我需要调整曝光、增益等时,我都会更改相应的实例变量并在标志变量中设置适当的位来指示要更改哪些设置,而不是在 FireWire 相机通信上使用锁定。下次检索帧时,CVDisplayLink 中的回调方法会更改相机上的相应设置以匹配本地存储的实例变量并清除该标志。
屏幕的显示是通过 NSOpenGLView 处理的(CAOpenGLLayer 在以此速率更新时引入了太多视觉伪像,并且其更新回调在主线程上运行)。苹果有一些extensions you can use使用 DMA 将这些帧作为纹理提供,以获得更好的性能。
不幸的是,我在这里描述的内容都不是入门级的内容。我在我们的软件中为这些相机处理功能编写了大约 2,000 行代码,花了很长时间才弄清楚。如果 Apple 可以将手动相机设置调整添加到 QTKit Capture API,我几乎可以删除所有这些。
关于cocoa - 我应该使用 NSOperation 还是 NSRunLoop?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5316474/
崩溃发生在以下代码中: void CocoaCommRequest::launchSync() { launchAsync(); while (![_delegate finished
我的 iPhone 应用程序中有几个选项卡,需要几秒钟的时间才能加载(从本地 sqlite 数据库中提取大量数据)。当用户触摸选项卡时,应用程序似乎什么也没做。我试图放置一个显示旋转器的窗口,但是由于
我开始将 RunLoop 理解为类似于 Java 中的事件队列。我现在尝试做的 Wgat,只是为了更好地理解,是在运行自己的 RunLoop 的应用程序中创建一个后台线程。我在示例 ViewContr
我制作了一个带有计时器的 RunLoop,该计时器更新显示倒计时的标签。我需要 RunLoop 在倒计时达到零时停止,对于计时器正常完成的情况,我可以使用 runUntilDate,日期为当前日期 +
我在线程中有一个连接,因此我将其添加到运行循环中以获取所有数据: [[NSRunLoop currentRunLoop] run]; [connection scheduleInRunLoop
我有一个每 5 分钟调用一次的后台方法。 该方法使用NSURLConnection将数据发送到 Web 服务。 在那种方法中,我有这个代码: ... conn = [[NSURLConnection
我对 NSRunLoop 的实现很感兴趣,它可以在不占用大量 CPU 的情况下让线程空闲/休眠。这在 Objective-c 中是如何实现的?消耗高 CPU 的简单解决方案是 while(YES) {
在我的应用程序中,我需要对 restful web api 进行 https 调用并在返回时处理结果。同时服务调用的数量从来都不是固定的,因此相应地编写了相关代码。从服务获取的数据临时存储在应用程序内
我在自定义单元格上使用 NSTimer 运行 NSRunLoop 以持续更新“有效至”UILabel。它工作正常,直到我关闭 tableView,NSRunLoop 继续倒计时。我使用 dealloc
我不太清楚 NSRunLoop 是否线程安全。所以我需要澄清一下它是否线程安全,为什么? 任何帮助都是可观的。 最佳答案 在 NSRunLoop 的开头有一个警告 official reference
谁能解释一下什么是NSRunLoop?据我所知,NSRunLoop 是与 NSThread 相关的东西,对吗?所以假设我创建了一个像 这样的线程 NSThread* th=[[NSThread all
我刚刚在我的 ViewController 中使用 NSRunLoop 和 NSTimer 创建了一个带计时器的后台任务: - (void)runBackgroundTask: (int) time{
我读了很多关于 NSRunLoop 的帖子,比如 this , this , this .但无法弄清楚 NSRunLoop 实际上做了什么 我平时看到的是工作线程 wthread = [[NSThre
谁能解释什么是NSRunLoop?所以据我所知 NSRunLoop 是与 NSThread 相关的东西,对吗?所以假设我创建了一个像 这样的线程 NSThread* th=[[NSThread all
我试图在守护进程结束时或者有人退出该进程时释放在守护进程中分配的资源。 可以说, int main(int argc, const char * argv[]) { Controller *c
在 Cocoa 应用程序中,运行如下代码: NSDate* date = [NSDate dateWithTimeIntervalSinceNow:30.0]; while (date.timeInt
我买了《Big Nerd Ranch Guide for Objective-C》,但有一些关于 NSRunLoop 的内容我不明白。 这是书中的一段代码: NSTimer *timer = [NST
假设我有 2 个线程,一个是主线程,另一个是辅助线程。主线程使用最多,但有时(很少)我希望辅助线程根据主线程的调用执行一些工作。大多数时候辅助线程应该休眠。现在,经过一番搜索,我明白做到这一点的方法是
我正在编写一个应用程序,它必须与通过 USB 连接的设备进行通信。该应用程序按固定时间轮流从设备发送和接收数据。所有 Rx/Tx 都发生在单独的线程中,否则 UI 将被阻塞。基本结构基本上是这样的。
我正在使用 NSUrlConnection 来发出 http 请求。我想避免使用事件驱动代码,所以我通过以下方式使用 NSRunloop: NSURLRequest *request = [[NSUR
我是一名优秀的程序员,十分优秀!