2011-11-24 18 views
5

nella mia app per Android, ho osservato che il video registrato dalla fotocamera frontale viene registrato con 7-10 fps mentre la fotocamera posteriore fa bene il lavoro, l'app nativa della videocamera registra video dalla camma anteriore a 29fps.Impossibile ottenere una frequenza fps elevata (fotogrammi al secondo) (circa 30 fps) durante la registrazione dalla fotocamera anteriore nella mia app per Android

Io uso la seguente funzione per impostare il frame rate

myRecorder.setVideoFrameRate(30); 

ma in qualche modo si registra a 8 fps. qual è il problema? Anche le condizioni di illuminazione sembrano migliorare a 15 fps, ma voglio che sia> 25fps almeno come posso ottenere questo? Possiamo usare NDK per questo scopo?

risposta

2

Sto esplorando lo stesso problema. Poiché MediaRecorder dispone già di un'implementazione nativa, l'utilizzo di NDK non sembra un approccio promettente all'aumento dei frame al secondo. Migliorare il buffering con setPreviewCallbackWithBuffer come mostrato nel codice http://www.androidadb.com/source/cellbots-read-only/experimental/android/ioio/samples/ShootOnSight/src/com/cellbots/ioioshoot/CameraView.java.html sembra promettente, ma prima vorrei ottenere una migliore comprensione dei numerosi parametri della fotocamera e di come influenzano la frequenza dei fotogrammi.

Come sicuramente sapete, c'è una vasta gamma di dispositivi Android con una vasta gamma di funzionalità della fotocamera. Per visualizzare le funzionalità delle tue fotocamere anteriori e posteriori, puoi utilizzare il seguente codice (ad esempio, impostando mCameraId su 0 per il lato posteriore e 1 per il lato anteriore).

Camera mCamera = Camera.open(mCameraId); 
    Camera.Parameters cp = mCamera.getParameters(); 
    Log.d(TAG, "camera parameters: " + cp.flatten()); 

Ad esempio, ecco i parametri della telecamera scaricati dal mio Nexus S (con sistema operativo 4.0.4).

NEXUS-S FRONT PARAMETRI fronte fotocamera:
06-16 15: 14: 16,909: D/SENSORS_PLUS (24583): parametri della telecamera:
picture-size-valori = 640x480;
preview-fps-range = 7500,30000;
min-exposure-compensation = -4;
angolo di visione verticale = 39,4;
angolo di vista orizzontale = 51,2;
whitebalance = auto;
jpeg-thumbnail-height = 120;
jpeg-quality = 100;
preview-format-values ​​= yuv420sp, yuv420p;
rotazione = 0;
jpeg-thumbnail-quality = 100;
focus-mode = fixed;
preview-format = yuv420sp;
preview-size = 640x480;
lunghezza focale = 0,9;
formato video-frame = yuv420p;
picture-format-values ​​= jpeg;
compensazione dell'esposizione massima = 4;
compensazione dell'esposizione = 0;
preview-frame-rate-values ​​= 15;
fase di compensazione dell'esposizione = 0.5;
preview-frame-rate = 15;
valori effetto = nessuno, mono, negativo, seppia;
focus-mode-values ​​= fixed;
dimensioni immagine = 640x480;
effect = none;
jpeg-thumbnail-width = 160;
valori di bilanciamento del bianco = auto, incandescenza, fluorescenza, luce diurna, luce diurna;
picture-format = jpeg;
distanza-fuoco = 0,20,0,25, Infinito;
preview-fps-range-values ​​= (7500,30000);
jpeg-thumbnail-size-values ​​= 160x120,0x0;
preview-size-valori = 640x480,320x240,176x144

NEXUS-S Lato rivolto CAMERA parametri:
06-16 15: 46: 55.315: D/SENSORS_PLUS (24732): Parametri fotocamera:
picture- size-values ​​= 2560x1920,2048x1536,1600x1200,1280x960,640x480;
preview-fps-range = 15000,30000;
min-exposure-compensation = -4;
angolo di visione verticale = 39,4;
angolo di vista orizzontale = 51,2;
whitebalance = auto;
jpeg-thumbnail-height = 240;
scene-mode = auto;
jpeg-quality = 100;
preview-format-values ​​= yuv420sp, yuv420p;
rotazione = 0;
jpeg-thumbnail-quality = 100;
focus-mode = auto;
preview-format = yuv420sp;
preview-size = 720x480;
lunghezza focale = 3,43;
formato video-frame = yuv420p;
picture-format-values ​​= jpeg;
compensazione dell'esposizione massima = 4;
valori di modalità flash = on, off, auto, torcia;
compensazione dell'esposizione = 0;
preview-frame-rate-values ​​= 30;
fase di compensazione dell'esposizione = 0,5;
preview-frame-rate = 30;
flash-mode = off;
valori effetto = nessuno, mono, negativo, seppia;
focus-mode-values ​​= auto, infinito, macro;
dimensioni immagine = 2560x1920;
effect = none;
jpeg-thumbnail-width = 320;
valori di bilanciamento del bianco = auto, incandescenza, fluorescenza, luce diurna, luce diurna;
scene-mode-values ​​= auto, ritratto, paesaggio, notte, spiaggia, neve, tramonto, fuochi d'artificio, sport, festa, lume di candela;
picture-format = jpeg;
distanza-fuoco = 0,10,1.20, infinità;
preview-fps-range-values ​​= (15000,30000);
jpeg-thumbnail-size-values ​​= 320x240,0x0;
Preview-size-valori = 720x480,640x480,352x288,176x144

+0

questo è bello e auto esplicativo, ma come faccio ad aumentare il frame rate? Hai provato il codice cellbots? Dubito che funzioni. Forse un piccolo controllo sui parametri della telecamera avrebbe dovuto essere fornito dal team di Google Android. –

+0

Avrei dovuto riassumere quella lunga risposta. In breve, sto appena iniziando a guardare ad aumentare il frame rate, ma sono abbastanza sicuro che NDK non è il miglior percorso per farlo. Mi sembra che i parametri della fotocamera siano la frutta bassa che deve essere provata prima. Un esempio di impostazione dei parametri della telecamera è disponibile su http://developer.android.com/guide/topics/media/camera.html#using-features – gregS

1

seguente impostazione opere per qualche mobile per il 30 FPS.

Camera.Parameters parms = camera.getParameters(); 
    parms.setRecordingHint(true); 
    camera.setParameters(parms);