2012-01-27 20 views
13

C'è un modo per ottenere un timestamp di quando è stato catturato il frame di anteprima della videocamera Android?Android Camera Preview Frame Timestamp

  1. alcun metodo fotocamera sta tornando un timestamp
  2. non è possibile accedere fotocamera dal codice nativo
  3. dimensione del buffer non è statica (dipende dalla dimensione min anteprima acquisite dalla fotocamera - quando e se il metodo è funzionante) e se ci sono più frame nella coda allora ci sono buffer di anteprima che vengono scartati
  4. frame rate impostato (ancora, se/quando il metodo funziona) è solo un suggerimento per il sistema, la telecamera può ignorare il valore. Lo stesso vale per il frame rate che la fotocamera sta restituendo.

Sto facendo un po 'di elaborazione pesante delle immagini in tempo reale, e i piccoli errori se sommati insieme sono un vero problema.

+0

Si riferisce al callback onPreviewFrame, giusto? Ci dovrebbero essere dati EXIF ​​nel byte [] che viene passato, supponendo che sia almeno un JPEG. – michaelg

+0

Per quanto ne so, non c'è nessun exif nei dati, solo immagine raw – LambergaR

+0

Per mancanza di EXIF: Non sono sicuro se questo funzionerà, ma hai provato ad impostare esplicitamente il formato di anteprima su ImageFormat.jpeg? Il formato NV21 (predefinito) potrebbe non avere un punto qualsiasi in cui memorizzare i dati EXIF. –

risposta

4

L'unico modo per farlo è utilizzare SurfaceTexture anziché il callback dell'anteprima.

SurfaceTexture ha un metodo getTimestamp() che restituisce nanosecondi poiché non specificato (ma costante).

Sfortunatamente, SurfaceTexture è una trama esterna OpenGL, quindi non è così facile lavorare con il callback dell'anteprima.

D'altra parte, è notevolmente più efficiente della CPU: la richiamata di anteprima effettua la conversione dei colori e la rimodellazione delle immagini nel software, mentre è possibile utilizzare le funzionalità di OpenGL ES2 per eseguire quantità significative di elaborazione delle immagini sulla GPU.

+0

Sarebbe bello, ma c'è un problema ... "Poiché: API 11 ° livello" è qualcosa che non sei così felice di vedere quando stai provando a supportare piattaforme precedenti :) – LambergaR

+0

Ahimè, non ne sono a conoscenza essendo possibile prima del livello API 11. :( –

Problemi correlati