首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用MediaCodec编码Grafika“连续捕获”活动前的视频

用MediaCodec编码Grafika“连续捕获”活动前的视频
EN

Stack Overflow用户
提问于 2015-06-02 04:23:01
回答 1查看 6.3K关注 0票数 10

我正在学习Grafika的“连续捕获”活动,这是关于用MediaCodec录制一个视频。

活动源代码位于https://github.com/google/grafika/blob/master/src/com/android/grafika/ContinuousCaptureActivity.java

该程序使用SurfaceTexture obj从摄像机接收数据,并使用此SurfaceTexture obj创建2个SurfaceTexture obj,一个EGLSurface obj将数据提供给MediaCodec,另一个提要数据提供给SurfaceView以进行相机预览。MediaCodec将数据编码为h264数据,MediaMuxer obj将h264数据写入mp4文件。

但是有一个问题,相机支持的预览尺寸是陆地空间(宽度>高度),比如1920*1080,1440*1080,720*480等等。通常情况下,当我们录制视频时,我们会把手机定位在纵向,所以我们应该使用API: Camera.setDisplayOrientation(90)将图片旋转成肖像画,然后再记录一个肖像视频。

但是我想录一段带有手机肖像的风景视频,我必须从摄像机中剪下每一帧。我的方法是切断每一帧图片的底部和顶部,并保留图片的中间,然后左边的图片将是景观之一。

但是我不熟悉opengl,我不知道如何裁剪SurfaceTexture数据。任何擅长opengl的人能给我一些帮助吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-02 16:40:01

看一看“相机纹理”的活动。注意,它允许您以各种方式操作图像,特别是“缩放”。“缩放”是通过修改纹理坐标来完成的。

ScaledDrawable2D类会这样做;setScale()调用会更改“缩放”,而不是缩放rect本身。纹理坐标从0.0到1.0不等,getTexCoordArray()方法修改它们以跨越纹理的子集。

要裁剪框架,您需要按比例修改纹理坐标。例如,如果输入视频是纵向720x1280,并且您想要720x720,您可以从下面更改坐标:

代码语言:javascript
复制
[0.0, 0.0]  [1.0, 0.0]
[0.0, 1.0]  [1.0, 1.0]

对此:

代码语言:javascript
复制
[0.0, 280/1280.0]  [1.0, 280/1280.0]
[0.0, 1000/1280.0] [1.0, 1000/1280.0]

然后在正方形上而不是矩形上渲染。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30587291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档