CastPlayer only depends on common
Thanks to the move of the Player API to common, the cast player no longer need to depend on core. #player-to-common PiperOrigin-RevId: 354257309
This commit is contained in:
parent
a60938db96
commit
60f3d8168c
@ -16,7 +16,7 @@ apply from: "$gradle.ext.exoplayerSettingsDir/common_library_config.gradle"
|
|||||||
dependencies {
|
dependencies {
|
||||||
api 'com.google.android.gms:play-services-cast-framework:18.1.0'
|
api 'com.google.android.gms:play-services-cast-framework:18.1.0'
|
||||||
implementation 'androidx.annotation:annotation:' + androidxAnnotationVersion
|
implementation 'androidx.annotation:annotation:' + androidxAnnotationVersion
|
||||||
implementation project(modulePrefix + 'library-core')
|
implementation project(modulePrefix + 'library-common')
|
||||||
implementation project(modulePrefix + 'library-ui')
|
implementation project(modulePrefix + 'library-ui')
|
||||||
compileOnly 'org.checkerframework:checker-qual:' + checkerframeworkVersion
|
compileOnly 'org.checkerframework:checker-qual:' + checkerframeworkVersion
|
||||||
compileOnly 'org.checkerframework:checker-compat-qual:' + checkerframeworkCompatVersion
|
compileOnly 'org.checkerframework:checker-compat-qual:' + checkerframeworkCompatVersion
|
||||||
|
@ -30,7 +30,6 @@ import com.google.android.exoplayer2.Timeline;
|
|||||||
import com.google.android.exoplayer2.metadata.Metadata;
|
import com.google.android.exoplayer2.metadata.Metadata;
|
||||||
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.trackselection.FixedTrackSelection;
|
|
||||||
import com.google.android.exoplayer2.trackselection.TrackSelection;
|
import com.google.android.exoplayer2.trackselection.TrackSelection;
|
||||||
import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
|
import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
|
||||||
import com.google.android.exoplayer2.util.Assertions;
|
import com.google.android.exoplayer2.util.Assertions;
|
||||||
@ -766,7 +765,7 @@ public final class CastPlayer extends BasePlayer {
|
|||||||
int rendererIndex = getRendererIndexForTrackType(trackType);
|
int rendererIndex = getRendererIndexForTrackType(trackType);
|
||||||
if (isTrackActive(id, activeTrackIds) && rendererIndex != C.INDEX_UNSET
|
if (isTrackActive(id, activeTrackIds) && rendererIndex != C.INDEX_UNSET
|
||||||
&& trackSelections[rendererIndex] == null) {
|
&& trackSelections[rendererIndex] == null) {
|
||||||
trackSelections[rendererIndex] = new FixedTrackSelection(trackGroups[i], 0);
|
trackSelections[rendererIndex] = new CastTrackSelection(trackGroups[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TrackGroupArray newTrackGroups = new TrackGroupArray(trackGroups);
|
TrackGroupArray newTrackGroups = new TrackGroupArray(trackGroups);
|
||||||
|
@ -0,0 +1,91 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2021 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package com.google.android.exoplayer2.ext.cast;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import com.google.android.exoplayer2.C;
|
||||||
|
import com.google.android.exoplayer2.Format;
|
||||||
|
import com.google.android.exoplayer2.source.TrackGroup;
|
||||||
|
import com.google.android.exoplayer2.trackselection.TrackSelection;
|
||||||
|
import com.google.android.exoplayer2.util.Assertions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link TrackSelection} that only selects the first track of the provided {@link TrackGroup}.
|
||||||
|
*
|
||||||
|
* <p>This relies on {@link CastPlayer} track groups only having one track.
|
||||||
|
*/
|
||||||
|
/* package */ class CastTrackSelection implements TrackSelection {
|
||||||
|
|
||||||
|
private final TrackGroup trackGroup;
|
||||||
|
|
||||||
|
/** @param trackGroup The {@link TrackGroup} from which the first track will only be selected. */
|
||||||
|
public CastTrackSelection(TrackGroup trackGroup) {
|
||||||
|
this.trackGroup = trackGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TrackGroup getTrackGroup() {
|
||||||
|
return trackGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int length() {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Format getFormat(int index) {
|
||||||
|
Assertions.checkArgument(index == 0);
|
||||||
|
return trackGroup.getFormat(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getIndexInTrackGroup(int index) {
|
||||||
|
return index == 0 ? 0 : C.INDEX_UNSET;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings("ReferenceEquality")
|
||||||
|
public int indexOf(Format format) {
|
||||||
|
return format == trackGroup.getFormat(0) ? 0 : C.INDEX_UNSET;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int indexOf(int indexInTrackGroup) {
|
||||||
|
return indexInTrackGroup == 0 ? 0 : C.INDEX_UNSET;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Object overrides.
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return System.identityHashCode(trackGroup);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Track groups are compared by identity not value, as distinct groups may have the same value.
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings({"ReferenceEquality", "EqualsGetClass"})
|
||||||
|
public boolean equals(@Nullable Object obj) {
|
||||||
|
if (this == obj) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (obj == null || getClass() != obj.getClass()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
CastTrackSelection other = (CastTrackSelection) obj;
|
||||||
|
return trackGroup == other.trackGroup;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2018 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package com.google.android.exoplayer2.ext.cast;
|
||||||
|
|
||||||
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
|
import com.google.android.exoplayer2.C;
|
||||||
|
import com.google.android.exoplayer2.Format;
|
||||||
|
import com.google.android.exoplayer2.source.TrackGroup;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
/** Test for {@link CastTrackSelection}. */
|
||||||
|
@RunWith(AndroidJUnit4.class)
|
||||||
|
public class CastTrackSelectionTest {
|
||||||
|
|
||||||
|
private static final TrackGroup TRACK_GROUP =
|
||||||
|
new TrackGroup(new Format.Builder().build(), new Format.Builder().build());
|
||||||
|
|
||||||
|
private static final CastTrackSelection SELECTION = new CastTrackSelection(TRACK_GROUP);
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void length_isOne() {
|
||||||
|
assertThat(SELECTION.length()).isEqualTo(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getTrackGroup_returnsSameGroup() {
|
||||||
|
assertThat(SELECTION.getTrackGroup()).isSameInstanceAs(TRACK_GROUP);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getFormatSelectedTrack_isFirstTrack() {
|
||||||
|
assertThat(SELECTION.getFormat(0)).isSameInstanceAs(TRACK_GROUP.getFormat(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getIndexInTrackGroup_ofSelectedTrack_returnsFirstTrack() {
|
||||||
|
assertThat(SELECTION.getIndexInTrackGroup(0)).isEqualTo(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getIndexInTrackGroup_onePastTheEnd_returnsIndexUnset() {
|
||||||
|
assertThat(SELECTION.getIndexInTrackGroup(1)).isEqualTo(C.INDEX_UNSET);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void indexOf_selectedTrack_returnsFirstTrack() {
|
||||||
|
assertThat(SELECTION.indexOf(0)).isEqualTo(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void indexOf_onePastTheEnd_returnsIndexUnset() {
|
||||||
|
assertThat(SELECTION.indexOf(1)).isEqualTo(C.INDEX_UNSET);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = Exception.class)
|
||||||
|
public void getFormat_outOfBound_throws() {
|
||||||
|
CastTrackSelection selection = new CastTrackSelection(TRACK_GROUP);
|
||||||
|
|
||||||
|
selection.getFormat(1);
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user