2011-12-30 13 views
6

Ho provato con l'applicazione fotocamera originale (modalità video) fornita con Samsung Galaxy Tab 8.9. Il video della fotocamera frontale salvato in grado di raggiungere 24 fps, 640x480. (Osservando le proprietà del file video dopo il trasferimento al computer Windows)Perché FPS non è uguale all'app della fotocamera originale

Tuttavia, mentre scrivo il codice fronte Camera per il test.

mCamera2.setPreviewCallbackWithBuffer(new PreviewCallback() { 
    public void onPreviewFrame(byte[] data, Camera camera) { 
     // image processing code placed here. 
    } 
}); 

Il risultato massimo che posso raggiungere è (senza salvare il video su disco. Ho semplicemente misurare la funzione di callback onPreviewFrame attivata rate)

  • 15 fps
  • 320x240, 800x600

Mi piacerebbe avere prestazioni identiche all'app Fotocamera originale Samsung. Posso sapere che mi manca una certa tecnica?

+0

è che facendo cattura frame crudo? anche 800x600 @ 24 bit @ 15fps = 21 mega/sec di dati. Qualunque cosa al di sopra di quella probabilmente supererebbe la velocità di scrittura della memoria flash interna. –

+0

@MarcB, per favore guarda la mia domanda rivista con maggiori dettagli. –

risposta

5

Il motivo per cui si vedono questi risultati è che la richiamata sta ricevendo un campionamento del video piuttosto che il video effettivo.

Quando la fotocamera sta scaricando, viene inviata al file system, sta eseguendo un'operazione di scrittura di livello molto basso che copia i dati dal buffer video della videocamera al file system, senza mai toccare la JVM. Questo è necessario per mantenere il video ad alta qualità e bassa latenza e garantisce un video finale uniforme. Se è necessario eseguire l'elaborazione video sul video reale, è meglio farlo dopo che il video è già stato registrato.

L'anteprima di richiamata è semplicemente dando un campione della cattura video attuale, non l'intera acquisizione video - dal momento che la maggior parte dei video 15fps saranno ancora guardare liscia, l'anteprima viene richiamata solo dando una risoluzione più bassa, più bassa fps versione di anteprima del video reale che viene catturato. Anche l'applicazione di acquisizione di Samsung incorporata mostrerà solo la versione di anteprima, perché è tutta l'interfaccia di anteprima che viene fornita.

Sarebbe impossibile ottenere un benchmark accurato della registrazione video in Android da qualsiasi altro che non sia il dump del file system o le strutture di dati dell'array di byte di basso livello (utilizzando un wrapper JNI, ad esempio). Sarebbe stato abbastanza facile, ma tentare di farlo direttamente bloccherebbe la lettura degli input dalla telecamera e soffierà comunque sui benchmark.

+1

Abbastanza interessante. Hai qualche informazione su come posso accedere direttamente al buffer video della videocamera? Per quanto riguarda le informazioni che ottengo dal gruppo Android-ndk: http://groups.google.com/group/android-ndk/browse_thread/thread/ec7e28a83fa93c8c, sembra che l'accesso alla videocamera direttamente da NDK non sia ufficialmente supportato. –

+0

Anche questo è comprensibile: non è possibile accedere al puntatore non elaborato dalla telecamera stessa tranne che per il file dopo il fatto poiché non vi sono accessor NDK/SDK. Potrebbe valere la pena di scavare nel codice sorgente di Android per vedere se ci sono dei ganci che potrebbero essere disponibili: android/framework/base/media/java/android/media/MediaRecorder.java –

+0

Oh beh, immagino che non posso fare altro fai dalla mia parte –

4

L'FPS della videocamera dipende dalle condizioni di illuminazione e dal parametro AutoExposure. Per ottenere frame rate fisso in tutte le condizioni di illuminazione (da API 14, Android 4.0):

Camera.Parameters p = camera.getParameters(); 
p.setPreviewFpsRange(30000, 30000); // for 30 fps 
if (p.isAutoExposureLockSupported()) 
    p.setAutoExposureLock(true); 
camera.setParameters(p); 
+0

C'è qualche effetto collaterale per impostare il blocco dell'esposizione automatica su true? – suitianshi

+0

Bene, immagine più scura, se questo può essere considerato come effetto collaterale. – ggurov

+0

Grazie. Ma sembra che la tua soluzione non funzioni per me. L'anteprima FPS non è stabile nell'ambiente luminoso/scuro. – suitianshi

Problemi correlati