androidx / media

Jetpack Media3 support libraries for media use cases, including ExoPlayer, an extensible media player for Android
https://developer.android.com/media/media3
Apache License 2.0
1.59k stars 377 forks source link

setVideoEffects does not change video effect dynamically #1464

Closed pawaom closed 3 months ago

pawaom commented 3 months ago

setVideoEffects does not change video effect dynamically

I am trying this code

private PlayerView playerView;
    private ExoPlayer player;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.own_effect);

        playerView = findViewById(R.id.playerView);
        player = new ExoPlayer.Builder(this).build();
        playerView.setPlayer(player);

        // Replace with your video URI
        String videoUri = "https://storage.googleapis.com/exoplayer-test-media-1/mp4/android-screens-10s.mp4";
        MediaItem mediaItem = MediaItem.fromUri(videoUri);
        player.setMediaItem(mediaItem);
        player.prepare();
        player.play();
        findViewById(R.id.BrightnessButton).setOnClickListener(new OnClickListener() {
            @OptIn(markerClass = UnstableApi.class)
            @Override
            public void onClick(View v) {
                  ImmutableList.Builder<Effect> effects = new ImmutableList.Builder<>();
                effects.add(new Brightness(0.5f));
                player.setVideoEffects(effects.build());

            }
        });

        findViewById(R.id.Contrastbutton).setOnClickListener(new OnClickListener() {
            @OptIn(markerClass = UnstableApi.class)
            @Override
            public void onClick(View v) {
                ImmutableList.Builder<Effect> effects = new ImmutableList.Builder<>();
                effects.add(new Contrast(0.5f));
                player.setVideoEffects(effects.build());

            }
        });

        findViewById(R.id.GrayScalebutton).setOnClickListener(new OnClickListener() {
            @OptIn(markerClass = UnstableApi.class)
            @Override
            public void onClick(View v) {
                ImmutableList.Builder<Effect> effects = new ImmutableList.Builder<>();
                effects.add(RgbFilter.createGrayscaleFilter());
                player.setVideoEffects(effects.build());

            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        player.release();
    }

How ever there is no change in the video

here is the example video

https://github.com/androidx/media/assets/28686824/810f49cf-1049-4707-b00e-28a732b4d306

How can we change video effects dynamically.

icbaker commented 3 months ago

There must be at least one call to ExoPlayer.setVideoEffects(...) before ExoPlayer.prepare(). See clarification here: https://github.com/androidx/media/commit/253fcb1fd1dc52067ab2193cc58ea976bd215707