0

我正在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设备上被正确调度和播放。但我得到的只是黑屏。所以也许指向像素数据的指针有问题?我无法确定故障在哪里。

欢迎任何帮助!

谢谢托马斯

4

0 回答 0