Проблемы с ориентацией при записи видео в портретном режиме Android-графика - PullRequest
0 голосов
/ 29 ноября 2018

Я устанавливаю режим ориентации устройства Landscape, после чего он отлично сохраняет видео.если я снимаю видео с обеих сторон.

Но я устанавливаю ориентацию устройства Portrait Режим этой работы странный.

Например:

Ниже снимок экрана при записи видео:

image

But when i save the video and see in MXPlayer then it's look like this:

image

I use below code :

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);
        }

UPDATE:

Also i try to add setOrientationHint где я начинаю MediaMuxer

1 Ответ

0 голосов
/ 01 декабря 2018

Наконец, через 2 дня я решаю свою проблему.

Это решение для Grafika ContinuousCaptureActivity.java

В drawFrame() Метод я изменю некоторый коддля portrait.

Я добавляю ниже 2 строк в методе drawFrame:

Matrix.rotateM(mTmpMatrix, 0, 270, 0, 0, 1);
Matrix.translateM(mTmpMatrix, 0, -1, 0, 0); 

В drawFrame Типе метода 2 для установки glViewport

  • Первый для Заполните SurfaceView этим .(это означает, что это изменение ориентации при записи видео пользователем)
  • Секунда для Отправьте его на видеокодер .(это означает, что это изменение ориентации после сохранения видео)

Так что я буду меняться во 2-м варианте

Пожалуйста, найдите полный код ниже:

 // 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();
...