Где хранится разрешение видео в android?


Я автоматизирую одно из видео-приложений в android. Для этого мне нужно установить максимальное разрешение видео.

Я знаю, что в обычной камере я могу установить значения в

 /data/data/com.android.gallery3d/shared_prefs/com.android.gallery3d_preferences_0.xml 

Но значения, которые я там установил, просто установлены для камеры, а не для видео. Есть идеи, где хранятся значения разрешения видео?

Если есть какая-либо команда ADb для хранения разрешения кодирования видео, то это было бы еще лучше.

Ниже приведена команда adb, которую я использовал, но работает ли nto:

 adb shell am start -a android.media.action.VIDEO_CAPTURE  --ei android.intent.extras.CAMERA_FACING 1 --ei android.intent.extras.EXTRA_VIDEO_QUALITY 1  -n com.android.gallery3d/com.android.camera.CameraActivity

Недавно я также обнаружил, что

 /data/data/com.android.gallery3d/shared_prefs/com.android.gallery3d_preferences_0.xml

Файл содержит значение для самого высокого разрешения и имя ключа: : "pref_video_quality_key", но так или иначе, он только устанавливает значение камеры назад и не делает значение фронтальной камеры

1 10

1 ответ:

Вам не нужно искать это, но спросите систему.

Каждое устройство имеет своего рода поддерживаемые разрешения. Вы можете выбрать наилучший доступный размер для ваших требований:

Что делать?

Шаг 1.

Вы должны проверить поддерживаемые размеры. Вы можете сделать это с помощью

Camera.Parameters p = myCamera.getParameters(); 
List<Size> previewsizes = p.getSupportedPreviewSizes();
List<Size> videosizes = p.getSupportedVideoSizes();

И затем, вы можете выбрать один. Если вы хотите автоматизировать это, вы можете пойти дальше и следовать

Шаг 2

Напишите функцию для выбора наилучший доступный размер, который получит поддерживаемые размеры и желаемый размер. Вы можете получить размер, отношение которого ближе к желаемому, и если ни один не достаточно хорош, вы получаете тот, высота которого близка к желаемому, или вы можете получить только самый большой что-то вроде:

public static final int BEST_RATIO=0;
public static final int IMPORTANT_HEIGHT=2;
public static final int IMPORTANT_WIDTH=1;
public static final int BIGGEST=3;

private Size getOptimalPreviewSize(List<Size> sizes, int w, int h, int mode) {
    final double ASPECT_TOLERANCE = 0.2;
    double targetRatio = (double) w / h;
    if (sizes == null)
        return null;

    Size optimalSize = null;
    double minDiff = Double.MAX_VALUE;

    int targetHeight = h;

   if (mode==BEST_RATIO)
   {  for (Size size : sizes) {
        Log.d("Camera", "Checking size " + size.width + "w " + size.height
                + "h");
        double ratio = (double) size.width / size.height;
        if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE)
            continue;
        if (Math.abs(size.height - targetHeight) < minDiff) {
            optimalSize = size;
            minDiff = Math.abs(size.height - targetHeight);
        }
    }
   }


   if (mode= IMPORTANT_HEIGHT) { //you can do other for width
        minDiff = Double.MAX_VALUE;
        for (Size size : sizes) {
            if (Math.abs(size.height - targetHeight) < minDiff) {
                optimalSize = size;
                minDiff = Math.abs(size.height - targetHeight);
            }
        }
    }
     if (mode=IMPORTANT_WIDTH) { //you can do other for width
        minDiff = Double.MAX_VALUE;
        for (Size size : sizes) {
            if (Math.abs(size.Width - targetWidth) < minDiff) {
                optimalSize = size;
                minDiff = Math.abs(size.Width - targetWidth);
            }
        }
    }   

  else  { 
       minDiff = 0;
       for (Size size : sizes) {
           if (  size.height * size.width > minDiff ) {
               optimalSize = size;
               minDiff = size.height * size.width ;
           }
       }
   }
  return optimalSize;
}

И на последнем шаге задайте параметры

Шаг 3

private int desiredwidth=640, desiredheight=360; 

Size optimalPreviewSize = getOptimalPreviewSize(previewsizes, desiredwidth, desiredheight,BIGGEST);         

Size optimalVideoSize = getOptimalPreviewSize(videosizes, desiredwidth, desiredheight,BIGGEST);      

p.setPreviewSize(optimalPreviewSSize.width, optimalPreviewSSize.height);
CamcorderProfile profile = CamcorderProfile.get(cameraid, CamcorderProfile.QUALITY_LOW);
 profile.videoFrameHeight= optimalVideoSize.height;
 profile.videoFrameWidth=optimalVideoSize.with;
 mCamera.unlock();
 mMediaRecorder.setCamera(mCamera);
 mMediaRecorder = new MediaRecorder();
 mMediaRecorder.setVideoSize(optimalVideoSize.width, optimalVideoSize.height);
 myCamera.setParameters(p);