dra*_*fly 9 video android opengl-es crop grafika
我正在学习Grafika的"连续捕获"活动,它是关于使用MediaCodec录制视频.
活动源代码位于https://github.com/google/grafika/blob/master/src/com/android/grafika/ContinuousCaptureActivity.java
该程序使用SurfaceTexture obj从相机接收数据并使用此SurfaceTexture obj创建2个EGLSurface obj,一个EGLSurface obj将数据提供给MediaCodec,另一个将数据提供给SurfaceView以进行相机预览.MediaCodec将数据编码为h264数据,MediaMuxer obj将h264数据写入mp4文件.
但是有一个问题,相机支持的预览尺寸是空间(宽度>高度),如1920*1080,1440*1080,720*480等.通常,我们在录制视频时以纵向方式拍摄手机,因此我们应该使用API:Camera.setDisplayOrientation(90)将图片旋转为肖像,然后录制肖像视频.
但我想用手中的手机肖像录制风景视频,我必须从相机中裁剪每一帧.我的方法是切断每帧图片的底部和顶部并保留图片的中间部分,然后左图片将是一个景观图片.
但我不熟悉opengl,我不知道如何裁剪SurfaceTexture数据.任何擅长opengl的人都能给我一些帮助吗?
fad*_*den 14
看看"相机纹理"活动.请注意,它允许您以各种方式操作图像,特别是"缩放"."缩放"是通过修改纹理坐标来完成的.
该ScaledDrawable2D类做到这一点; 该setScale()呼叫改变了"缩放",而不是缩放矩形本身.纹理坐标的范围从0.0到1.0(包括0.0和1.0),并且该getTexCoordArray()方法将它们修改为跨越纹理的子集.
要剪切帧,您需要按比例修改纹理坐标.例如,如果输入视频是纵向720x1280,并且您想要720x720,则可以更改此坐标:
[0.0, 0.0] [1.0, 0.0]
[0.0, 1.0] [1.0, 1.0]
Run Code Online (Sandbox Code Playgroud)
对此:
[0.0, 280/1280.0] [1.0, 280/1280.0]
[0.0, 1000/1280.0] [1.0, 1000/1280.0]
Run Code Online (Sandbox Code Playgroud)
然后在正方形而不是矩形上渲染它.
| 归档时间: |
|
| 查看次数: |
4488 次 |
| 最近记录: |