Commit c7ea8114 by olly Committed by Ian Baker

Move track type from TrackGroupInfo to TrackGroup

The track type is derived solely from the content. It does
not depend on any runtime properties such as the player's
capabilities of user track selection. Hence it belongs in
TrackGroup rather than TrackGroupInfo.

Note that this avoids TrackSelectionOverride from having to
re-derive the track type internally.

PiperOrigin-RevId: 429303312
parent 8151883d
...@@ -1036,11 +1036,7 @@ public final class CastPlayer extends BasePlayer { ...@@ -1036,11 +1036,7 @@ public final class CastPlayer extends BasePlayer {
final boolean[] trackSelected = new boolean[] {selected}; final boolean[] trackSelected = new boolean[] {selected};
trackGroupInfos[i] = trackGroupInfos[i] =
new TracksInfo.TrackGroupInfo( new TracksInfo.TrackGroupInfo(
trackType, trackGroups[i], /* adaptiveSupported= */ false, trackSupport, trackSelected);
trackGroups[i],
/* adaptiveSupported= */ false,
trackSupport,
trackSelected);
} }
TrackGroupArray newTrackGroups = new TrackGroupArray(trackGroups); TrackGroupArray newTrackGroups = new TrackGroupArray(trackGroups);
TrackSelectionArray newTrackSelections = new TrackSelectionArray(trackSelections); TrackSelectionArray newTrackSelections = new TrackSelectionArray(trackSelections);
......
...@@ -49,7 +49,6 @@ public final class TracksInfo implements Bundleable { ...@@ -49,7 +49,6 @@ public final class TracksInfo implements Bundleable {
/** The number of tracks in the group. */ /** The number of tracks in the group. */
public final int length; public final int length;
private final @C.TrackType int trackType;
private final TrackGroup trackGroup; private final TrackGroup trackGroup;
private final boolean adaptiveSupported; private final boolean adaptiveSupported;
private final @C.FormatSupport int[] trackSupport; private final @C.FormatSupport int[] trackSupport;
...@@ -58,22 +57,19 @@ public final class TracksInfo implements Bundleable { ...@@ -58,22 +57,19 @@ public final class TracksInfo implements Bundleable {
/** /**
* Constructs a TrackGroupInfo. * Constructs a TrackGroupInfo.
* *
* @param trackType The {@link C.TrackType} of the tracks in the {@code trackGroup}.
* @param trackGroup The {@link TrackGroup} described. * @param trackGroup The {@link TrackGroup} described.
* @param adaptiveSupported Whether adaptive selections containing more than one track are * @param adaptiveSupported Whether adaptive selections containing more than one track in the
* supported. * {@code trackGroup} are supported.
* @param trackSupport The {@link C.FormatSupport} of each track in the {@code trackGroup}. * @param trackSupport The {@link C.FormatSupport} of each track in the {@code trackGroup}.
* @param tracksSelected Whether a track is selected for each track in {@code trackGroup}. * @param tracksSelected Whether each track in the {@code trackGroup} is selected.
*/ */
public TrackGroupInfo( public TrackGroupInfo(
@C.TrackType int trackType,
TrackGroup trackGroup, TrackGroup trackGroup,
boolean adaptiveSupported, boolean adaptiveSupported,
@C.FormatSupport int[] trackSupport, @C.FormatSupport int[] trackSupport,
boolean[] tracksSelected) { boolean[] tracksSelected) {
length = trackGroup.length; length = trackGroup.length;
checkArgument(length == trackSupport.length && length == tracksSelected.length); checkArgument(length == trackSupport.length && length == tracksSelected.length);
this.trackType = trackType;
this.trackGroup = trackGroup; this.trackGroup = trackGroup;
this.adaptiveSupported = adaptiveSupported && length > 1; this.adaptiveSupported = adaptiveSupported && length > 1;
this.trackSupport = trackSupport.clone(); this.trackSupport = trackSupport.clone();
...@@ -189,7 +185,7 @@ public final class TracksInfo implements Bundleable { ...@@ -189,7 +185,7 @@ public final class TracksInfo implements Bundleable {
/** Returns the {@link C.TrackType} of the group. */ /** Returns the {@link C.TrackType} of the group. */
public @C.TrackType int getTrackType() { public @C.TrackType int getTrackType() {
return trackType; return trackGroup.type;
} }
@Override @Override
...@@ -201,7 +197,7 @@ public final class TracksInfo implements Bundleable { ...@@ -201,7 +197,7 @@ public final class TracksInfo implements Bundleable {
return false; return false;
} }
TrackGroupInfo that = (TrackGroupInfo) other; TrackGroupInfo that = (TrackGroupInfo) other;
return trackType == that.trackType return adaptiveSupported == that.adaptiveSupported
&& trackGroup.equals(that.trackGroup) && trackGroup.equals(that.trackGroup)
&& Arrays.equals(trackSupport, that.trackSupport) && Arrays.equals(trackSupport, that.trackSupport)
&& Arrays.equals(trackSelected, that.trackSelected); && Arrays.equals(trackSelected, that.trackSelected);
...@@ -210,8 +206,8 @@ public final class TracksInfo implements Bundleable { ...@@ -210,8 +206,8 @@ public final class TracksInfo implements Bundleable {
@Override @Override
public int hashCode() { public int hashCode() {
int result = trackGroup.hashCode(); int result = trackGroup.hashCode();
result = 31 * result + (adaptiveSupported ? 1 : 0);
result = 31 * result + Arrays.hashCode(trackSupport); result = 31 * result + Arrays.hashCode(trackSupport);
result = 31 * result + trackType;
result = 31 * result + Arrays.hashCode(trackSelected); result = 31 * result + Arrays.hashCode(trackSelected);
return result; return result;
} }
...@@ -223,7 +219,6 @@ public final class TracksInfo implements Bundleable { ...@@ -223,7 +219,6 @@ public final class TracksInfo implements Bundleable {
@IntDef({ @IntDef({
FIELD_TRACK_GROUP, FIELD_TRACK_GROUP,
FIELD_TRACK_SUPPORT, FIELD_TRACK_SUPPORT,
FIELD_TRACK_TYPE,
FIELD_TRACK_SELECTED, FIELD_TRACK_SELECTED,
FIELD_ADAPTIVE_SUPPORTED, FIELD_ADAPTIVE_SUPPORTED,
}) })
...@@ -231,7 +226,6 @@ public final class TracksInfo implements Bundleable { ...@@ -231,7 +226,6 @@ public final class TracksInfo implements Bundleable {
private static final int FIELD_TRACK_GROUP = 0; private static final int FIELD_TRACK_GROUP = 0;
private static final int FIELD_TRACK_SUPPORT = 1; private static final int FIELD_TRACK_SUPPORT = 1;
private static final int FIELD_TRACK_TYPE = 2;
private static final int FIELD_TRACK_SELECTED = 3; private static final int FIELD_TRACK_SELECTED = 3;
private static final int FIELD_ADAPTIVE_SUPPORTED = 4; private static final int FIELD_ADAPTIVE_SUPPORTED = 4;
...@@ -240,7 +234,6 @@ public final class TracksInfo implements Bundleable { ...@@ -240,7 +234,6 @@ public final class TracksInfo implements Bundleable {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putBundle(keyForField(FIELD_TRACK_GROUP), trackGroup.toBundle()); bundle.putBundle(keyForField(FIELD_TRACK_GROUP), trackGroup.toBundle());
bundle.putIntArray(keyForField(FIELD_TRACK_SUPPORT), trackSupport); bundle.putIntArray(keyForField(FIELD_TRACK_SUPPORT), trackSupport);
bundle.putInt(keyForField(FIELD_TRACK_TYPE), trackType);
bundle.putBooleanArray(keyForField(FIELD_TRACK_SELECTED), trackSelected); bundle.putBooleanArray(keyForField(FIELD_TRACK_SELECTED), trackSelected);
bundle.putBoolean(keyForField(FIELD_ADAPTIVE_SUPPORTED), adaptiveSupported); bundle.putBoolean(keyForField(FIELD_ADAPTIVE_SUPPORTED), adaptiveSupported);
return bundle; return bundle;
...@@ -256,16 +249,13 @@ public final class TracksInfo implements Bundleable { ...@@ -256,16 +249,13 @@ public final class TracksInfo implements Bundleable {
final @C.FormatSupport int[] trackSupport = final @C.FormatSupport int[] trackSupport =
MoreObjects.firstNonNull( MoreObjects.firstNonNull(
bundle.getIntArray(keyForField(FIELD_TRACK_SUPPORT)), new int[trackGroup.length]); bundle.getIntArray(keyForField(FIELD_TRACK_SUPPORT)), new int[trackGroup.length]);
@C.TrackType
int trackType = bundle.getInt(keyForField(FIELD_TRACK_TYPE), C.TRACK_TYPE_UNKNOWN);
boolean[] selected = boolean[] selected =
MoreObjects.firstNonNull( MoreObjects.firstNonNull(
bundle.getBooleanArray(keyForField(FIELD_TRACK_SELECTED)), bundle.getBooleanArray(keyForField(FIELD_TRACK_SELECTED)),
new boolean[trackGroup.length]); new boolean[trackGroup.length]);
boolean adaptiveSupported = boolean adaptiveSupported =
bundle.getBoolean(keyForField(FIELD_ADAPTIVE_SUPPORTED), false); bundle.getBoolean(keyForField(FIELD_ADAPTIVE_SUPPORTED), false);
return new TrackGroupInfo( return new TrackGroupInfo(trackGroup, adaptiveSupported, trackSupport, selected);
trackType, trackGroup, adaptiveSupported, trackSupport, selected);
}; };
private static String keyForField(@FieldNumber int field) { private static String keyForField(@FieldNumber int field) {
...@@ -296,7 +286,7 @@ public final class TracksInfo implements Bundleable { ...@@ -296,7 +286,7 @@ public final class TracksInfo implements Bundleable {
/** Returns true if there are tracks of type {@code trackType}, and false otherwise. */ /** Returns true if there are tracks of type {@code trackType}, and false otherwise. */
public boolean hasTracksOfType(@C.TrackType int trackType) { public boolean hasTracksOfType(@C.TrackType int trackType) {
for (int i = 0; i < trackGroupInfos.size(); i++) { for (int i = 0; i < trackGroupInfos.size(); i++) {
if (trackGroupInfos.get(i).trackType == trackType) { if (trackGroupInfos.get(i).getTrackType() == trackType) {
return true; return true;
} }
} }
...@@ -326,7 +316,7 @@ public final class TracksInfo implements Bundleable { ...@@ -326,7 +316,7 @@ public final class TracksInfo implements Bundleable {
@C.TrackType int trackType, boolean allowExceedsCapabilities) { @C.TrackType int trackType, boolean allowExceedsCapabilities) {
boolean supported = true; boolean supported = true;
for (int i = 0; i < trackGroupInfos.size(); i++) { for (int i = 0; i < trackGroupInfos.size(); i++) {
if (trackGroupInfos.get(i).trackType == trackType) { if (trackGroupInfos.get(i).getTrackType() == trackType) {
if (trackGroupInfos.get(i).isSupported(allowExceedsCapabilities)) { if (trackGroupInfos.get(i).isSupported(allowExceedsCapabilities)) {
return true; return true;
} else { } else {
......
...@@ -45,6 +45,8 @@ public final class TrackGroup implements Bundleable { ...@@ -45,6 +45,8 @@ public final class TrackGroup implements Bundleable {
public final int length; public final int length;
/** An identifier for the track group. */ /** An identifier for the track group. */
public final String id; public final String id;
/** The type of tracks in the group. */
public final @C.TrackType int type;
private final Format[] formats; private final Format[] formats;
...@@ -71,6 +73,11 @@ public final class TrackGroup implements Bundleable { ...@@ -71,6 +73,11 @@ public final class TrackGroup implements Bundleable {
this.id = id; this.id = id;
this.formats = formats; this.formats = formats;
this.length = formats.length; this.length = formats.length;
@C.TrackType int type = MimeTypes.getTrackType(formats[0].sampleMimeType);
if (type == C.TRACK_TYPE_UNKNOWN) {
type = MimeTypes.getTrackType(formats[0].containerMimeType);
}
this.type = type;
verifyCorrectness(); verifyCorrectness();
} }
...@@ -133,7 +140,7 @@ public final class TrackGroup implements Bundleable { ...@@ -133,7 +140,7 @@ public final class TrackGroup implements Bundleable {
return false; return false;
} }
TrackGroup other = (TrackGroup) obj; TrackGroup other = (TrackGroup) obj;
return length == other.length && id.equals(other.id) && Arrays.equals(formats, other.formats); return id.equals(other.id) && Arrays.equals(formats, other.formats);
} }
// Bundleable implementation. // Bundleable implementation.
......
...@@ -87,7 +87,7 @@ public final class TrackSelectionOverride implements Bundleable { ...@@ -87,7 +87,7 @@ public final class TrackSelectionOverride implements Bundleable {
/** Returns the {@link C.TrackType} of the overridden track group. */ /** Returns the {@link C.TrackType} of the overridden track group. */
public @C.TrackType int getTrackType() { public @C.TrackType int getTrackType() {
return MimeTypes.getTrackType(trackGroup.getFormat(0).sampleMimeType); return trackGroup.type;
} }
@Override @Override
......
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
*/ */
package com.google.android.exoplayer2; package com.google.android.exoplayer2;
import static com.google.android.exoplayer2.util.MimeTypes.AUDIO_AAC;
import static com.google.android.exoplayer2.util.MimeTypes.VIDEO_H264;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
...@@ -41,14 +43,14 @@ public class TracksInfoTest { ...@@ -41,14 +43,14 @@ public class TracksInfoTest {
new TracksInfo( new TracksInfo(
ImmutableList.of( ImmutableList.of(
new TrackGroupInfo( new TrackGroupInfo(
C.TRACK_TYPE_AUDIO, new TrackGroup(new Format.Builder().setSampleMimeType(AUDIO_AAC).build()),
new TrackGroup(new Format.Builder().build()),
/* adaptiveSupported= */ false, /* adaptiveSupported= */ false,
new int[] {C.FORMAT_EXCEEDS_CAPABILITIES}, new int[] {C.FORMAT_EXCEEDS_CAPABILITIES},
/* tracksSelected= */ new boolean[] {true}), /* tracksSelected= */ new boolean[] {true}),
new TrackGroupInfo( new TrackGroupInfo(
C.TRACK_TYPE_VIDEO, new TrackGroup(
new TrackGroup(new Format.Builder().build(), new Format.Builder().build()), new Format.Builder().setSampleMimeType(VIDEO_H264).build(),
new Format.Builder().setSampleMimeType(VIDEO_H264).build()),
/* adaptiveSupported= */ true, /* adaptiveSupported= */ true,
new int[] {C.FORMAT_UNSUPPORTED_DRM, C.FORMAT_UNSUPPORTED_TYPE}, new int[] {C.FORMAT_UNSUPPORTED_DRM, C.FORMAT_UNSUPPORTED_TYPE},
/* tracksSelected= */ new boolean[] {false, true}))); /* tracksSelected= */ new boolean[] {false, true})));
...@@ -60,7 +62,12 @@ public class TracksInfoTest { ...@@ -60,7 +62,12 @@ public class TracksInfoTest {
public void tracksInfoGetters_withoutTrack_returnExpectedValues() { public void tracksInfoGetters_withoutTrack_returnExpectedValues() {
TracksInfo tracksInfo = new TracksInfo(ImmutableList.of()); TracksInfo tracksInfo = new TracksInfo(ImmutableList.of());
assertThat(tracksInfo.hasTracksOfType(C.TRACK_TYPE_AUDIO)).isFalse();
assertThat(tracksInfo.isTypeSupportedOrEmpty(C.TRACK_TYPE_AUDIO)).isTrue(); assertThat(tracksInfo.isTypeSupportedOrEmpty(C.TRACK_TYPE_AUDIO)).isTrue();
assertThat(
tracksInfo.isTypeSupportedOrEmpty(
C.TRACK_TYPE_AUDIO, /* allowExceedsCapabilities= */ true))
.isTrue();
assertThat(tracksInfo.isTypeSelected(C.TRACK_TYPE_AUDIO)).isFalse(); assertThat(tracksInfo.isTypeSelected(C.TRACK_TYPE_AUDIO)).isFalse();
ImmutableList<TrackGroupInfo> trackGroupInfos = tracksInfo.getTrackGroupInfos(); ImmutableList<TrackGroupInfo> trackGroupInfos = tracksInfo.getTrackGroupInfos();
assertThat(trackGroupInfos).isEmpty(); assertThat(trackGroupInfos).isEmpty();
...@@ -78,15 +85,15 @@ public class TracksInfoTest { ...@@ -78,15 +85,15 @@ public class TracksInfoTest {
public void tracksInfoGetters_ofComplexTracksInfo_returnExpectedValues() { public void tracksInfoGetters_ofComplexTracksInfo_returnExpectedValues() {
TrackGroupInfo trackGroupInfo0 = TrackGroupInfo trackGroupInfo0 =
new TrackGroupInfo( new TrackGroupInfo(
C.TRACK_TYPE_AUDIO, new TrackGroup(new Format.Builder().setSampleMimeType(AUDIO_AAC).build()),
new TrackGroup(new Format.Builder().build()),
/* adaptiveSupported= */ false, /* adaptiveSupported= */ false,
new int[] {C.FORMAT_EXCEEDS_CAPABILITIES}, new int[] {C.FORMAT_EXCEEDS_CAPABILITIES},
/* tracksSelected= */ new boolean[] {false}); /* tracksSelected= */ new boolean[] {false});
TrackGroupInfo trackGroupInfo1 = TrackGroupInfo trackGroupInfo1 =
new TrackGroupInfo( new TrackGroupInfo(
C.TRACK_TYPE_VIDEO, new TrackGroup(
new TrackGroup(new Format.Builder().build(), new Format.Builder().build()), new Format.Builder().setSampleMimeType(VIDEO_H264).build(),
new Format.Builder().setSampleMimeType(VIDEO_H264).build()),
/* adaptiveSupported= */ true, /* adaptiveSupported= */ true,
new int[] {C.FORMAT_UNSUPPORTED_DRM, C.FORMAT_HANDLED}, new int[] {C.FORMAT_UNSUPPORTED_DRM, C.FORMAT_HANDLED},
/* tracksSelected= */ new boolean[] {false, true}); /* tracksSelected= */ new boolean[] {false, true});
...@@ -98,6 +105,18 @@ public class TracksInfoTest { ...@@ -98,6 +105,18 @@ public class TracksInfoTest {
assertThat(tracksInfo.isTypeSupportedOrEmpty(C.TRACK_TYPE_AUDIO)).isFalse(); assertThat(tracksInfo.isTypeSupportedOrEmpty(C.TRACK_TYPE_AUDIO)).isFalse();
assertThat(tracksInfo.isTypeSupportedOrEmpty(C.TRACK_TYPE_VIDEO)).isTrue(); assertThat(tracksInfo.isTypeSupportedOrEmpty(C.TRACK_TYPE_VIDEO)).isTrue();
assertThat(tracksInfo.isTypeSupportedOrEmpty(C.TRACK_TYPE_TEXT)).isTrue(); assertThat(tracksInfo.isTypeSupportedOrEmpty(C.TRACK_TYPE_TEXT)).isTrue();
assertThat(
tracksInfo.isTypeSupportedOrEmpty(
C.TRACK_TYPE_AUDIO, /* allowExceedsCapabilities= */ true))
.isTrue();
assertThat(
tracksInfo.isTypeSupportedOrEmpty(
C.TRACK_TYPE_VIDEO, /* allowExceedsCapabilities= */ true))
.isTrue();
assertThat(
tracksInfo.isTypeSupportedOrEmpty(
C.TRACK_TYPE_TEXT, /* allowExceedsCapabilities= */ true))
.isTrue();
assertThat(tracksInfo.isTypeSelected(C.TRACK_TYPE_AUDIO)).isFalse(); assertThat(tracksInfo.isTypeSelected(C.TRACK_TYPE_AUDIO)).isFalse();
assertThat(tracksInfo.isTypeSelected(C.TRACK_TYPE_VIDEO)).isTrue(); assertThat(tracksInfo.isTypeSelected(C.TRACK_TYPE_VIDEO)).isTrue();
ImmutableList<TrackGroupInfo> trackGroupInfos = tracksInfo.getTrackGroupInfos(); ImmutableList<TrackGroupInfo> trackGroupInfos = tracksInfo.getTrackGroupInfos();
...@@ -125,8 +144,7 @@ public class TracksInfoTest { ...@@ -125,8 +144,7 @@ public class TracksInfoTest {
public void trackGroupInfo_withSingleTrack_isNotAdaptive() { public void trackGroupInfo_withSingleTrack_isNotAdaptive() {
TrackGroupInfo trackGroupInfo0 = TrackGroupInfo trackGroupInfo0 =
new TrackGroupInfo( new TrackGroupInfo(
C.TRACK_TYPE_AUDIO, new TrackGroup(new Format.Builder().setSampleMimeType(AUDIO_AAC).build()),
new TrackGroup(new Format.Builder().build()),
/* adaptiveSupported= */ true, /* adaptiveSupported= */ true,
new int[] {C.FORMAT_EXCEEDS_CAPABILITIES}, new int[] {C.FORMAT_EXCEEDS_CAPABILITIES},
/* tracksSelected= */ new boolean[] {false}); /* tracksSelected= */ new boolean[] {false});
......
...@@ -40,7 +40,6 @@ import com.google.android.exoplayer2.TracksInfo; ...@@ -40,7 +40,6 @@ import com.google.android.exoplayer2.TracksInfo;
import com.google.android.exoplayer2.source.MediaSource.MediaPeriodId; import com.google.android.exoplayer2.source.MediaSource.MediaPeriodId;
import com.google.android.exoplayer2.source.TrackGroup; import com.google.android.exoplayer2.source.TrackGroup;
import com.google.android.exoplayer2.source.TrackGroupArray; import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.util.MimeTypes;
import com.google.android.exoplayer2.util.Util; import com.google.android.exoplayer2.util.Util;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import java.lang.annotation.Documented; import java.lang.annotation.Documented;
...@@ -370,8 +369,7 @@ public abstract class MappingTrackSelector extends TrackSelector { ...@@ -370,8 +369,7 @@ public abstract class MappingTrackSelector extends TrackSelector {
for (int groupIndex = 0; groupIndex < trackGroups.length; groupIndex++) { for (int groupIndex = 0; groupIndex < trackGroups.length; groupIndex++) {
TrackGroup group = trackGroups.get(groupIndex); TrackGroup group = trackGroups.get(groupIndex);
// Associate the group to a preferred renderer. // Associate the group to a preferred renderer.
boolean preferUnassociatedRenderer = boolean preferUnassociatedRenderer = group.type == C.TRACK_TYPE_METADATA;
MimeTypes.getTrackType(group.getFormat(0).sampleMimeType) == C.TRACK_TYPE_METADATA;
int rendererIndex = int rendererIndex =
findRenderer( findRenderer(
rendererCapabilities, group, rendererTrackGroupCounts, preferUnassociatedRenderer); rendererCapabilities, group, rendererTrackGroupCounts, preferUnassociatedRenderer);
...@@ -585,10 +583,8 @@ public abstract class MappingTrackSelector extends TrackSelector { ...@@ -585,10 +583,8 @@ public abstract class MappingTrackSelector extends TrackSelector {
&& trackSelection.indexOf(trackIndex) != C.INDEX_UNSET; && trackSelection.indexOf(trackIndex) != C.INDEX_UNSET;
selected[trackIndex] = isTrackSelected; selected[trackIndex] = isTrackSelected;
} }
@C.TrackType int trackGroupType = mappedTrackInfo.getRendererType(rendererIndex);
builder.add( builder.add(
new TracksInfo.TrackGroupInfo( new TracksInfo.TrackGroupInfo(trackGroup, adaptiveSupported, trackSupport, selected));
trackGroupType, trackGroup, adaptiveSupported, trackSupport, selected));
} }
} }
TrackGroupArray unmappedTrackGroups = mappedTrackInfo.getUnmappedTrackGroups(); TrackGroupArray unmappedTrackGroups = mappedTrackInfo.getUnmappedTrackGroups();
...@@ -597,12 +593,10 @@ public abstract class MappingTrackSelector extends TrackSelector { ...@@ -597,12 +593,10 @@ public abstract class MappingTrackSelector extends TrackSelector {
@C.FormatSupport int[] trackSupport = new int[trackGroup.length]; @C.FormatSupport int[] trackSupport = new int[trackGroup.length];
Arrays.fill(trackSupport, C.FORMAT_UNSUPPORTED_TYPE); Arrays.fill(trackSupport, C.FORMAT_UNSUPPORTED_TYPE);
// A track group only contains tracks of the same type, thus only consider the first track. // A track group only contains tracks of the same type, thus only consider the first track.
@C.TrackType
int trackGroupType = MimeTypes.getTrackType(trackGroup.getFormat(0).sampleMimeType);
boolean[] selected = new boolean[trackGroup.length]; // Initialized to false. boolean[] selected = new boolean[trackGroup.length]; // Initialized to false.
builder.add( builder.add(
new TracksInfo.TrackGroupInfo( new TracksInfo.TrackGroupInfo(
trackGroupType, trackGroup, /* adaptiveSupported= */ false, trackSupport, selected)); trackGroup, /* adaptiveSupported= */ false, trackSupport, selected));
} }
return new TracksInfo(builder.build()); return new TracksInfo(builder.build());
} }
......
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
*/ */
package com.google.android.exoplayer2.trackselection; package com.google.android.exoplayer2.trackselection;
import static com.google.android.exoplayer2.util.MimeTypes.AUDIO_AAC;
import static com.google.android.exoplayer2.util.MimeTypes.VIDEO_H264;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import android.util.Pair; import android.util.Pair;
...@@ -52,7 +54,7 @@ public final class MappingTrackSelectorTest { ...@@ -52,7 +54,7 @@ public final class MappingTrackSelectorTest {
new FakeRendererCapabilities(C.TRACK_TYPE_METADATA); new FakeRendererCapabilities(C.TRACK_TYPE_METADATA);
private static final TrackGroup VIDEO_TRACK_GROUP = buildTrackGroup(MimeTypes.VIDEO_H264); private static final TrackGroup VIDEO_TRACK_GROUP = buildTrackGroup(MimeTypes.VIDEO_H264);
private static final TrackGroup AUDIO_TRACK_GROUP = buildTrackGroup(MimeTypes.AUDIO_AAC); private static final TrackGroup AUDIO_TRACK_GROUP = buildTrackGroup(AUDIO_AAC);
private static final TrackGroup METADATA_TRACK_GROUP = buildTrackGroup(MimeTypes.APPLICATION_ID3); private static final TrackGroup METADATA_TRACK_GROUP = buildTrackGroup(MimeTypes.APPLICATION_ID3);
private static final Timeline TIMELINE = new FakeTimeline(); private static final Timeline TIMELINE = new FakeTimeline();
...@@ -145,10 +147,13 @@ public final class MappingTrackSelectorTest { ...@@ -145,10 +147,13 @@ public final class MappingTrackSelectorTest {
new int[] {C.TRACK_TYPE_AUDIO, C.TRACK_TYPE_VIDEO}, new int[] {C.TRACK_TYPE_AUDIO, C.TRACK_TYPE_VIDEO},
new TrackGroupArray[] { new TrackGroupArray[] {
new TrackGroupArray( new TrackGroupArray(
new TrackGroup("0", new Format.Builder().build()), new TrackGroup("0", new Format.Builder().setSampleMimeType(AUDIO_AAC).build()),
new TrackGroup("1", new Format.Builder().build())), new TrackGroup("1", new Format.Builder().setSampleMimeType(AUDIO_AAC).build())),
new TrackGroupArray( new TrackGroupArray(
new TrackGroup("2", new Format.Builder().build(), new Format.Builder().build())) new TrackGroup(
"2",
new Format.Builder().setSampleMimeType(VIDEO_H264).build(),
new Format.Builder().setSampleMimeType(VIDEO_H264).build()))
}, },
new int[] { new int[] {
RendererCapabilities.ADAPTIVE_SEAMLESS, RendererCapabilities.ADAPTIVE_NOT_SUPPORTED RendererCapabilities.ADAPTIVE_SEAMLESS, RendererCapabilities.ADAPTIVE_NOT_SUPPORTED
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment