Fix KEY_TRACK_ID in MediaFormat returned by getTrackFormat()

The `KEY_TRACK_ID` was incorrectly set to the track index instead of the track ID from the media file.

PiperOrigin-RevId: 738761146
This commit is contained in:
rohks 2025-03-20 05:13:43 -07:00 committed by Copybara-Service
parent cf0d9d207f
commit 99f364992a
3 changed files with 14 additions and 5 deletions

View File

@ -128,6 +128,10 @@ public final class MediaFormatUtil {
formatBuilder.setInitializationData(csdBuffers.build());
if (mediaFormat.containsKey(MediaFormat.KEY_TRACK_ID)) {
formatBuilder.setId(mediaFormat.getInteger(MediaFormat.KEY_TRACK_ID));
}
return formatBuilder.build();
}
@ -175,6 +179,10 @@ public final class MediaFormatUtil {
result.setInteger(MediaFormat.KEY_ENCODER_PADDING, format.encoderPadding);
maybeSetPixelAspectRatio(result, format.pixelWidthHeightRatio);
if (format.id != null) {
result.setInteger(MediaFormat.KEY_TRACK_ID, Integer.parseInt(format.id));
}
return result;
}

View File

@ -701,11 +701,13 @@ public class MediaExtractorCompatTest {
public void getTrackFormat_withMultipleTracks_returnsCorrectTrackId() throws IOException {
fakeExtractor.addReadAction(
(input, seekPosition) -> {
TrackOutput output1 = extractorOutput.track(/* id= */ 1, C.TRACK_TYPE_VIDEO);
TrackOutput output2 = extractorOutput.track(/* id= */ 2, C.TRACK_TYPE_AUDIO);
TrackOutput output1 = extractorOutput.track(/* id= */ 0, C.TRACK_TYPE_VIDEO);
TrackOutput output2 = extractorOutput.track(/* id= */ 1, C.TRACK_TYPE_AUDIO);
extractorOutput.endTracks();
output1.format(PLACEHOLDER_FORMAT_VIDEO);
output2.format(PLACEHOLDER_FORMAT_AUDIO);
output1.format(
new Format.Builder().setId(1).setSampleMimeType(MimeTypes.VIDEO_H264).build());
output2.format(
new Format.Builder().setId(2).setSampleMimeType(MimeTypes.AUDIO_AAC).build());
return Extractor.RESULT_CONTINUE;
});

View File

@ -1002,7 +1002,6 @@ public final class MediaExtractorCompat {
FormatHolder scratchFormatHolder, DecoderInputBuffer scratchNoDataDecoderInputBuffer) {
Format format = getFormat(scratchFormatHolder, scratchNoDataDecoderInputBuffer);
MediaFormat mediaFormatResult = MediaFormatUtil.createMediaFormatFromFormat(format);
mediaFormatResult.setInteger(MediaFormat.KEY_TRACK_ID, getIdOfBackingTrack());
if (compatibilityTrackMimeType != null) {
if (Util.SDK_INT >= 29) {
mediaFormatResult.removeKey(MediaFormat.KEY_CODECS_STRING);