1ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko/* 2ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * Copyright (C) 2015 The Android Open Source Project 3ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * 4ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * Licensed under the Apache License, Version 2.0 (the "License"); 5ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * you may not use this file except in compliance with the License. 6ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * You may obtain a copy of the License at 7ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * 8ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * http://www.apache.org/licenses/LICENSE-2.0 9ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * 10ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * Unless required by applicable law or agreed to in writing, software 11ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * distributed under the License is distributed on an "AS IS" BASIS, 12ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * See the License for the specific language governing permissions and 14ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * limitations under the License 15ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko */ 16ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko 17ba5845f23b8fbc985890f892961abc8b39886611Nick Chalkopackage com.android.tv.common.recording; 18ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko 19ba5845f23b8fbc985890f892961abc8b39886611Nick Chalkoimport android.os.Parcel; 20ba5845f23b8fbc985890f892961abc8b39886611Nick Chalkoimport android.os.Parcelable; 21ba5845f23b8fbc985890f892961abc8b39886611Nick Chalkoimport java.util.Objects; 22ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko 2395961816a768da387f0b5523cf4363ace2044089Nick Chalko/** Static representation of the recording capability of a TvInputService. */ 2495961816a768da387f0b5523cf4363ace2044089Nick Chalkopublic final class RecordingCapability implements Parcelable { 2595961816a768da387f0b5523cf4363ace2044089Nick Chalko /** The inputId this capability represents. */ 26ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko public final String inputId; 27ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko 28ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko /** 29ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * The max number of concurrent sessions that require a tuner. 30ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * 31ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * <p>Both recording and playing live TV requires a Tuner. 32ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko */ 33ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko public final int maxConcurrentTunedSessions; 34ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko 35ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko /** 36ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * The max number concurrent session that play a stream. 37ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * 3895961816a768da387f0b5523cf4363ace2044089Nick Chalko * <p>This is often limited by the number of decoders available. The count includes both playing 3995961816a768da387f0b5523cf4363ace2044089Nick Chalko * live TV and playing a recorded stream. 40ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko */ 41ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko public final int maxConcurrentPlayingSessions; 42ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko 43ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko /** 44ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * Max number of concurrent sessions all types. 45ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * 46ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * <p>This may be limited by bandwidth or CPU or other factors. 47ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko */ 48ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko public final int maxConcurrentSessionsOfAllTypes; 49ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko 5095961816a768da387f0b5523cf4363ace2044089Nick Chalko /** True if a tuned session can support recording and playback from the same resource. */ 51ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko public final boolean playbackWhileRecording; 52ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko 5395961816a768da387f0b5523cf4363ace2044089Nick Chalko private RecordingCapability( 5495961816a768da387f0b5523cf4363ace2044089Nick Chalko String inputId, 5595961816a768da387f0b5523cf4363ace2044089Nick Chalko int maxConcurrentTunedSessions, 5695961816a768da387f0b5523cf4363ace2044089Nick Chalko int maxConcurrentPlayingSessions, 5795961816a768da387f0b5523cf4363ace2044089Nick Chalko int maxConcurrentSessionsOfAllTypes, 58ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko boolean playbackWhileRecording) { 59ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko this.inputId = inputId; 60ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko this.maxConcurrentTunedSessions = maxConcurrentTunedSessions; 61ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko this.maxConcurrentPlayingSessions = maxConcurrentPlayingSessions; 62ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko this.maxConcurrentSessionsOfAllTypes = maxConcurrentSessionsOfAllTypes; 63ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko this.playbackWhileRecording = playbackWhileRecording; 64ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko } 65ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko 66ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko protected RecordingCapability(Parcel in) { 67ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko inputId = in.readString(); 68ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko maxConcurrentTunedSessions = in.readInt(); 69ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko maxConcurrentPlayingSessions = in.readInt(); 70ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko maxConcurrentSessionsOfAllTypes = in.readInt(); 71ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko playbackWhileRecording = in.readByte() != 0; 72ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko } 73ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko 74ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko @Override 75ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko public void writeToParcel(Parcel parcel, int flags) { 76ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko parcel.writeString(inputId); 77ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko parcel.writeInt(maxConcurrentTunedSessions); 78ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko parcel.writeInt(maxConcurrentPlayingSessions); 79ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko parcel.writeInt(maxConcurrentSessionsOfAllTypes); 80ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko parcel.writeByte((byte) (playbackWhileRecording ? 1 : 0)); 81ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko } 82ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko 83ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko @Override 84ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko public boolean equals(Object o) { 85ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko if (this == o) { 86ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko return true; 87ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko } 88ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko if (!(o instanceof RecordingCapability)) { 89ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko return false; 90ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko } 91ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko RecordingCapability that = (RecordingCapability) o; 9295961816a768da387f0b5523cf4363ace2044089Nick Chalko return Objects.equals(maxConcurrentTunedSessions, that.maxConcurrentTunedSessions) 9395961816a768da387f0b5523cf4363ace2044089Nick Chalko && Objects.equals(maxConcurrentPlayingSessions, that.maxConcurrentPlayingSessions) 9495961816a768da387f0b5523cf4363ace2044089Nick Chalko && Objects.equals( 9595961816a768da387f0b5523cf4363ace2044089Nick Chalko maxConcurrentSessionsOfAllTypes, that.maxConcurrentSessionsOfAllTypes) 9695961816a768da387f0b5523cf4363ace2044089Nick Chalko && Objects.equals(playbackWhileRecording, that.playbackWhileRecording) 9795961816a768da387f0b5523cf4363ace2044089Nick Chalko && Objects.equals(inputId, that.inputId); 98ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko } 99ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko 100ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko @Override 101ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko public int hashCode() { 102ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko return Objects.hash(inputId); 103ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko } 104ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko 105ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko @Override 106ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko public String toString() { 10795961816a768da387f0b5523cf4363ace2044089Nick Chalko return "RecordingCapability{" 10895961816a768da387f0b5523cf4363ace2044089Nick Chalko + "inputId='" 10995961816a768da387f0b5523cf4363ace2044089Nick Chalko + inputId 11095961816a768da387f0b5523cf4363ace2044089Nick Chalko + '\'' 11195961816a768da387f0b5523cf4363ace2044089Nick Chalko + ", maxConcurrentTunedSessions=" 11295961816a768da387f0b5523cf4363ace2044089Nick Chalko + maxConcurrentTunedSessions 11395961816a768da387f0b5523cf4363ace2044089Nick Chalko + ", maxConcurrentPlayingSessions=" 11495961816a768da387f0b5523cf4363ace2044089Nick Chalko + maxConcurrentPlayingSessions 11595961816a768da387f0b5523cf4363ace2044089Nick Chalko + ", maxConcurrentSessionsOfAllTypes=" 11695961816a768da387f0b5523cf4363ace2044089Nick Chalko + maxConcurrentSessionsOfAllTypes 11795961816a768da387f0b5523cf4363ace2044089Nick Chalko + ", playbackWhileRecording=" 11895961816a768da387f0b5523cf4363ace2044089Nick Chalko + playbackWhileRecording 11995961816a768da387f0b5523cf4363ace2044089Nick Chalko + '}'; 120ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko } 121ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko 122ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko @Override 123ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko public int describeContents() { 124ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko return 0; 125ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko } 126ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko 12795961816a768da387f0b5523cf4363ace2044089Nick Chalko public static final Creator<RecordingCapability> CREATOR = 12895961816a768da387f0b5523cf4363ace2044089Nick Chalko new Creator<RecordingCapability>() { 12995961816a768da387f0b5523cf4363ace2044089Nick Chalko @Override 13095961816a768da387f0b5523cf4363ace2044089Nick Chalko public RecordingCapability createFromParcel(Parcel in) { 13195961816a768da387f0b5523cf4363ace2044089Nick Chalko return new RecordingCapability(in); 13295961816a768da387f0b5523cf4363ace2044089Nick Chalko } 133ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko 13495961816a768da387f0b5523cf4363ace2044089Nick Chalko @Override 13595961816a768da387f0b5523cf4363ace2044089Nick Chalko public RecordingCapability[] newArray(int size) { 13695961816a768da387f0b5523cf4363ace2044089Nick Chalko return new RecordingCapability[size]; 13795961816a768da387f0b5523cf4363ace2044089Nick Chalko } 13895961816a768da387f0b5523cf4363ace2044089Nick Chalko }; 139ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko 140ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko public static Builder builder() { 141ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko return new Builder(); 142ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko } 143ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko 144ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko public static final class Builder { 145ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko private String mInputId; 146ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko private int mMaxConcurrentTunedSessions; 147ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko private int mMaxConcurrentPlayingSessions; 148ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko private int mMaxConcurrentSessionsOfAllTypes; 149ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko private boolean mPlaybackWhileRecording; 150ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko 151ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko public Builder setInputId(String inputId) { 152ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko mInputId = inputId; 153ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko return this; 154ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko } 155ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko 156ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko public Builder setMaxConcurrentTunedSessions(int maxConcurrentTunedSessions) { 157ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko mMaxConcurrentTunedSessions = maxConcurrentTunedSessions; 158ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko return this; 159ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko } 160ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko 161ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko public Builder setMaxConcurrentPlayingSessions(int maxConcurrentPlayingSessions) { 162ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko mMaxConcurrentPlayingSessions = maxConcurrentPlayingSessions; 163ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko return this; 164ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko } 165ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko 166ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko public Builder setMaxConcurrentSessionsOfAllTypes(int maxConcurrentSessionsOfAllTypes) { 167ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko mMaxConcurrentSessionsOfAllTypes = maxConcurrentSessionsOfAllTypes; 168ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko return this; 169ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko } 170ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko 171ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko public Builder setPlaybackWhileRecording(boolean playbackWhileRecording) { 172ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko mPlaybackWhileRecording = playbackWhileRecording; 173ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko return this; 174ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko } 175ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko 176ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko public RecordingCapability build() { 17795961816a768da387f0b5523cf4363ace2044089Nick Chalko return new RecordingCapability( 17895961816a768da387f0b5523cf4363ace2044089Nick Chalko mInputId, 17995961816a768da387f0b5523cf4363ace2044089Nick Chalko mMaxConcurrentTunedSessions, 18095961816a768da387f0b5523cf4363ace2044089Nick Chalko mMaxConcurrentPlayingSessions, 18195961816a768da387f0b5523cf4363ace2044089Nick Chalko mMaxConcurrentSessionsOfAllTypes, 182ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko mPlaybackWhileRecording); 183ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko } 184ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko } 185ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko} 186