2012-09-18 24 views
6

Ho provato a riprodurre lo stesso video con uno SurfaceView e uno TextureView e ho notato che l'immagine renderizzata con lo TextureView è più con alias (meno 'liscia') rispetto allo SurfaceView.Antialiasing in TextureView

Qual è il motivo? C'è un modo per configurare il rendering di TextureView per un aspetto migliore?

Il TextureView viene usato in questo modo:

TextureView textureView = new TextureView(this); 
    textureView.setSurfaceTextureListener(new SurfaceTextureListener() { 

     @Override 
     public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) { 
      Log.i("test", "onSurfaceTextureAvailable()"); 
      MediaPlayer player = MediaPlayer.create(TestActivity.this, Uri.parse(VIDEO_URL)); 
      Surface surface = new Surface(surfaceTexture); 
      player.setSurface(surface); 
      player.start(); 
     } 

     @Override 
     public void onSurfaceTextureUpdated(SurfaceTexture surface) { 
      Log.i("test", "onSurfaceTextureUpdated()"); 
     } 

     @Override 
     public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { 
      Log.i("test", "onSurfaceTextureSizeChanged()"); 
     } 

     @Override 
     public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { 
      Log.i("test", "onSurfaceTextureDestroyed()"); 
      return false; 
     } 
    }); 
    setContentView(textureView); 

E per la SurfaceView:

SurfaceView surfaceView = new SurfaceView(this); 
    surfaceView.getHolder().addCallback(new Callback() { 

     @Override 
     public void surfaceCreated(SurfaceHolder holder) { 
      Log.i("test", "surfaceCreated()"); 
     } 

     @Override 
     public void surfaceDestroyed(SurfaceHolder holder) { 
      Log.i("test", "surfaceDestroyed()"); 
     } 

     @Override 
     public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 
      Log.i("test", "surfaceChanged()"); 
      MediaPlayer player = MediaPlayer.create(TestActivity.this, Uri.parse(VIDEO_URL)); 
      player.setSurface(holder.getSurface()); 
      player.start(); 
     } 
    }); 
    setContentView(surfaceView); 
+0

puoi mostrarmi un po 'di codice, come usi TextureView? –

+0

ho appena aggiunto il codice – fiddler

+0

scusa, ho letto entrambi i codici e non ci sono flag da impostare, penso che MediaPlayer sia responsabile di questo comportamento –

risposta

13

Beh, sembra che l'applicazione di una scala (diverso da 1) sul TextureView fa il 'smoothing 'l'effetto che sto cercando.

textureView.setScaleX(1.00001f); 

Sembra uno strano trucco ... ma funziona. Sarebbe interessante scoprire cosa ha fatto il ridimensionamento che cambia l'aspetto del rendering ...

+0

Woooow, è strano, ma funziona davvero: O mi chiedo come hai scoperto questo –

+0

Ho giocato a lungo per questo;) – fiddler

+0

Si noti che le chiamate 'setScale()' sono metodi di visualizzazione. Sono curioso che il metodo TextureView 'setTransform()' abbia gli stessi risultati o risultati diversi. – fadden

Problemi correlati