diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/EncodedSampleExporter.java b/libraries/transformer/src/main/java/androidx/media3/transformer/EncodedSampleExporter.java index f32268f07d..f0c0e8b1ac 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/EncodedSampleExporter.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/EncodedSampleExporter.java @@ -33,6 +33,7 @@ import java.util.concurrent.atomic.AtomicLong; private static final int MAX_INPUT_BUFFER_COUNT = 10; private final Format format; + private final long initialTimestampOffsetUs; private final AtomicLong nextMediaItemOffsetUs; private final Queue availableInputBuffers; private final Queue pendingInputBuffers; @@ -45,9 +46,11 @@ import java.util.concurrent.atomic.AtomicLong; Format format, TransformationRequest transformationRequest, MuxerWrapper muxerWrapper, - FallbackListener fallbackListener) { + FallbackListener fallbackListener, + long initialTimestampOffsetUs) { super(format, muxerWrapper); this.format = format; + this.initialTimestampOffsetUs = initialTimestampOffsetUs; nextMediaItemOffsetUs = new AtomicLong(); availableInputBuffers = new ConcurrentLinkedDeque<>(); ByteBuffer emptyBuffer = ByteBuffer.allocateDirect(0).order(ByteOrder.nativeOrder()); @@ -82,7 +85,7 @@ import java.util.concurrent.atomic.AtomicLong; if (inputBuffer.isEndOfStream()) { inputEnded = true; } else { - inputBuffer.timeUs += mediaItemOffsetUs; + inputBuffer.timeUs += mediaItemOffsetUs + initialTimestampOffsetUs; pendingInputBuffers.add(inputBuffer); } return true; diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerInternal.java b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerInternal.java index 454372804c..90771f496f 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerInternal.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerInternal.java @@ -617,7 +617,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; assetLoaderInputTracker.getAssetLoaderInputFormat(sequenceIndex, trackType), transformationRequest, muxerWrapper, - fallbackListener)); + fallbackListener, + videoSampleTimestampOffsetUs)); } /**