Commit 0a4ea1cd by olly Committed by Oliver Woodman

Make DefaultTrackSelector.Parameters parcelable

Issue: #3915

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=190635670
parent 13592dfb
...@@ -429,7 +429,7 @@ public final class Format implements Parcelable { ...@@ -429,7 +429,7 @@ public final class Format implements Parcelable {
frameRate = in.readFloat(); frameRate = in.readFloat();
rotationDegrees = in.readInt(); rotationDegrees = in.readInt();
pixelWidthHeightRatio = in.readFloat(); pixelWidthHeightRatio = in.readFloat();
boolean hasProjectionData = in.readInt() != 0; boolean hasProjectionData = Util.readBoolean(in);
projectionData = hasProjectionData ? in.createByteArray() : null; projectionData = hasProjectionData ? in.createByteArray() : null;
stereoMode = in.readInt(); stereoMode = in.readInt();
colorInfo = in.readParcelable(ColorInfo.class.getClassLoader()); colorInfo = in.readParcelable(ColorInfo.class.getClassLoader());
...@@ -682,7 +682,7 @@ public final class Format implements Parcelable { ...@@ -682,7 +682,7 @@ public final class Format implements Parcelable {
dest.writeFloat(frameRate); dest.writeFloat(frameRate);
dest.writeInt(rotationDegrees); dest.writeInt(rotationDegrees);
dest.writeFloat(pixelWidthHeightRatio); dest.writeFloat(pixelWidthHeightRatio);
dest.writeInt(projectionData != null ? 1 : 0); Util.writeBoolean(dest, projectionData != null);
if (projectionData != null) { if (projectionData != null) {
dest.writeByteArray(projectionData); dest.writeByteArray(projectionData);
} }
......
...@@ -17,6 +17,8 @@ package com.google.android.exoplayer2.trackselection; ...@@ -17,6 +17,8 @@ package com.google.android.exoplayer2.trackselection;
import android.content.Context; import android.content.Context;
import android.graphics.Point; import android.graphics.Point;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.text.TextUtils; import android.text.TextUtils;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
...@@ -321,10 +323,8 @@ public class DefaultTrackSelector extends MappingTrackSelector { ...@@ -321,10 +323,8 @@ public class DefaultTrackSelector extends MappingTrackSelector {
} }
/** /** Constraint parameters for {@link DefaultTrackSelector}. */
* Constraint parameters for {@link DefaultTrackSelector}. public static final class Parameters implements Parcelable {
*/
public static final class Parameters {
/** /**
* An instance with default values: * An instance with default values:
...@@ -442,7 +442,7 @@ public class DefaultTrackSelector extends MappingTrackSelector { ...@@ -442,7 +442,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
true); true);
} }
private Parameters( /* package */ Parameters(
String preferredAudioLanguage, String preferredAudioLanguage,
String preferredTextLanguage, String preferredTextLanguage,
boolean selectUndeterminedTextLanguage, boolean selectUndeterminedTextLanguage,
...@@ -475,6 +475,24 @@ public class DefaultTrackSelector extends MappingTrackSelector { ...@@ -475,6 +475,24 @@ public class DefaultTrackSelector extends MappingTrackSelector {
this.viewportOrientationMayChange = viewportOrientationMayChange; this.viewportOrientationMayChange = viewportOrientationMayChange;
} }
/* package */ Parameters(Parcel in) {
this.preferredAudioLanguage = in.readString();
this.preferredTextLanguage = in.readString();
this.selectUndeterminedTextLanguage = Util.readBoolean(in);
this.disabledTextTrackSelectionFlags = in.readInt();
this.forceLowestBitrate = Util.readBoolean(in);
this.allowMixedMimeAdaptiveness = Util.readBoolean(in);
this.allowNonSeamlessAdaptiveness = Util.readBoolean(in);
this.maxVideoWidth = in.readInt();
this.maxVideoHeight = in.readInt();
this.maxVideoBitrate = in.readInt();
this.exceedVideoConstraintsIfNecessary = Util.readBoolean(in);
this.exceedRendererCapabilitiesIfNecessary = Util.readBoolean(in);
this.viewportWidth = in.readInt();
this.viewportHeight = in.readInt();
this.viewportOrientationMayChange = Util.readBoolean(in);
}
/** /**
* Creates a new {@link ParametersBuilder}, copying the initial values from this instance. * Creates a new {@link ParametersBuilder}, copying the initial values from this instance.
*/ */
...@@ -528,6 +546,45 @@ public class DefaultTrackSelector extends MappingTrackSelector { ...@@ -528,6 +546,45 @@ public class DefaultTrackSelector extends MappingTrackSelector {
return result; return result;
} }
// Parcelable implementation.
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(preferredAudioLanguage);
dest.writeString(preferredTextLanguage);
Util.writeBoolean(dest, selectUndeterminedTextLanguage);
dest.writeInt(disabledTextTrackSelectionFlags);
Util.writeBoolean(dest, forceLowestBitrate);
Util.writeBoolean(dest, allowMixedMimeAdaptiveness);
Util.writeBoolean(dest, allowNonSeamlessAdaptiveness);
dest.writeInt(maxVideoWidth);
dest.writeInt(maxVideoHeight);
dest.writeInt(maxVideoBitrate);
Util.writeBoolean(dest, exceedVideoConstraintsIfNecessary);
Util.writeBoolean(dest, exceedRendererCapabilitiesIfNecessary);
dest.writeInt(viewportWidth);
dest.writeInt(viewportHeight);
Util.writeBoolean(dest, viewportOrientationMayChange);
}
public static final Parcelable.Creator<Parameters> CREATOR =
new Parcelable.Creator<Parameters>() {
@Override
public Parameters createFromParcel(Parcel in) {
return new Parameters(in);
}
@Override
public Parameters[] newArray(int size) {
return new Parameters[size];
}
};
} }
/** /**
......
...@@ -25,6 +25,7 @@ import android.content.pm.PackageManager.NameNotFoundException; ...@@ -25,6 +25,7 @@ import android.content.pm.PackageManager.NameNotFoundException;
import android.graphics.Point; import android.graphics.Point;
import android.net.Uri; import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Parcel;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
...@@ -252,6 +253,28 @@ public final class Util { ...@@ -252,6 +253,28 @@ public final class Util {
} }
/** /**
* Reads an integer from a {@link Parcel} and interprets it as a boolean, with 0 mapping to false
* and all other values mapping to true.
*
* @param parcel The {@link Parcel} to read from.
* @return The read value.
*/
public static boolean readBoolean(Parcel parcel) {
return parcel.readInt() != 0;
}
/**
* Writes a boolean to a {@link Parcel}. The boolean is written as an integer with value 1 (true)
* or 0 (false).
*
* @param parcel The {@link Parcel} to write to.
* @param value The value to write.
*/
public static void writeBoolean(Parcel parcel, boolean value) {
parcel.writeInt(value ? 1 : 0);
}
/**
* Returns a normalized RFC 639-2/T code for {@code language}. * Returns a normalized RFC 639-2/T code for {@code language}.
* *
* @param language A case-insensitive ISO 639 alpha-2 or alpha-3 language code. * @param language A case-insensitive ISO 639 alpha-2 or alpha-3 language code.
......
...@@ -19,6 +19,8 @@ import android.os.Parcel; ...@@ -19,6 +19,8 @@ import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.util.Util;
import java.util.Arrays; import java.util.Arrays;
/** /**
...@@ -77,7 +79,7 @@ public final class ColorInfo implements Parcelable { ...@@ -77,7 +79,7 @@ public final class ColorInfo implements Parcelable {
colorSpace = in.readInt(); colorSpace = in.readInt();
colorRange = in.readInt(); colorRange = in.readInt();
colorTransfer = in.readInt(); colorTransfer = in.readInt();
boolean hasHdrStaticInfo = in.readInt() != 0; boolean hasHdrStaticInfo = Util.readBoolean(in);
hdrStaticInfo = hasHdrStaticInfo ? in.createByteArray() : null; hdrStaticInfo = hasHdrStaticInfo ? in.createByteArray() : null;
} }
...@@ -126,7 +128,7 @@ public final class ColorInfo implements Parcelable { ...@@ -126,7 +128,7 @@ public final class ColorInfo implements Parcelable {
dest.writeInt(colorSpace); dest.writeInt(colorSpace);
dest.writeInt(colorRange); dest.writeInt(colorRange);
dest.writeInt(colorTransfer); dest.writeInt(colorTransfer);
dest.writeInt(hdrStaticInfo != null ? 1 : 0); Util.writeBoolean(dest, hdrStaticInfo != null);
if (hdrStaticInfo != null) { if (hdrStaticInfo != null) {
dest.writeByteArray(hdrStaticInfo); dest.writeByteArray(hdrStaticInfo);
} }
......
...@@ -8,6 +8,7 @@ import static org.mockito.Mockito.times; ...@@ -8,6 +8,7 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.MockitoAnnotations.initMocks; import static org.mockito.MockitoAnnotations.initMocks;
import android.os.Parcel;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.ExoPlaybackException; import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
...@@ -50,6 +51,37 @@ public final class DefaultTrackSelectorTest { ...@@ -50,6 +51,37 @@ public final class DefaultTrackSelectorTest {
trackSelector = new DefaultTrackSelector(); trackSelector = new DefaultTrackSelector();
} }
/** Tests {@link Parameters} {@link android.os.Parcelable} implementation. */
@Test
public void testParametersParcelable() {
Parameters parametersToParcel =
new Parameters(
/* preferredAudioLanguage= */ "en",
/* preferredTextLanguage= */ "de",
/* selectUndeterminedTextLanguage= */ false,
/* disabledTextTrackSelectionFlags= */ 0,
/* forceLowestBitrate= */ true,
/* allowMixedMimeAdaptiveness= */ false,
/* allowNonSeamlessAdaptiveness= */ true,
/* maxVideoWidth= */ 1,
/* maxVideoHeight= */ 2,
/* maxVideoBitrate= */ 3,
/* exceedVideoConstraintsIfNecessary= */ false,
/* exceedRendererCapabilitiesIfNecessary= */ true,
/* viewportWidth= */ 4,
/* viewportHeight= */ 5,
/* viewportOrientationMayChange= */ false);
Parcel parcel = Parcel.obtain();
parametersToParcel.writeToParcel(parcel, 0);
parcel.setDataPosition(0);
Parameters parametersFromParcel = Parameters.CREATOR.createFromParcel(parcel);
assertThat(parametersFromParcel).isEqualTo(parametersToParcel);
parcel.recycle();
}
/** /**
* Tests that track selector will not call * Tests that track selector will not call
* {@link InvalidationListener#onTrackSelectionsInvalidated()} when it's set with default * {@link InvalidationListener#onTrackSelectionsInvalidated()} when it's set with default
......
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