屏幕上的流相机输出:wGx vs s3e

时间:2012-04-28 12:57:21

标签: airplay marmalade

我正在尝试将手机相机的输出流式传输到屏幕上。如果使用IwGx将此输出绘制到四边形上,它会比写入s3eSurfacePtr更快吗?

我听说有些人通过使用OpenGL将他们的2D图像渲染到四边形来创建游戏,而且速度更快(因为GPU加速?)。有谁知道这是真的吗?这似乎与我上面的问题相似。

1 个答案:

答案 0 :(得分:2)

是的,我肯定会走IwGx路线。 s3eSurface在现代硬件上可能非常慢(特别是iOS平台)。

首先创建一个CIwTexture实例,禁用mip贴图并使其可修改。

CIwTexture* lpTexture = new CIwTexture;
lpTexture->SetModifiable(true);
lpTexture->SetMipMapping(false);

初始化回调方法

s3eCameraRegister(S3E_CAMERA_UPDATE_STREAMING, (s3eCallback) MyFrameDataCallback, NULL);   

启动相机运行并要求它在接收到帧时转换为RGB565。您应根据使用情况更改所需的尺寸和质量提示。这有点反复试验,因为它取决于硬件支持的内容。

s3eCameraStart(S3E_CAMERA_STREAMING_SIZE_HINT_LARGEST, S3E_CAMERA_PIXEL_TYPE_RGB565_CONVERTED, S3E_CAMERA_STREAMING_QUALITY_HINT_HIGH);

然后在相机框架回调中更新纹理

lpTexture->CopyFromBuffer(apFrame->m_Width, apFrame->m_Height, CIwImage::RGB_565, apFrame->m_Pitch, (uint8*) apFrame->m_Data, 0);
lpTexture->Upload();

apFrame是指向s3eCameraFrameData结构的指针,该结构作为第一个参数传递给回调函数。您需要在回调中进行复制,因为一旦您的回调完成,数据将不再存在,但您可能希望推迟上传,这样您只需在应用程序的每个循环执行一次。

现在您需要做的就是创建一个CIwMaterial,让它使用上面的纹理并在屏幕上渲染纹理四边形。我会把这段代码留给你,因为它很直接!