7

SurfaceView同じビデオをとで再生しようとしましたが、 でレンダリングされた画像は でレンダリングされた画像よりもエイリアスが多い (「滑らかさ」が低い)TextureViewことに気付きました。TextureViewSurfaceView

この理由は何ですか?のレンダリングをTextureViewより見栄えよくするように設定する方法はありますか?

は次のTextureViewように使用されます。

    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);

そしてのために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);
4

1 に答える 1

14

さて、TextureView にスケーリング (1 以外) を適用すると、探している「スムージング」効果が得られるようです。

textureView.setScaleX(1.00001f);

奇妙なハックのように聞こえますが、うまくいきます。レンダリングの側面を変更するスケーリングで何が行われたかを掘り下げるのは興味深いでしょう...

于 2012-09-19T08:50:29.043 に答える