首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在肖像模式android grafika拍摄视频时的定位问题

在肖像模式android grafika拍摄视频时的定位问题
EN

Stack Overflow用户
提问于 2018-11-29 07:31:31
回答 1查看 257关注 0票数 3

我设置了设备定位Landscape模式,然后它完美地保存了视频。如果我能拍到双方的视频。

但是我设置了设备方向Portrait模式--这个工作方式很奇怪。

例如:

下面是我录制视频时的截图:

但是当我保存视频并在MXPlayer中看到时,它是这样的:

我使用以下代码:

代码语言:javascript
复制
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的地方添加setOrientationHint

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-01 06:33:50

最后两天后,我解决了我的问题。

Grafika ContinuousCaptureActivity.java的这种解决方案

drawFrame()方法中,我将更改portrait的一些代码。

我在drawFrame方法中添加了以下2行:

代码语言:javascript
复制
Matrix.rotateM(mTmpMatrix, 0, 270, 0, 0, 1);
Matrix.translateM(mTmpMatrix, 0, -1, 0, 0); 

drawFrame方法2中,输入设置glViewport

  • 首先,对于,使用填充。(这意味着用户在录制视频时改变了方向)
  • 第二,对于,将其发送到视频编码器。(这意味着在保存视频后,这个方向发生了变化)

,所以我要换第二种选择,

请在下面找到完整的代码:

代码语言:javascript
复制
 // 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();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53533890

复制
相关文章

相似问题

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