在屏幕外渲染nsimage并设置decklink videoframe的指针

时间:2014-02-09 21:13:51

标签: objective-c xcode pointers cgimage cgbitmapcontext

我正在开发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 托马斯

0 个答案:

没有答案