2011-05-09 16 views
7

Estoy escribiendo una aplicación donde estoy permitiendo que el usuario capture video usando la cámara del teléfono. Estoy usando mi propio código para grabar el video en lugar de la aplicación de cámara Androids integrada.¿Cómo obtener resoluciones compatibles de cámaras de video en Android?

Todo funciona bien, salvo que necesito poder acceder a la lista de resoluciones de cámara admitidas para poder elegir en tiempo de ejecución cuál usar. Estoy buscando algo como getSupportedPictureSizes() pero para video. Android 3.0 tiene esta funcionalidad, pero estoy buscando algo para 2.2.

En este momento estoy usando CamcorderProfile.QUALITY_HIGH/QUALITY_LOW, pero esto solo me da dos opciones y en los teléfonos que he probado, los tamaños de archivo son extremos (QUALITY_LOW es 216 kb/sy QUALITY_HIGH es> 3 MB/s)

Cualquier ayuda sería muy apreciada, ¡Gracias!

Respuesta

9

¿Intentó utilizar el getSupportedVideoSizes() method de la clase Camera.Parameters?

public List<Camera.Size> getSupportedVideoSizes() 

Este método devuelve una lista de objetos Tamaño. Devolverá null si la cámara no tiene vista previa y salida de video por separado. The answer here indica que cuando esto devuelve null puede usar la lista getSupportedPreviewSizes().

+1

Gracias! pero desafortunadamente eso no se implementó hasta API 11 (Android 3) y estoy en API 8 (2.2). Lo encontré la otra noche y me tomó media hora de maldición descubrir que no estaba en mi api. – jln646v

+0

Ok, creo que lo descubrí. Parece que funciona correctamente en los teléfonos con los que he estado probando. – jln646v

+0

Probé esto en el Nexus S con Android 4.0.3, y * siempre * devuelve null! –

5

Ok, creo que lo descubrí. Parece que funciona correctamente en los teléfonos en los que he estado probando.

List<Size> tmpList = camera.getParameters().getSupportedPreviewSizes(); 

    final List<Size> sizeList = new Vector<Size>(); 

    //compair the apsect ratio of the candidate sizes against the real ratio 
    Double aspectRatio = (Double.valueOf(getWindowManager().getDefaultDisplay().getHeight())/getWindowManager().getDefaultDisplay().getWidth()); 
    for(int i=0; i<tmpList.size(); i++){ 
     Double tmpRatio = Double.valueOf(tmpList.get(i).height)/tmpList.get(i).width; 
     if(Math.abs(aspectRatio - tmpRatio) < .15){ 
      sizeList.add(tmpList.get(i)); 
     } 
    } 
+0

Esto solo funciona en algunos teléfonos. Mi HTC Desire Z se bloqueará al configurar muchos de los modos enumerados por este método. –

+0

@ jln646v, ¿esta solución todavía funciona para usted? – Felix

+0

Creo que este es el código que todavía estoy usando. En algunos dispositivos (los dispositivos Motorolla parecen hacer esto) getSupportedPreviewSizes() parece devolver algunos tamaños que no funcionarán, lo que hace que el video se corrompa con líneas verdes y tal. ¿Qué problemas tienes? – jln646v

Cuestiones relacionadas