mirror of
https://github.com/samsonjs/media.git
synced 2026-04-10 12:05:47 +00:00
MuxerWrapper rotation degree fix
Allow setAdditionalRotationDegrees to be called with same rotation after tracks added. This is needed for processes that mux files partially trim optimization so they don't error out after hitting the check state Manually tested to ensure trim optimization succeeds, automated test added here as well PiperOrigin-RevId: 601081778
This commit is contained in:
parent
e5621cc709
commit
b94c7d08c1
3 changed files with 46 additions and 4 deletions
|
|
@ -65,6 +65,7 @@ import androidx.media3.effect.DefaultVideoFrameProcessor;
|
|||
import androidx.media3.effect.FrameCache;
|
||||
import androidx.media3.effect.Presentation;
|
||||
import androidx.media3.effect.RgbFilter;
|
||||
import androidx.media3.effect.ScaleAndRotateTransformation;
|
||||
import androidx.media3.effect.TimestampWrapper;
|
||||
import androidx.media3.exoplayer.audio.TeeAudioProcessor;
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
|
|
@ -587,8 +588,9 @@ public class TransformerEndToEndTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void clippedMedia_trimOptimizationEnabled_audioRemoved_completesWithOptimizationApplied()
|
||||
throws Exception {
|
||||
public void
|
||||
clippedMedia_trimOptimizationEnabled_audioRemovedAndRotated_completesWithOptimizationApplied()
|
||||
throws Exception {
|
||||
String testId = "clippedMedia_trimOptimizationEnabled_completesWithOptimizationApplied";
|
||||
if (!isRunningOnEmulator() || Util.SDK_INT != 33) {
|
||||
// The trim optimization is only guaranteed to work on emulator for this (emulator-transcoded)
|
||||
|
|
@ -607,8 +609,13 @@ public class TransformerEndToEndTest {
|
|||
.setEndPositionMs(2500)
|
||||
.build())
|
||||
.build();
|
||||
Effects effects =
|
||||
new Effects(
|
||||
/* audioProcessors= */ ImmutableList.of(),
|
||||
ImmutableList.of(
|
||||
new ScaleAndRotateTransformation.Builder().setRotationDegrees(90).build()));
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).build();
|
||||
new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).setEffects(effects).build();
|
||||
|
||||
ExportTestResult result =
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
|
|
|
|||
|
|
@ -174,7 +174,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||
*/
|
||||
public void setAdditionalRotationDegrees(int additionalRotationDegrees) {
|
||||
checkState(
|
||||
trackTypeToInfo.size() == 0,
|
||||
trackTypeToInfo.size() == 0 || this.additionalRotationDegrees == additionalRotationDegrees,
|
||||
"The additional rotation cannot be changed after adding track formats.");
|
||||
this.additionalRotationDegrees = additionalRotationDegrees;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -72,6 +72,41 @@ public class MuxerWrapperTest {
|
|||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setAdditionalRotationDegrees_sameRotationSetAfterTracksAdded_doesNotThrow()
|
||||
throws Exception {
|
||||
muxerWrapper =
|
||||
new MuxerWrapper(
|
||||
temporaryFolder.newFile().getPath(),
|
||||
new DefaultMuxer.Factory(),
|
||||
new NoOpMuxerListenerImpl(),
|
||||
MUXER_MODE_DEFAULT,
|
||||
/* dropSamplesBeforeFirstVideoSample= */ false);
|
||||
muxerWrapper.setAdditionalRotationDegrees(90);
|
||||
muxerWrapper.setTrackCount(1);
|
||||
muxerWrapper.setAdditionalRotationDegrees(180);
|
||||
muxerWrapper.addTrackFormat(FAKE_AUDIO_TRACK_FORMAT);
|
||||
muxerWrapper.setAdditionalRotationDegrees(180);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setAdditionalRotationDegrees_differentRotationSetAfterTracksAdded_throws()
|
||||
throws Exception {
|
||||
muxerWrapper =
|
||||
new MuxerWrapper(
|
||||
temporaryFolder.newFile().getPath(),
|
||||
new DefaultMuxer.Factory(),
|
||||
new NoOpMuxerListenerImpl(),
|
||||
MUXER_MODE_DEFAULT,
|
||||
/* dropSamplesBeforeFirstVideoSample= */ false);
|
||||
muxerWrapper.setAdditionalRotationDegrees(90);
|
||||
muxerWrapper.setTrackCount(1);
|
||||
muxerWrapper.setAdditionalRotationDegrees(180);
|
||||
muxerWrapper.addTrackFormat(FAKE_AUDIO_TRACK_FORMAT);
|
||||
|
||||
assertThrows(IllegalStateException.class, () -> muxerWrapper.setAdditionalRotationDegrees(90));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void changeToAppendMode_afterDefaultMode_throws() throws Exception {
|
||||
muxerWrapper =
|
||||
|
|
|
|||
Loading…
Reference in a new issue