Grz*_*icz 4 java video android android-mediacodec
我开始为应用程序解码/编码视频,似乎BigFlake 的网站是工作视频代码的权威参考。我已将ExtractMpegFramesTest_egl14.java复制到我的项目中,并将其修改为使用不同的文件路径,但仅此而已。它从我复制到设备中的预先录制的视频中正确提取帧。然而,当尝试将它与从设备相机录制的视频一起使用时,我得到的帧只是水平线:
在测试了不同录制的视频后,我意识到问题来自旋转视频。该设备的摄像头对来自帧缓冲区的帧进行编码,然后在视频上添加旋转标签。这可以从对象中提取MediaFormat:
int rotation = format.getInteger("rotation-degrees");
Run Code Online (Sandbox Code Playgroud)
不幸的是,交换已保存图像的宽度/高度不会改变任何内容,图像仍然会损坏。必须对保存代码执行哪些操作才能正确处理旋转帧?
正如另一个答案指出的源代码注释所暗示的那样,OpenGL需要转换图像。原始invert布尔值有助于处理未旋转或旋转 180 度的源。但其他方向(90 和 270)将显示翻转的图像,因此它们也必须翻转。
以下是我为正确处理旋转所做的更改:
rotation-degrees从源媒体读取属性(如果可用)。CodecOutputSurface构造函数以接受数字旋转参数,该参数存储在mRotation实例变量中。invert代码,当旋转为0或180时使用。您可以从以下要点中获取完整的修改版本,并查看上面提到的各个更改。
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |