Android、Open GL ES、裁剪和缩放纹理

Android、Open GL ES、裁剪和缩放纹理,android,opengl-es,Android,Opengl Es,我在视频处理方面有一些问题。我正在使用“表面纹理”(Surface with Texture)处理带有MediaCodec和MediaMuxer的视频(解码、裁剪、低质量编码)。 在中间一步,也就是裁剪,我遇到了一些问题。基本上,我想做的是把视频的尺寸缩小,然后,基于这一边,定义大一边的偏移量并裁剪出来。然后,结果应适当缩放为640x640平方米。我搜索了相当长的时间,但我找到的所有信息都表明OpenGL应该缩放图像本身。是的,我应该承认它做了一些缩放,但结果看起来很难看,它似乎很难垂直“压缩”

我在视频处理方面有一些问题。我正在使用“表面纹理”(Surface with Texture)处理带有MediaCodec和MediaMuxer的视频(解码、裁剪、低质量编码)。
在中间一步,也就是裁剪,我遇到了一些问题。基本上,我想做的是把视频的尺寸缩小,然后,基于这一边,定义大一边的偏移量并裁剪出来。然后,结果应适当缩放为640x640平方米。我搜索了相当长的时间,但我找到的所有信息都表明OpenGL应该缩放图像本身。是的,我应该承认它做了一些缩放,但结果看起来很难看,它似乎很难垂直“压缩” 所以,现在问题本身。有人能给我提供一些解释,甚至是在OpenGL ES中执行所需功能的代码片段吗?
我已经试着调整自己的想法了

GLES20.glViewport(0, 0, 640, 640)  
更新
Isogen74提出的“更多更少”的想法对我来说是可行的。它仍然拉伸得很明显,但总比什么都没有好。

在这里您可以找到更新的代码:

裁剪-在加载纹理时更改加载的纹理坐标;e、 g.如果您希望将图像加载从(0.0,0.1)裁剪到(1.0,0.9)的顶部和底部10%

缩放-答案取决于缩小到640*640的规模有多大。OpenGL过滤不是为了直接处理较大的缩小比例而设计的——它不是一个图像处理库——但假设相对较小的缩放比例,只需确保启用了GL_线性纹理过滤,而不是GL_最近的纹理过滤


如果你有一个大的缩小比例,你可能需要先mipmap纹理,然后GL_LINEAR_mipmap_NEAREST或GL_LINEAR_mipmap_LINEAR作为你的缩小过滤器,但是要知道这并不能给你带来像在图像处理软件中得到的适当的缩放算法那样好的效果(例如双三次曲线或类似的东西)。

这个缩小比例实际上可以很大。原始视频可以是任何大小,我尝试了最大可用分辨率1920x1080。感谢帮助,我将尝试mipmap选项(完全忘记它):)此外,我宁愿避免使用第三方图像处理库,因为这将大大增加处理时间。我的老板需要尽可能快的视频处理,我能够提供23秒左右的视频处理,这很好,我不想增加。