我正在学习 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 文件。
但是有一个问题,相机支持的预览尺寸是landspace(宽>高)如1920*1080、1440*1080、720*480等。通常我们在录制视频时手机是纵向的,所以我们应该使用API:Camera.setDisplayOrientation(90) 将图片旋转为纵向,然后录制纵向视频。
但是我想用手中的手机人像录制横向视频,我必须从相机中裁剪每一帧。我的方法是把每一帧画面的底部和顶部都剪掉,保留画面的中间,那么左边的画面就是横向的了。
但是我对opengl不熟悉,我不知道如何裁剪SurfaceTexture数据。有擅长opengl的人能给我一些帮助吗?