Add KEY_TRACK_ID to MediaFormat returned by getTrackFormat(int)

This aligns the behavior with `MediaExtractor`, which sets this key in its [`MediaFormat`](https://developer.android.com/reference/android/media/MediaExtractor#getTrackFormat(int)) output.

Additionally, unnecessary `selectTrack` calls have been removed from the existing `getTrackFormat_...` tests, as they are not required to fetch the track format.

PiperOrigin-RevId: 700741326
This commit is contained in:
rohks 2024-11-27 10:23:32 -08:00 committed by Copybara-Service
parent 6e29b96337
commit 08619bf6fa
2 changed files with 24 additions and 3 deletions

View file

@ -649,7 +649,6 @@ public class MediaExtractorCompatTest {
return Extractor.RESULT_CONTINUE;
});
mediaExtractorCompat.setDataSource(PLACEHOLDER_URI, /* offset= */ 0);
mediaExtractorCompat.selectTrack(/* trackIndex= */ 0);
MediaFormat mediaFormat = mediaExtractorCompat.getTrackFormat(/* trackIndex= */ 0);
@ -671,7 +670,6 @@ public class MediaExtractorCompatTest {
return Extractor.RESULT_CONTINUE;
});
mediaExtractorCompat.setDataSource(PLACEHOLDER_URI, /* offset= */ 0);
mediaExtractorCompat.selectTrack(/* trackIndex= */ 0);
MediaFormat mediaFormat = mediaExtractorCompat.getTrackFormat(/* trackIndex= */ 0);
@ -694,13 +692,35 @@ public class MediaExtractorCompatTest {
return Extractor.RESULT_CONTINUE;
});
mediaExtractorCompat.setDataSource(PLACEHOLDER_URI, /* offset= */ 0);
mediaExtractorCompat.selectTrack(/* trackIndex= */ 0);
MediaFormat mediaFormat = mediaExtractorCompat.getTrackFormat(/* trackIndex= */ 0);
assertThat(mediaFormat.containsKey(MediaFormat.KEY_DURATION)).isFalse();
}
@Test
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);
extractorOutput.endTracks();
output1.format(PLACEHOLDER_FORMAT_VIDEO);
output2.format(PLACEHOLDER_FORMAT_AUDIO);
return Extractor.RESULT_CONTINUE;
});
mediaExtractorCompat.setDataSource(PLACEHOLDER_URI, /* offset= */ 0);
MediaFormat videoFormat = mediaExtractorCompat.getTrackFormat(/* trackIndex= */ 0);
assertThat(videoFormat.containsKey(MediaFormat.KEY_TRACK_ID)).isTrue();
assertThat(videoFormat.getInteger(MediaFormat.KEY_TRACK_ID)).isEqualTo(1);
MediaFormat audioFormat = mediaExtractorCompat.getTrackFormat(/* trackIndex= */ 1);
assertThat(audioFormat.containsKey(MediaFormat.KEY_TRACK_ID)).isTrue();
assertThat(audioFormat.getInteger(MediaFormat.KEY_TRACK_ID)).isEqualTo(2);
}
@Test
public void getLogSessionId_withUnsetSessionId_returnsNone() {
assumeTrue(Util.SDK_INT >= 31);

View file

@ -1002,6 +1002,7 @@ 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);