2016-01-05 28 views
6

Nel mio scenario vado a prendere schermo da un dispositivo (è un'immagine TIFF produce solo) e trasferire in JPEG e lo ha inviato sulla rete al client (client supportano solo la codifica JPEG)è possibile utilizzare la potenza di calcolo della GPU per la conversione di immagini (da tiff a jpeg)? Se sì come raggiungerlo

java code 
    public byte[] getscreen(){ 
    /* 
    logic for fetching tiff image from the device 
    */ 
    if(tiffimage == null) 
    return null; 
    byteOutput = new ByteArrayOutputStream(); 
    ImageIO.write(tiffImage, "jpeg", byteOutput); 
    return byteOutput; 
    } 

Per il dispositivo che produce l'immagine impiega 10 ms - 1 secondo in base alla risoluzione del dispositivo (si noti che non è possibile apportare modifiche su questo lato, produce solo immagini tiff) e la dimensione varia tra 3 MB e -12 MB a seconda sulla risoluzione.

Ora la conversione dell'immagine in JPEG richiede tempo. la mia domanda è, possiamo usare la potenza della GPU per convertire l'immagine da TIFF in JPEG in modo da poter ottenere FPS migliorati dal mio lato client?

P.S: L'applicazione è in esecuzione su varie macchine che hanno schede grafiche come (NVDIA, AMD, Intel HD graphics) Voglio sapere se questo può essere fatto, in tal caso come approccio alla soluzione.

+1

non sono sicuro che la GPU funzioni meglio della CPU per la conversione dei codec di immagine ecco un collegamento a una domanda simile https://stackoverflow.com/questions/7662773/qt-convert-raw-image-to-jpg-using -hardware-acceleration-gpu – WhileTrueSleep

+0

stesso qui: non è meglio usare gpu su cpu: http://stackoverflow.com/questions/22866901/using-java-with-nvidia-gpus-cuda –

+0

vedi anche http: // stackoverflow .com/questions/3384970/java-gpu-programming using gpu in java –

risposta

2

MPEG è all'incirca proprio questo: molte operazioni di codifica di immagini JPEG una dopo l'altra, oltre a una logica che comporta differenze per i frame P, ecc. Ho scritto un semplice codificatore MPEG usando una GPU una volta, che ha dato qualche fattore di accelerazione (non ricordo esattamente da quanto però). Detto questo, per rispondere correttamente alla tua domanda: sì, potrebbe esserci qualche differenza di tempo, ma per una sola immagine, quella differenza è probabilmente trascurabile, inclusi i tempi di offset per lo scarico dei dati delle immagini sul dispositivo GPU, ecc.

+0

il recupero dell'immagine è un'attività continua (il client richiede l'immagine una volta che stabilisce la connessione con il server) e le immagini vengono inviate al client quando l'immagine viene recuperata dal dispositivo, ci può essere 1-4 dispositivo connesso a un server e un client possono chiedere schermate 1-4 dispositivi. Voglio migliorare l'FPS superando il tempo di conversione (tempo di conversione impiega un po 'di tempo per 10 ms - 1 secondo a seconda della dimensione dell'immagine) – pavan