安卓手机中SDL窗口/纹理分辨率问题

3

我正在尝试在Android手机上通过RTSP协议流式传输视频。我创建了一个应用程序,该应用程序通过RTSP协议接收数据包,使用FFMPEG进行解码,并使用SDL 2.0将其呈现到窗口中。在该应用程序中,创建SDL窗口和SDL纹理如下:

screen = SDL_CreateWindow ("Test ffmpeg",SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 1280, 720, SDL_WINDOW_SHOWN|SDL_WINDOW_FULLSCREEN ); 

bmp = SDL_CreateTexture  (renderer, SDL_PIXELFORMAT_IYUV, SDL_TEXTUREACCESS_STREAMING, 1280, 720);

这个应用在三星 Galaxy S3 上运行流畅(没有任何闪烁或失真),但在 HTC Sensation XE、三星 Galaxy Grand 和 Sony Xperia S 上,会出现很多闪烁和失真。当我尝试在上述两个功能中降低分辨率(即创建纹理和创建窗口,HTC Sensation XE 为 640*360,三星 Galaxy Grand 为 800*480),应用程序就可以流畅运行。现在我有两个问题:

  1. 为什么除了三星 Galaxy S3(以上提到的所有手机之外)其他手机无法流畅播放更高分辨率的视频(1280*720)?
  2. 在所有三星 Galaxy S3 手机上,我都能看到一层红色叠加。有人知道这种红色叠加的原因吗?

关于第二个问题,请参见https://bugzilla.libsdl.org/show_bug.cgi?id=2291,这是一个已知的“错误”,那里列出了解决方法。 另外,值得一提的是,SDL2 for Android会忽略您请求的窗口大小,并使用显示器的本机分辨率。 - gabomdq
1个回答

2

关于问题2,我通过在开发者选项菜单中禁用硬件覆盖选项(设置 -> 开发人员选项 -> 选中“禁用硬件覆盖”复选框)解决了三星Galaxy S3手机的红色显示问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接