gpt4 book ai didi

android - 在使用 MediaCodec 为 Grafika 的 "Continuous Capture" Activity 编码之前裁剪视频

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:27:28 36 4
gpt4 key购买 nike

我正在学习 Grafika 的“Continuous Capture” Activity ,它是关于使用 MediaCodec 录制视频。

Activity 源代码位于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(width > height)比如1920*1080, 1440*1080,720*480等等。通常我们录制视频时,手机是竖屏拍摄的,所以我们应该使用API​​:Camera.setDisplayOrientation(90)将图片旋转成竖屏,然后录制竖屏视频。

但是我想用我手里的手机肖像录制风景视频,我必须从相机中裁剪每一帧。我的方法是把每一帧图片的底部和顶部都剪掉,保留图片的中间部分,这样左边的图就是风景了。

但是我对opengl不熟悉,不知道如何裁剪SurfaceTexture数据。任何擅长opengl的人都可以帮助我吗?

最佳答案

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

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

要裁剪帧,您需要按比例修改纹理坐标。例如,如果输入视频是纵向 720x1280,而您想要 720x720,您可以将坐标更改为:

[0.0, 0.0]  [1.0, 0.0]
[0.0, 1.0] [1.0, 1.0]

为此:

[0.0, 280/1280.0]  [1.0, 280/1280.0]
[0.0, 1000/1280.0] [1.0, 1000/1280.0]

然后将其呈现在正方形而不是矩形上。

关于android - 在使用 MediaCodec 为 Grafika 的 "Continuous Capture" Activity 编码之前裁剪视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30587291/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com