我正在学习Grafika的“连续捕获”(Continuous Capture)活动,这是关于使用MediaCodec录制视频的内容。
该活动源代码位于 https://github.com/google/grafika/blob/master/src/com/android/grafika/ContinuousCaptureActivity.java。
该程序使用SurfaceTexture对象来接收来自相机的数据,并使用此SurfaceTexture对象创建了两个EGLSurface对象,其中一个EGLSurface对象将数据提供给MediaCodec,另一个将数据提供给用于相机预览的SurfaceView。MediaCodec对数据进行H.264编码,而MediaMuxer对象将H.264数据写入MP4文件。
但是,相机支持的预览大小为横向(宽>高),例如1920*1080、1440*1080、720*480等。通常,在录制视频时我们拿着手机是竖直方向的,因此我们应该使用API:Camera.setDisplayOrientation(90)将图像旋转为竖屏模式,然后就可以录制竖屏视频了。
该活动源代码位于 https://github.com/google/grafika/blob/master/src/com/android/grafika/ContinuousCaptureActivity.java。
该程序使用SurfaceTexture对象来接收来自相机的数据,并使用此SurfaceTexture对象创建了两个EGLSurface对象,其中一个EGLSurface对象将数据提供给MediaCodec,另一个将数据提供给用于相机预览的SurfaceView。MediaCodec对数据进行H.264编码,而MediaMuxer对象将H.264数据写入MP4文件。
但是,相机支持的预览大小为横向(宽>高),例如1920*1080、1440*1080、720*480等。通常,在录制视频时我们拿着手机是竖直方向的,因此我们应该使用API:Camera.setDisplayOrientation(90)将图像旋转为竖屏模式,然后就可以录制竖屏视频了。
但我想用手持竖直的手机录制风景视频,我必须从相机中裁剪每一帧。我的方法是将每个画面图片的底部和顶部剪掉,只保留图片中间部分,然后左侧的图片就会变成横向的。
但我不熟悉OpenGL,我不知道如何裁剪SurfaceTexture数据。有谁擅长OpenGL能够给我些帮助吗?
updateGeometry()
函数使用相机的宽度/高度来设置输出矩形的大小,以保持相同的纵横比。这将需要是一个正方形。 - fadden