在人像模式下录制视频时的方向问题android grafika
我设置了设备方向在人像模式下录制视频时的方向问题android grafika,android,orientation,android-mediacodec,grafika,Android,Orientation,Android Mediacodec,Grafika,我设置了设备方向横向模式,然后它完美地保存了视频。 如果我拍摄了一段双面的视频 但是我设置了设备的方向纵向模式,这工作很奇怪 例如: 下面是我录制视频时的屏幕截图: 但当我保存视频并在MXPlayer中查看时,它看起来是这样的: 我使用以下代码: Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); if (display.getRotation()
横向
模式,然后它完美地保存了视频。
如果我拍摄了一段双面的视频
但是我设置了设备的方向纵向
模式,这工作很奇怪
例如:
下面是我录制视频时的屏幕截图:
但当我保存视频并在MXPlayer中查看时,它看起来是这样的:
我使用以下代码:
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
if (display.getRotation() == Surface.ROTATION_0) {
mCamera.setDisplayOrientation(90);
// layout.setAspectRatio((double) cameraPreviewSize.height / cameraPreviewSize.width);
} else if (display.getRotation() == Surface.ROTATION_270) {
// layout.setAspectRatio((double) cameraPreviewSize.height / cameraPreviewSize.width);
mCamera.setDisplayOrientation(180);
} else {
// Set the preview aspect ratio.
//layout.setAspectRatio((double) cameraPreviewSize.width / cameraPreviewSize.height);
}
更新:
此外,我还尝试添加,在那里我启动了
MediaMuxer
,2天后我终于解决了我的问题
此解决方案适用于Grafika
ContinuousCaptureActivity.java
在drawFrame()
方法中,我将更改纵向的一些代码
我在drawFrame
方法中添加了以下两行:
Matrix.rotateM(mTmpMatrix, 0, 270, 0, 0, 1);
Matrix.translateM(mTmpMatrix, 0, -1, 0, 0);
在drawFrame
Method 2中键入以设置glViewport
- 首先为填充
表面视图
。(这意味着在用户录制视频时方向会发生变化)
- 第二个用于将其发送到视频编码器。(这意味着在保存视频后方向会发生变化)
因此我将在第二次操作中进行更改
请在下面找到完整代码:
// Send it to the video encoder.
if (!mFileSaveInProgress) {
mEncoderSurface.makeCurrent();
if (!AppSetting.getValue(activity, Config.ORIENTATION, "").equalsIgnoreCase("Select")) {
if (AppSetting.getValue(activity, Config.ORIENTATION, "").equalsIgnoreCase("Portrait")) {
Matrix.rotateM(mTmpMatrix, 0, 270, 0, 0, 1);
Matrix.translateM(mTmpMatrix, 0, -1, 0, 0);
}
}
GLES20.glViewport(0, 0, VIDEO_WIDTH, VIDEO_HEIGHT);
mFullFrameBlit.drawFrame(mTextureId, mTmpMatrix);
//drawExtra(mFrameNum, VIDEO_WIDTH, VIDEO_HEIGHT);
mCircEncoder.frameAvailableSoon();
mEncoderSurface.setPresentationTime(mCameraTexture.getTimestamp());
mEncoderSurface.swapBuffers();
@法登:你知道为什么在<代码>肖像代码>模式下这项工作很奇怪吗。