gpt4 book ai didi

objective-c - 将视频帧绘制为 GL_TEXTURE_RECTANGLE_EXT 或 GL_TEXTURE_2D

转载 作者:行者123 更新时间:2023-12-03 17:02:58 26 4
gpt4 key购买 nike

我正在开发一个 mac (objective-c) 应用程序,它将视频帧发送到 Syphon .

尽管我很想说我已经有了这个项目的起点,但我只得到了一些垃圾代码,包括 OpenGL.frameworkAVFoundation 和项目中的 Syphon.framework

我以为this问题可能有助于逐帧加载视频,并且 this关于使用 OpenGL 播放视频的问题,但都没有真正成功。

我一直在对 AVFoundation 进行一些研究,似乎有多种方法可以加载视频,但我无法看到加载单个帧

这是我的目标:

  1. 将视频作为 mov 加载到应用程序中。 (视频将具有恒定的帧速率)
  2. 从视频文件的第 n 帧创建 GL_TEXTURE_RECTANGLE_EXT 或 GL_TEXTURE_2D
  3. 它必须能够达到最低 30fps(按顺序选择和绘制帧)

如果有人可以推荐这个方向,这将为我真正开始提供一个很好的方向。我真的不知道如何实现目标 1,更不用说目标 2了。

最佳答案

我已经实现了一个类似的应用程序,但它加载的是静态图像,而不是 .mov。我建议从单个帧获取 NSImage。 (不知 Prop 体该怎么做)

然后,从 NSImage 中获取纹理:

- (void)textureFromImage:(NSImage*)theImg textureName:(GLuint*)texName
{
NSBitmapImageRep* bitmap = [NSBitmapImageRep alloc];
int samplesPerPixel = 0;
NSSize imgSize = [theImg size];

[theImg lockFocus];
[bitmap initWithFocusedViewRect:
NSMakeRect(0.0, 0.0, imgSize.width, imgSize.height)];
[theImg unlockFocus];

// Set proper unpacking row length for bitmap.
glPixelStorei(GL_UNPACK_ROW_LENGTH, [bitmap pixelsWide]);

// Set byte aligned unpacking (needed for 3 byte per pixel bitmaps).
glPixelStorei (GL_UNPACK_ALIGNMENT, 1);

// Generate a new texture name if one was not provided.
if (*texName == 0)
glGenTextures (1, texName);
glBindTexture (GL_TEXTURE_RECTANGLE_EXT, *texName);

// Non-mipmap filtering (redundant for texture_rectangle).
glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
samplesPerPixel = [bitmap samplesPerPixel];

// Nonplanar, RGB 24 bit bitmap, or RGBA 32 bit bitmap.
if(![bitmap isPlanar] &&
(samplesPerPixel == 3 || samplesPerPixel == 4))
{
glTexImage2D(GL_TEXTURE_RECTANGLE_EXT, 0,
samplesPerPixel == 4 ? GL_RGBA8 : GL_RGB8,
[bitmap pixelsWide],
[bitmap pixelsHigh],
0,
samplesPerPixel == 4 ? GL_RGBA : GL_RGB,
GL_UNSIGNED_BYTE,
[bitmap bitmapData]);
}
else
{
// Handle other bitmap formats.
}

// Clean up.
[bitmap release];
}

帧速率将由运行这些操作的 NSTimer 确定。

如果所有这些都不起作用,请看看这个开源电影播放器​​( http://v002.info/plugins-sources/v002-movie-player-beta/ ),也许这可以帮助您获得更接近 Siphon 示例实现的解决方案。祝你好运(:

关于objective-c - 将视频帧绘制为 GL_TEXTURE_RECTANGLE_EXT 或 GL_TEXTURE_2D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22444460/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com