public static VideoQuality determineClosestSupportedResolution(Camera.Parameters parameters,VideoQuality quality){
  VideoQuality v=quality.clone();
  int minDist=Integer.MAX_VALUE;
  String supportedSizesStr="Supported resolutions: ";
  List<Size> supportedSizes=parameters.getSupportedPreviewSizes();
  for (Iterator<Size> it=supportedSizes.iterator(); it.hasNext(); ) {
    Size size=it.next();
    supportedSizesStr+=size.width + "x" + size.height+ (it.hasNext() ? ", " : "");
    int dist=Math.abs(quality.resX - size.width);
    if (dist < minDist) {
      minDist=dist;
      v.resX=size.width;
      v.resY=size.height;
    }
  }
  Log.v(TAG,supportedSizesStr);
  if (quality.resX != v.resX || quality.resY != v.resY) {
    Log.v(TAG,"Resolution modified: " + quality.resX + "x"+ quality.resY+ "->"+ v.resX+ "x"+ v.resY);
  }
  return v;
}

public static VideoQuality determineClosestSupportedResolution ( Camera . Parameters parameters , VideoQuality quality ) { VideoQuality v = quality . clone ( ) ; int minDist = Integer . MAX_VALUE ; String supportedSizesStr = "Supported resolutions: " ; List < Size > supportedSizes = parameters . getSupportedPreviewSizes ( ) ; for ( Iterator < Size > it = supportedSizes . iterator ( ) ; it . hasNext ( ) ; ) { Size size = it . next ( ) ; supportedSizesStr += size . width + "x" + size . height + ( it . hasNext ( ) ? ", " : "" ) ; int dist = Math . abs ( quality . resX - size . width ) ; if ( dist < minDist ) { minDist = dist ; v . resX = size . width ; v . resY = size . height ; } } Log . v ( TAG , supportedSizesStr ) ; if ( quality . resX != v . resX || quality . resY != v . resY ) { Log . v ( TAG , "Resolution modified: " + quality . resX + "x" + quality . resY + "->" + v . resX + "x" + v . resY ) ; } return v ; }
checks if the requested resolution is supported by the camera . if not , it modifies it by supported parameters .
