Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 使用Opengles着色器显示YUV420数据太慢_Iphone_Opengl Es_Ffmpeg_Yuv - Fatal编程技术网

Iphone 使用Opengles着色器显示YUV420数据太慢

Iphone 使用Opengles着色器显示YUV420数据太慢,iphone,opengl-es,ffmpeg,yuv,Iphone,Opengl Es,Ffmpeg,Yuv,我有一个名为a的子线程在iPhone 3GS上使用ffmpeg解码视频,另一个名为B的线程显示yuv数据,在线程B中,我使用glSubTexImage2D上传Y U V纹理,然后在着色器中将yuv数据转换为RGB,但解码线程中的帧速率只有15fps。为什么 更新: 帧大小为720*576。 我还发现了一些有趣的事情,如果我没有启动显示YUV数据的线程,解码线程中计算的帧速率是22 fps,否则是15 fps。因此我认为我的显示方法一定是低效的。代码如下 我在解码线程中有一个回调: typedef

我有一个名为a的子线程在iPhone 3GS上使用ffmpeg解码视频,另一个名为B的线程显示yuv数据,在线程B中,我使用glSubTexImage2D上传Y U V纹理,然后在着色器中将yuv数据转换为RGB,但解码线程中的帧速率只有15fps。为什么

更新: 帧大小为720*576。 我还发现了一些有趣的事情,如果我没有启动显示YUV数据的线程,解码线程中计算的帧速率是22 fps,否则是15 fps。因此我认为我的显示方法一定是低效的。代码如下

我在解码线程中有一个回调:

typedef struct _DVDVideoPicture
{
   char *plane[4];
   int iLineSize[4];
}DVDVideoPicture;

void YUVCallBack(void *pYUVData, void *pContext)
{
   VideoView *view = (VideoView *)pContext;
   [view.glView copyYUVData:(DVDVideoPicture *)pData];
   [view calculateFrameRate];
}

copyYUVData方法分别提取y u v平面。以下是显示线程方法。

我有点困惑。您是说您的FFMpeg解码仅以15 FPS的速度进行,还是通过着色器进行的上载和处理仅以15 FPS的速度进行?我们这里说的是什么尺寸的框架?你的YUV->RGB着色器是什么样子的?换句话说,FFmpeg每秒解码多少帧?这可能是ffmpeg方面的限制,而不是您的着色器。@Brad Larson我更新了我的问题,帧大小是720*576@karlphillip我不这么认为。我不会放弃FPS。瓶颈在于解码。尝试在着色器中注释rgb的计算,然后注释解码保持一个恒定帧并比较FPS结果。