我正在开发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);
}
Al对象正在初始化。没有错误,一切看起来像是图像被渲染到内存中。
这是我的代码,我创建了一个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
}
以下代码行是我将pixeldata指针传递给videoframe对象的地方:
// fill frame with buffer
videoFrame->GetBytes((void**)[frame renderToDeckLink]);
// schedule frame
[self scheduleVideoFrame];
// release pixeldata
[frame releaseData];
}
一切都在编译。 Pixeldata正在屏幕外呈现。帧正确安排并在decklink设备上播放。但我得到的只是黑屏。也许指向pixeldata的指针有问题?我无法确定故障的位置。
欢迎任何帮助!
THX 托马斯