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
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. –
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