/* * Copyright (C) 2015 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.android.tv.common.recording; import android.os.Parcel; import android.os.Parcelable; import java.util.Objects; /** Static representation of the recording capability of a TvInputService. */ public final class RecordingCapability implements Parcelable { /** The inputId this capability represents. */ public final String inputId; /** * The max number of concurrent sessions that require a tuner. * *
Both recording and playing live TV requires a Tuner. */ public final int maxConcurrentTunedSessions; /** * The max number concurrent session that play a stream. * *
This is often limited by the number of decoders available. The count includes both playing * live TV and playing a recorded stream. */ public final int maxConcurrentPlayingSessions; /** * Max number of concurrent sessions all types. * *
This may be limited by bandwidth or CPU or other factors.
*/
public final int maxConcurrentSessionsOfAllTypes;
/** True if a tuned session can support recording and playback from the same resource. */
public final boolean playbackWhileRecording;
private RecordingCapability(
String inputId,
int maxConcurrentTunedSessions,
int maxConcurrentPlayingSessions,
int maxConcurrentSessionsOfAllTypes,
boolean playbackWhileRecording) {
this.inputId = inputId;
this.maxConcurrentTunedSessions = maxConcurrentTunedSessions;
this.maxConcurrentPlayingSessions = maxConcurrentPlayingSessions;
this.maxConcurrentSessionsOfAllTypes = maxConcurrentSessionsOfAllTypes;
this.playbackWhileRecording = playbackWhileRecording;
}
protected RecordingCapability(Parcel in) {
inputId = in.readString();
maxConcurrentTunedSessions = in.readInt();
maxConcurrentPlayingSessions = in.readInt();
maxConcurrentSessionsOfAllTypes = in.readInt();
playbackWhileRecording = in.readByte() != 0;
}
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeString(inputId);
parcel.writeInt(maxConcurrentTunedSessions);
parcel.writeInt(maxConcurrentPlayingSessions);
parcel.writeInt(maxConcurrentSessionsOfAllTypes);
parcel.writeByte((byte) (playbackWhileRecording ? 1 : 0));
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof RecordingCapability)) {
return false;
}
RecordingCapability that = (RecordingCapability) o;
return Objects.equals(maxConcurrentTunedSessions, that.maxConcurrentTunedSessions)
&& Objects.equals(maxConcurrentPlayingSessions, that.maxConcurrentPlayingSessions)
&& Objects.equals(
maxConcurrentSessionsOfAllTypes, that.maxConcurrentSessionsOfAllTypes)
&& Objects.equals(playbackWhileRecording, that.playbackWhileRecording)
&& Objects.equals(inputId, that.inputId);
}
@Override
public int hashCode() {
return Objects.hash(inputId);
}
@Override
public String toString() {
return "RecordingCapability{"
+ "inputId='"
+ inputId
+ '\''
+ ", maxConcurrentTunedSessions="
+ maxConcurrentTunedSessions
+ ", maxConcurrentPlayingSessions="
+ maxConcurrentPlayingSessions
+ ", maxConcurrentSessionsOfAllTypes="
+ maxConcurrentSessionsOfAllTypes
+ ", playbackWhileRecording="
+ playbackWhileRecording
+ '}';
}
@Override
public int describeContents() {
return 0;
}
public static final Creator