Pass the dataType to MediaItemInfo for Transformer

From the `sampleMimeType`, we can know whether the media item contains video data, image data, and audio data. This is done for input media items, and the output media item.

PiperOrigin-RevId: 723459732
This commit is contained in:
shahddaghash 2025-02-05 04:35:09 -08:00 committed by Copybara-Service
parent 449b81d510
commit bcce7b5949

View File

@ -32,6 +32,7 @@ import androidx.annotation.RequiresApi;
import androidx.media3.common.C;
import androidx.media3.common.ColorInfo;
import androidx.media3.common.Format;
import androidx.media3.common.MimeTypes;
import androidx.media3.common.util.SystemClock;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
@ -269,6 +270,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
}
if (videoFormat.sampleMimeType != null) {
mediaItemInfoBuilder.addSampleMimeType(videoFormat.sampleMimeType);
mediaItemInfoBuilder.addDataType(getDataTypes(videoFormat.sampleMimeType));
}
if (videoFormat.frameRate != Format.NO_VALUE) {
mediaItemInfoBuilder.setVideoFrameRate(videoFormat.frameRate);
@ -290,6 +292,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
if (audioFormat != null) {
if (audioFormat.sampleMimeType != null) {
mediaItemInfoBuilder.addSampleMimeType(audioFormat.sampleMimeType);
mediaItemInfoBuilder.addDataType(getDataTypes(audioFormat.sampleMimeType));
}
if (audioFormat.channelCount != Format.NO_VALUE) {
mediaItemInfoBuilder.setAudioChannelCount(audioFormat.channelCount);
@ -310,9 +313,11 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
}
if (exportResult.audioMimeType != null) {
mediaItemInfoBuilder.addSampleMimeType(exportResult.audioMimeType);
mediaItemInfoBuilder.addDataType(getDataTypes(exportResult.audioMimeType));
}
if (exportResult.videoMimeType != null) {
mediaItemInfoBuilder.addSampleMimeType(exportResult.videoMimeType);
mediaItemInfoBuilder.addDataType(getDataTypes(exportResult.videoMimeType));
}
if (exportResult.channelCount != C.LENGTH_UNSET) {
mediaItemInfoBuilder.setAudioChannelCount(exportResult.channelCount);
@ -342,6 +347,20 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
return mediaItemInfoBuilder.build();
}
private static long getDataTypes(@Nullable String sampleMimeType) {
long dataTypes = 0L;
if (MimeTypes.isAudio(sampleMimeType)) {
dataTypes |= MediaItemInfo.DATA_TYPE_AUDIO;
}
if (MimeTypes.isVideo(sampleMimeType)) {
dataTypes |= MediaItemInfo.DATA_TYPE_VIDEO;
}
if (MimeTypes.isImage(sampleMimeType)) {
dataTypes |= MediaItemInfo.DATA_TYPE_IMAGE;
}
return dataTypes;
}
private static int getVideoDataSpace(ColorInfo colorInfo) {
int colorStandard =
DATA_SPACE_STANDARD_CONVERSION_MAP.get(