add different size video & image in one sequence may cause FinalShaderProgramWrapper delete texture that using in compositor
@droid-girl is already working on this.
Since Jul 4, 2025.
- 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 bugreportto android-media-github@google.com after filing this issue.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.