androidx / androidx/media

add different size video & image in one sequence may cause FinalShaderProgramWrapper delete texture that using in compositor

Open
#2,586 5 comments 0 reactions 1 assignee View on GitHub

@droid-girl is already working on this.

Since Jul 4, 2025.

bug editing needs triage
Dominant language
Java
Stars
3k
Forks
955
Avg merge
12d 14h
Merged PRs (30d)
2

Description

Version

Media3 main branch

More version details

1.5.1 1.6.0 1.8.0alpha

Devices that reproduce the issue

oppo reno 13 pro android 15
oppo find x8s android 16
oppo find x8 android 15

Devices that do not reproduce the issue

oneplus 13 android 16
oppo find x5pro android 14
snapdragon cpu ophone

Reproducible in the demo app?

No

Reproduction steps
string videoPath= "/path/to/video";
long videoDuration = video duration;
long clipDuration =  videoDuration  * 2 / 3;

 Effects effects = new Effects(new ArrayList<>(),
            List.of(new AlphaScale(0.5f)));
MediaItem mediaItem1 = new MediaItem.Builder().setUri(Uri.fromFile(new File(videoPath)))
            .setClippingConfiguration(
                new MediaItem.ClippingConfiguration.Builder().setStartPositionUs(clipDuration)
                    .setEndPositionUs(videoDuration ).build()).build();
EditedMediaItem editedMediaItem1 = new EditedMediaItem.Builder(mediaItem1)
            .setDurationUs(videoDuration  - clipDuration)
            .setRemoveAudio(true)
            .setEffects(effects)
            .build();
File bankPic = new File("//android_asset/sdr.jpg");
MediaItem build = (new MediaItem.Builder()).setUri(
                Uri.fromFile(bankPic))
            .setMimeType(MimeTypes.IMAGE_PNG).setImageDurationMs(videoDuration  - clipDuration).build();
 EditedMediaItem gap = new EditedMediaItem.Builder(build)
            .setDurationUs(centerPos - fadeDuration).setFrameRate(30).setEffects(new Effects(new ArrayList<>(),
                List.of(new AlphaScale(0)))).build();
EditedMediaItemSequence sequence1 = new EditedMediaItemSequence.Builder(editedMediaItem1)
            .addItem(gap)
            .build();
MediaItem mediaItem2 = new MediaItem.Builder().setUri(Uri.fromFile(new File(videoPath)))
            .setClippingConfiguration(
                new MediaItem.ClippingConfiguration.Builder().setStartPositionUs(0)
                    .setEndPositionUs(clipDuration).build()).build();
EditedMediaItem editedMediaItem2 = new EditedMediaItem.Builder(mediaItem2)
            .setDurationUs(clipDuration)
            .setRemoveAudio(true)
            .build();
EditedMediaItemSequence sequence2 = new EditedMediaItemSequence.Builder()
            .addItem(editedMediaItem2).build();
Composition composition = new Composition.Builder(sequence1, sequence2)
            .setVideoCompositorSettings(new VideoCompositorSettings() {
                @Override
                public Size getOutputSize(List<Size> inputSizes) {
                    return inputSizes.get(inputSizes.size() - 1);
                }

                @Override
                public OverlaySettings getOverlaySettings(int inputId, long presentationTimeUs) {
                    return new OverlaySettings.Builder().build();
                }
            }).build();
Transformer.start(composition, "/sdcard/transition.mp4");
Expected result

no black frame

Actual result

There is a probability that show a black frame in videoDuration / 3 time.

Media

analysis:
in sequence1, when video is eos and switch to image , DefaultVideoCompositor cache the video texture but not compositor and image is comming , because size is changed ,'DefaultVideoFrameProcessor-FinalShaderProgramWrapper#ensureConfigured' will reconfig texturepool, cause the video texture in compositor is invalid.

Bug Report
  • You will email the zip file produced by adb bugreport to android-media-github@google.com after filing this issue.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.