mirror of
https://github.com/samsonjs/media.git
synced 2026-04-15 12:55:46 +00:00
Add audio/video sample mime type in ExportResult
PiperOrigin-RevId: 603013441
This commit is contained in:
parent
45bd5c6f0a
commit
5147eb1a65
3 changed files with 68 additions and 7 deletions
|
|
@ -925,8 +925,8 @@ public class TransformerEndToEndTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void transcode_withOutputMimeTypeAv1_completesSuccessfully() throws Exception {
|
||||
String testId = "transcode_withOutputMimeTypeAv1_completesSuccessfully";
|
||||
public void transcode_withOutputVideoMimeTypeAv1_completesSuccessfully() throws Exception {
|
||||
String testId = "transcode_withOutputVideoMimeTypeAv1_completesSuccessfully";
|
||||
if (AndroidTestUtil.skipAndLogIfFormatsUnsupported(
|
||||
context,
|
||||
testId,
|
||||
|
|
@ -943,13 +943,36 @@ public class TransformerEndToEndTest {
|
|||
Transformer transformer =
|
||||
new Transformer.Builder(context).setVideoMimeType(MimeTypes.VIDEO_AV1).build();
|
||||
|
||||
ExportTestResult exportTestResult =
|
||||
ExportResult exportResult =
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.build()
|
||||
.run(testId, editedMediaItem);
|
||||
.run(testId, editedMediaItem)
|
||||
.exportResult;
|
||||
|
||||
// TODO: b/322813915 - Assert on output mime type.
|
||||
assertThat(exportTestResult.exportResult.exportException).isNull();
|
||||
// TODO: b/322954582 - Also assert by probing output file.
|
||||
assertThat(exportResult.exportException).isNull();
|
||||
assertThat(exportResult.durationMs).isGreaterThan(0);
|
||||
assertThat(exportResult.videoMimeType).isEqualTo(MimeTypes.VIDEO_AV1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void transcode_withOutputAudioMimeTypeAac_completesSuccessfully() throws Exception {
|
||||
String testId = "transcode_withOutputAudioMimeTypeAac_completesSuccessfully";
|
||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP3_ASSET_URI_STRING));
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||
Transformer transformer =
|
||||
new Transformer.Builder(context).setAudioMimeType(MimeTypes.AUDIO_AAC).build();
|
||||
|
||||
ExportResult exportResult =
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.build()
|
||||
.run(testId, editedMediaItem)
|
||||
.exportResult;
|
||||
|
||||
// TODO: b/322954582 - Also assert by probing output file.
|
||||
assertThat(exportResult.exportException).isNull();
|
||||
assertThat(exportResult.durationMs).isGreaterThan(0);
|
||||
assertThat(exportResult.audioMimeType).isEqualTo(MimeTypes.AUDIO_AAC);
|
||||
}
|
||||
|
||||
private static AudioProcessor createSonic(float pitch) {
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import androidx.annotation.Nullable;
|
|||
import androidx.media3.common.C;
|
||||
import androidx.media3.common.ColorInfo;
|
||||
import androidx.media3.common.MediaItem;
|
||||
import androidx.media3.common.MimeTypes;
|
||||
import androidx.media3.common.util.UnstableApi;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
||||
|
|
@ -46,12 +47,14 @@ public final class ExportResult {
|
|||
private int channelCount;
|
||||
private int sampleRate;
|
||||
@Nullable private String audioEncoderName;
|
||||
@Nullable private String audioMimeType;
|
||||
private int averageVideoBitrate;
|
||||
@Nullable private ColorInfo colorInfo;
|
||||
private int height;
|
||||
private int width;
|
||||
private int videoFrameCount;
|
||||
@Nullable private String videoEncoderName;
|
||||
@Nullable private String videoMimeType;
|
||||
private @OptimizationResult int optimizationResult;
|
||||
@Nullable private ExportException exportException;
|
||||
|
||||
|
|
@ -137,6 +140,13 @@ public final class ExportResult {
|
|||
return this;
|
||||
}
|
||||
|
||||
/** Sets the output audio {@linkplain androidx.media3.common.MimeTypes mime type}. */
|
||||
@CanIgnoreReturnValue
|
||||
public Builder setAudioMimeType(@Nullable String audioMimeType) {
|
||||
this.audioMimeType = audioMimeType;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the average video bitrate.
|
||||
*
|
||||
|
|
@ -199,6 +209,13 @@ public final class ExportResult {
|
|||
return this;
|
||||
}
|
||||
|
||||
/** Sets the output video {@linkplain androidx.media3.common.MimeTypes mime type}. */
|
||||
@CanIgnoreReturnValue
|
||||
public Builder setVideoMimeType(@Nullable String videoMimeType) {
|
||||
this.videoMimeType = videoMimeType;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets {@link OptimizationResult} to indicate an optimization as been successful, or has failed
|
||||
* and normal export proceeded instead.
|
||||
|
|
@ -231,12 +248,14 @@ public final class ExportResult {
|
|||
channelCount,
|
||||
sampleRate,
|
||||
audioEncoderName,
|
||||
audioMimeType,
|
||||
averageVideoBitrate,
|
||||
colorInfo,
|
||||
height,
|
||||
width,
|
||||
videoFrameCount,
|
||||
videoEncoderName,
|
||||
videoMimeType,
|
||||
optimizationResult,
|
||||
exportException);
|
||||
}
|
||||
|
|
@ -382,6 +401,9 @@ public final class ExportResult {
|
|||
/** The name of the audio encoder used, or {@code null} if none were used. */
|
||||
@Nullable public final String audioEncoderName;
|
||||
|
||||
/** The output audio {@linkplain MimeTypes mime type}, or {@code null} if unset or unknown. */
|
||||
@Nullable public final String audioMimeType;
|
||||
|
||||
/**
|
||||
* The average bitrate of the video track data, or {@link C#RATE_UNSET_INT} if unset or unknown.
|
||||
*/
|
||||
|
|
@ -402,6 +424,9 @@ public final class ExportResult {
|
|||
/** The name of the video encoder used, or {@code null} if none were used. */
|
||||
@Nullable public final String videoEncoderName;
|
||||
|
||||
/** The output video {@linkplain MimeTypes mime type}, or {@code null} if unset or unknown. */
|
||||
@Nullable public final String videoMimeType;
|
||||
|
||||
/** The result of any requested optimizations. */
|
||||
public final @OptimizationResult int optimizationResult;
|
||||
|
||||
|
|
@ -419,12 +444,14 @@ public final class ExportResult {
|
|||
int channelCount,
|
||||
int sampleRate,
|
||||
@Nullable String audioEncoderName,
|
||||
@Nullable String audioMimeType,
|
||||
int averageVideoBitrate,
|
||||
@Nullable ColorInfo colorInfo,
|
||||
int height,
|
||||
int width,
|
||||
int videoFrameCount,
|
||||
@Nullable String videoEncoderName,
|
||||
@Nullable String videoMimeType,
|
||||
@OptimizationResult int optimizationResult,
|
||||
@Nullable ExportException exportException) {
|
||||
this.processedInputs = processedInputs;
|
||||
|
|
@ -434,12 +461,14 @@ public final class ExportResult {
|
|||
this.channelCount = channelCount;
|
||||
this.sampleRate = sampleRate;
|
||||
this.audioEncoderName = audioEncoderName;
|
||||
this.audioMimeType = audioMimeType;
|
||||
this.averageVideoBitrate = averageVideoBitrate;
|
||||
this.colorInfo = colorInfo;
|
||||
this.height = height;
|
||||
this.width = width;
|
||||
this.videoFrameCount = videoFrameCount;
|
||||
this.videoEncoderName = videoEncoderName;
|
||||
this.videoMimeType = videoMimeType;
|
||||
this.optimizationResult = optimizationResult;
|
||||
this.exportException = exportException;
|
||||
}
|
||||
|
|
@ -453,12 +482,14 @@ public final class ExportResult {
|
|||
.setChannelCount(channelCount)
|
||||
.setSampleRate(sampleRate)
|
||||
.setAudioEncoderName(audioEncoderName)
|
||||
.setAudioMimeType(audioMimeType)
|
||||
.setAverageVideoBitrate(averageVideoBitrate)
|
||||
.setColorInfo(colorInfo)
|
||||
.setHeight(height)
|
||||
.setWidth(width)
|
||||
.setVideoFrameCount(videoFrameCount)
|
||||
.setVideoEncoderName(videoEncoderName)
|
||||
.setVideoMimeType(videoMimeType)
|
||||
.setOptimizationResult(optimizationResult)
|
||||
.setExportException(exportException);
|
||||
}
|
||||
|
|
@ -479,12 +510,14 @@ public final class ExportResult {
|
|||
&& channelCount == result.channelCount
|
||||
&& sampleRate == result.sampleRate
|
||||
&& Objects.equals(audioEncoderName, result.audioEncoderName)
|
||||
&& Objects.equals(audioMimeType, result.audioMimeType)
|
||||
&& averageVideoBitrate == result.averageVideoBitrate
|
||||
&& Objects.equals(colorInfo, result.colorInfo)
|
||||
&& height == result.height
|
||||
&& width == result.width
|
||||
&& videoFrameCount == result.videoFrameCount
|
||||
&& Objects.equals(videoEncoderName, result.videoEncoderName)
|
||||
&& Objects.equals(videoMimeType, result.videoMimeType)
|
||||
&& optimizationResult == result.optimizationResult
|
||||
&& Objects.equals(exportException, result.exportException);
|
||||
}
|
||||
|
|
@ -498,12 +531,14 @@ public final class ExportResult {
|
|||
result = 31 * result + channelCount;
|
||||
result = 31 * result + sampleRate;
|
||||
result = 31 * result + Objects.hashCode(audioEncoderName);
|
||||
result = 31 * result + Objects.hashCode(audioMimeType);
|
||||
result = 31 * result + averageVideoBitrate;
|
||||
result = 31 * result + Objects.hashCode(colorInfo);
|
||||
result = 31 * result + height;
|
||||
result = 31 * result + width;
|
||||
result = 31 * result + videoFrameCount;
|
||||
result = 31 * result + Objects.hashCode(videoEncoderName);
|
||||
result = 31 * result + Objects.hashCode(videoMimeType);
|
||||
result = 31 * result + optimizationResult;
|
||||
result = 31 * result + Objects.hashCode(exportException);
|
||||
return result;
|
||||
|
|
|
|||
|
|
@ -1643,7 +1643,9 @@ public final class Transformer {
|
|||
public void onTrackEnded(
|
||||
@C.TrackType int trackType, Format format, int averageBitrate, int sampleCount) {
|
||||
if (trackType == C.TRACK_TYPE_AUDIO) {
|
||||
exportResultBuilder.setAverageAudioBitrate(averageBitrate);
|
||||
exportResultBuilder
|
||||
.setAudioMimeType(format.sampleMimeType)
|
||||
.setAverageAudioBitrate(averageBitrate);
|
||||
if (format.channelCount != Format.NO_VALUE) {
|
||||
exportResultBuilder.setChannelCount(format.channelCount);
|
||||
}
|
||||
|
|
@ -1652,6 +1654,7 @@ public final class Transformer {
|
|||
}
|
||||
} else if (trackType == C.TRACK_TYPE_VIDEO) {
|
||||
exportResultBuilder
|
||||
.setVideoMimeType(format.sampleMimeType)
|
||||
.setAverageVideoBitrate(averageBitrate)
|
||||
.setColorInfo(format.colorInfo)
|
||||
.setVideoFrameCount(sampleCount);
|
||||
|
|
|
|||
Loading…
Reference in a new issue