Add audio/video sample mime type in ExportResult

PiperOrigin-RevId: 603013441
This commit is contained in:
sheenachhabra 2024-01-31 04:57:22 -08:00 committed by Copybara-Service
parent 45bd5c6f0a
commit 5147eb1a65
3 changed files with 68 additions and 7 deletions

View file

@ -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) {

View file

@ -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;

View file

@ -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);