mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Refactor common input feeding method into MuxerTestUtil
PiperOrigin-RevId: 730452200
This commit is contained in:
parent
2f5a72a165
commit
493e5a5eb1
@ -16,15 +16,11 @@
|
||||
package androidx.media3.muxer;
|
||||
|
||||
import static androidx.media3.common.util.Assertions.checkNotNull;
|
||||
import static androidx.media3.common.util.Util.getBufferFlagsFromMediaCodecFlags;
|
||||
import static androidx.media3.muxer.MuxerTestUtil.MP4_FILE_ASSET_DIRECTORY;
|
||||
import static androidx.media3.muxer.MuxerTestUtil.feedInputDataToMp4Muxer;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.media3.common.util.MediaFormatUtil;
|
||||
import androidx.media3.container.Mp4TimestampData;
|
||||
import androidx.media3.exoplayer.MediaExtractorCompat;
|
||||
import androidx.media3.extractor.mp4.Mp4Extractor;
|
||||
import androidx.media3.test.utils.DumpFileAsserts;
|
||||
import androidx.media3.test.utils.FakeExtractorOutput;
|
||||
@ -33,9 +29,6 @@ import androidx.test.core.app.ApplicationProvider;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
@ -125,7 +118,7 @@ public class Mp4MuxerEndToEndParameterizedTest {
|
||||
new Mp4TimestampData(
|
||||
/* creationTimestampSeconds= */ 100_000_000L,
|
||||
/* modificationTimestampSeconds= */ 500_000_000L));
|
||||
feedInputDataToMuxer(context, mp4Muxer, checkNotNull(inputFile));
|
||||
feedInputDataToMp4Muxer(context, mp4Muxer, checkNotNull(inputFile));
|
||||
} finally {
|
||||
if (mp4Muxer != null) {
|
||||
mp4Muxer.close();
|
||||
@ -137,38 +130,4 @@ public class Mp4MuxerEndToEndParameterizedTest {
|
||||
DumpFileAsserts.assertOutput(
|
||||
context, fakeExtractorOutput, MuxerTestUtil.getExpectedDumpFilePath(inputFile));
|
||||
}
|
||||
|
||||
private static void feedInputDataToMuxer(Context context, Mp4Muxer muxer, String inputFileName)
|
||||
throws IOException, MuxerException {
|
||||
MediaExtractorCompat extractor = new MediaExtractorCompat(context);
|
||||
Uri fileUri = Uri.parse(MP4_FILE_ASSET_DIRECTORY + inputFileName);
|
||||
extractor.setDataSource(fileUri, /* offset= */ 0);
|
||||
|
||||
List<Integer> addedTracks = new ArrayList<>();
|
||||
for (int i = 0; i < extractor.getTrackCount(); i++) {
|
||||
int trackId =
|
||||
muxer.addTrack(MediaFormatUtil.createFormatFromMediaFormat(extractor.getTrackFormat(i)));
|
||||
addedTracks.add(trackId);
|
||||
extractor.selectTrack(i);
|
||||
}
|
||||
|
||||
do {
|
||||
int sampleSize = (int) extractor.getSampleSize();
|
||||
BufferInfo bufferInfo =
|
||||
new BufferInfo(
|
||||
extractor.getSampleTime(),
|
||||
sampleSize,
|
||||
getBufferFlagsFromMediaCodecFlags(extractor.getSampleFlags()));
|
||||
|
||||
ByteBuffer sampleBuffer = ByteBuffer.allocateDirect(sampleSize);
|
||||
extractor.readSampleData(sampleBuffer, /* offset= */ 0);
|
||||
|
||||
sampleBuffer.rewind();
|
||||
|
||||
muxer.writeSampleData(
|
||||
addedTracks.get(extractor.getSampleTrackIndex()), sampleBuffer, bufferInfo);
|
||||
} while (extractor.advance());
|
||||
|
||||
extractor.release();
|
||||
}
|
||||
}
|
||||
|
@ -16,27 +16,23 @@
|
||||
package androidx.media3.muxer;
|
||||
|
||||
import static androidx.media3.common.util.Assertions.checkNotNull;
|
||||
import static androidx.media3.common.util.Util.getBufferFlagsFromMediaCodecFlags;
|
||||
import static androidx.media3.muxer.Mp4Muxer.LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER_OR_DUPLICATE_PREVIOUS;
|
||||
import static androidx.media3.muxer.MuxerTestUtil.FAKE_VIDEO_FORMAT;
|
||||
import static androidx.media3.muxer.MuxerTestUtil.MP4_FILE_ASSET_DIRECTORY;
|
||||
import static androidx.media3.muxer.MuxerTestUtil.XMP_SAMPLE_DATA;
|
||||
import static androidx.media3.muxer.MuxerTestUtil.feedInputDataToMp4Muxer;
|
||||
import static androidx.media3.muxer.MuxerTestUtil.getFakeSampleAndSampleInfo;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static org.junit.Assert.assertThrows;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
import android.util.Pair;
|
||||
import androidx.media3.common.C;
|
||||
import androidx.media3.common.util.MediaFormatUtil;
|
||||
import androidx.media3.common.util.Util;
|
||||
import androidx.media3.container.MdtaMetadataEntry;
|
||||
import androidx.media3.container.Mp4LocationData;
|
||||
import androidx.media3.container.Mp4OrientationData;
|
||||
import androidx.media3.container.Mp4TimestampData;
|
||||
import androidx.media3.container.XmpData;
|
||||
import androidx.media3.exoplayer.MediaExtractorCompat;
|
||||
import androidx.media3.extractor.mp4.Mp4Extractor;
|
||||
import androidx.media3.extractor.text.DefaultSubtitleParserFactory;
|
||||
import androidx.media3.test.utils.DumpFileAsserts;
|
||||
@ -46,10 +42,7 @@ import androidx.media3.test.utils.TestUtil;
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.TemporaryFolder;
|
||||
@ -133,7 +126,7 @@ public class Mp4MuxerEndToEndTest {
|
||||
new Mp4TimestampData(
|
||||
/* creationTimestampSeconds= */ 100_000_000L,
|
||||
/* modificationTimestampSeconds= */ 500_000_000L));
|
||||
feedInputDataToMuxer(context, mp4Muxer, H265_HDR10_MP4);
|
||||
feedInputDataToMp4Muxer(context, mp4Muxer, H265_HDR10_MP4);
|
||||
|
||||
// Muxer not closed.
|
||||
|
||||
@ -859,7 +852,7 @@ public class Mp4MuxerEndToEndTest {
|
||||
/* creationTimestampSeconds= */ 100_000_000L,
|
||||
/* modificationTimestampSeconds= */ 500_000_000L));
|
||||
try {
|
||||
feedInputDataToMuxer(context, mp4Muxer, checkNotNull(H265_HDR10_MP4));
|
||||
feedInputDataToMp4Muxer(context, mp4Muxer, checkNotNull(H265_HDR10_MP4));
|
||||
} finally {
|
||||
mp4Muxer.close();
|
||||
}
|
||||
@ -888,7 +881,7 @@ public class Mp4MuxerEndToEndTest {
|
||||
/* creationTimestampSeconds= */ 100_000_000L,
|
||||
/* modificationTimestampSeconds= */ 500_000_000L));
|
||||
try {
|
||||
feedInputDataToMuxer(context, mp4Muxer, checkNotNull(H265_HDR10_MP4));
|
||||
feedInputDataToMp4Muxer(context, mp4Muxer, checkNotNull(H265_HDR10_MP4));
|
||||
} finally {
|
||||
mp4Muxer.close();
|
||||
}
|
||||
@ -911,38 +904,4 @@ public class Mp4MuxerEndToEndTest {
|
||||
muxer.writeSampleData(trackId, sampleAndSampleInfo.first, sampleAndSampleInfo.second);
|
||||
}
|
||||
}
|
||||
|
||||
private static void feedInputDataToMuxer(Context context, Mp4Muxer muxer, String inputFileName)
|
||||
throws IOException, MuxerException {
|
||||
MediaExtractorCompat extractor = new MediaExtractorCompat(context);
|
||||
Uri fileUri = Uri.parse(MP4_FILE_ASSET_DIRECTORY + inputFileName);
|
||||
extractor.setDataSource(fileUri, /* offset= */ 0);
|
||||
|
||||
List<Integer> addedTracks = new ArrayList<>();
|
||||
for (int i = 0; i < extractor.getTrackCount(); i++) {
|
||||
int trackId =
|
||||
muxer.addTrack(MediaFormatUtil.createFormatFromMediaFormat(extractor.getTrackFormat(i)));
|
||||
addedTracks.add(trackId);
|
||||
extractor.selectTrack(i);
|
||||
}
|
||||
|
||||
do {
|
||||
int sampleSize = (int) extractor.getSampleSize();
|
||||
BufferInfo bufferInfo =
|
||||
new BufferInfo(
|
||||
extractor.getSampleTime(),
|
||||
sampleSize,
|
||||
getBufferFlagsFromMediaCodecFlags(extractor.getSampleFlags()));
|
||||
|
||||
ByteBuffer sampleBuffer = ByteBuffer.allocateDirect(sampleSize);
|
||||
extractor.readSampleData(sampleBuffer, /* offset= */ 0);
|
||||
|
||||
sampleBuffer.rewind();
|
||||
|
||||
muxer.writeSampleData(
|
||||
addedTracks.get(extractor.getSampleTrackIndex()), sampleBuffer, bufferInfo);
|
||||
} while (extractor.advance());
|
||||
|
||||
extractor.release();
|
||||
}
|
||||
}
|
||||
|
@ -17,13 +17,21 @@ package androidx.media3.muxer;
|
||||
|
||||
import static androidx.media3.common.MimeTypes.AUDIO_AAC;
|
||||
import static androidx.media3.common.MimeTypes.VIDEO_H264;
|
||||
import static androidx.media3.common.util.Util.getBufferFlagsFromMediaCodecFlags;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
import android.util.Pair;
|
||||
import androidx.media3.common.C;
|
||||
import androidx.media3.common.Format;
|
||||
import androidx.media3.common.util.MediaFormatUtil;
|
||||
import androidx.media3.exoplayer.MediaExtractorCompat;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.io.BaseEncoding;
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/** Utilities for muxer test cases. */
|
||||
/* package */ class MuxerTestUtil {
|
||||
@ -71,5 +79,39 @@ import java.nio.ByteBuffer;
|
||||
return new Pair<>(sampleDirectBuffer, bufferInfo);
|
||||
}
|
||||
|
||||
public static void feedInputDataToMp4Muxer(Context context, Mp4Muxer muxer, String inputFileName)
|
||||
throws IOException, MuxerException {
|
||||
MediaExtractorCompat extractor = new MediaExtractorCompat(context);
|
||||
Uri fileUri = Uri.parse(MP4_FILE_ASSET_DIRECTORY + inputFileName);
|
||||
extractor.setDataSource(fileUri, /* offset= */ 0);
|
||||
|
||||
List<Integer> addedTracks = new ArrayList<>();
|
||||
for (int i = 0; i < extractor.getTrackCount(); i++) {
|
||||
int trackId =
|
||||
muxer.addTrack(MediaFormatUtil.createFormatFromMediaFormat(extractor.getTrackFormat(i)));
|
||||
addedTracks.add(trackId);
|
||||
extractor.selectTrack(i);
|
||||
}
|
||||
|
||||
do {
|
||||
int sampleSize = (int) extractor.getSampleSize();
|
||||
BufferInfo bufferInfo =
|
||||
new BufferInfo(
|
||||
extractor.getSampleTime(),
|
||||
sampleSize,
|
||||
getBufferFlagsFromMediaCodecFlags(extractor.getSampleFlags()));
|
||||
|
||||
ByteBuffer sampleBuffer = ByteBuffer.allocateDirect(sampleSize);
|
||||
extractor.readSampleData(sampleBuffer, /* offset= */ 0);
|
||||
|
||||
sampleBuffer.rewind();
|
||||
|
||||
muxer.writeSampleData(
|
||||
addedTracks.get(extractor.getSampleTrackIndex()), sampleBuffer, bufferInfo);
|
||||
} while (extractor.advance());
|
||||
|
||||
extractor.release();
|
||||
}
|
||||
|
||||
private MuxerTestUtil() {}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user