我正在osx上开发。
我正在尝试设置一个指针,指向从 nsimage 对象呈现在屏幕外的像素数据。这是我的代码:
- (id)initWithFrame:(NSImage*)image
{
if (self = [super init])
{
// set size
NSRect rect = NSMakeRect(0, 0, [image size].width, [image size].height);
// set image
frameImageRef = [image CGImageForProposedRect:NULL context:NULL hints:NULL];
frameContextRef = CreateARGBBitmapContext(frameImageRef);
CGContextDrawImage(frameContextRef, rect, frameImageRef);
}
return self;
}
- (int) getBytesPerRow
{
return (int)CGImageGetBytesPerRow(frameImageRef);
}
使用以下代码,我通过设置指向我的 decklink 框架的指针
- (void*) renderToDeckLink;
{
return CGBitmapContextGetData (frameContextRef);
}
所有对象初始化良好。没有错误,一切看起来就像图像被渲染到内存中一样。
这是我的代码,我在其中创建了一个用于在 decklink 设备上播放的 decklink 帧:
- (void) createVideoFrame:(NSImage*)image
{
// clear previous videoframe
if (videoFrame != NULL)
{
videoFrame->Release();
}
这篇文章顶部的代码位于 renderFrame 类
// create renderFrame object
renderFrame *frame = [[renderFrame alloc] initWithFrame:image];
// get displaymode
IDeckLinkDisplayMode* decklinkdisplaymode = (IDeckLinkDisplayMode*)CurrentRes;
// create new videoframe on output
if (deckLinkOutput->CreateVideoFrame((int)decklinkdisplaymode->GetWidth(), (int)decklinkdisplaymode->GetHeight(), [frame getBytesPerRow], bmdFormat8BitARGB, bmdFrameFlagDefault, &videoFrame) != S_OK)
{
NSLog(@"error");
// failed to create new video frame on output
}
以下代码行是我将像素数据指针传递给视频帧对象的地方:
// fill frame with buffer
videoFrame->GetBytes((void**)[frame renderToDeckLink]);
// schedule frame
[self scheduleVideoFrame];
// release pixeldata
[frame releaseData];
}
一切都在编译。Pixeldata 正在屏幕外渲染。这些帧在decklink设备上被正确调度和播放。但我得到的只是黑屏。所以也许指向像素数据的指针有问题?我无法确定故障在哪里。
欢迎任何帮助!
谢谢托马斯