1c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim/* 2c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * Copyright (C) 2014 The Android Open Source Project 3c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * 4c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * Licensed under the Apache License, Version 2.0 (the "License"); 5c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * you may not use this file except in compliance with the License. 6c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * You may obtain a copy of the License at 7c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * 8c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * http://www.apache.org/licenses/LICENSE-2.0 9c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * 10c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * Unless required by applicable law or agreed to in writing, software 11c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * distributed under the License is distributed on an "AS IS" BASIS, 12c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * See the License for the specific language governing permissions and 14c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * limitations under the License. 15c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim */ 16c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 17d5cc4a281e7ce29d1e8687ff3394b57a3a549260Jae Seopackage android.media.tv; 18c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 19230204967978b65731f1dd85278aaadb26322a7fJeff Davidsonimport android.annotation.SystemApi; 20c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kimimport android.os.Parcel; 21c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kimimport android.os.Parcelable; 22c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kimimport android.util.Log; 23c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 24c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim/** 25c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * @hide 26c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim */ 27230204967978b65731f1dd85278aaadb26322a7fJeff Davidson@SystemApi 28c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kimpublic class TvStreamConfig implements Parcelable { 29c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim static final String TAG = TvStreamConfig.class.getSimpleName(); 30c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 31c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public final static int STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE = 1; 32c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public final static int STREAM_TYPE_BUFFER_PRODUCER = 2; 33c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 34c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim private int mStreamId; 35c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim private int mType; 36c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim private int mMaxWidth; 37c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim private int mMaxHeight; 38c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim /** 39c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * Generations are incremented once framework receives STREAM_CONFIGURATION_CHANGED event from 40c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * HAL module. Framework should throw away outdated configurations and get new configurations 41c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * via tv_input_device::get_stream_configurations(). 42c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim */ 43c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim private int mGeneration; 44c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 45c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public static final Parcelable.Creator<TvStreamConfig> CREATOR = 46c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim new Parcelable.Creator<TvStreamConfig>() { 47c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim @Override 48c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public TvStreamConfig createFromParcel(Parcel source) { 49c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim try { 50c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim return new Builder(). 51c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim streamId(source.readInt()). 52c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim type(source.readInt()). 53c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim maxWidth(source.readInt()). 54c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim maxHeight(source.readInt()). 55c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim generation(source.readInt()).build(); 56c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } catch (Exception e) { 57c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim Log.e(TAG, "Exception creating TvStreamConfig from parcel", e); 58c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim return null; 59c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 60c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 61c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 62c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim @Override 63c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public TvStreamConfig[] newArray(int size) { 64c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim return new TvStreamConfig[size]; 65c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 66c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim }; 67c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 68c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim private TvStreamConfig() {} 69c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 70c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public int getStreamId() { 71c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim return mStreamId; 72c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 73c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 74c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public int getType() { 75c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim return mType; 76c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 77c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 78c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public int getMaxWidth() { 79c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim return mMaxWidth; 80c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 81c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 82c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public int getMaxHeight() { 83c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim return mMaxHeight; 84c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 85c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 86c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public int getGeneration() { 87c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim return mGeneration; 88c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 89c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 9021aa3467cd14260418cc47334b656adf841a567cWonsik Kim @Override 9121aa3467cd14260418cc47334b656adf841a567cWonsik Kim public String toString() { 9221aa3467cd14260418cc47334b656adf841a567cWonsik Kim StringBuilder b = new StringBuilder(128); 9321aa3467cd14260418cc47334b656adf841a567cWonsik Kim b.append("TvStreamConfig {"); 9421aa3467cd14260418cc47334b656adf841a567cWonsik Kim b.append("mStreamId=").append(mStreamId).append(";"); 9521aa3467cd14260418cc47334b656adf841a567cWonsik Kim b.append("mType=").append(mType).append(";"); 9621aa3467cd14260418cc47334b656adf841a567cWonsik Kim b.append("mGeneration=").append(mGeneration).append("}"); 9721aa3467cd14260418cc47334b656adf841a567cWonsik Kim return b.toString(); 9821aa3467cd14260418cc47334b656adf841a567cWonsik Kim } 9921aa3467cd14260418cc47334b656adf841a567cWonsik Kim 100c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim // Parcelable 101c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim @Override 102c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public int describeContents() { 103c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim return 0; 104c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 105c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 106c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim @Override 107c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public void writeToParcel(Parcel dest, int flags) { 108c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim dest.writeInt(mStreamId); 109c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim dest.writeInt(mType); 110c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim dest.writeInt(mMaxWidth); 111c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim dest.writeInt(mMaxHeight); 112c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim dest.writeInt(mGeneration); 113c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 114c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 115c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim /** 116c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * A helper class for creating a TvStreamConfig object. 117c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim */ 118c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public static final class Builder { 119c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim private Integer mStreamId; 120c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim private Integer mType; 121c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim private Integer mMaxWidth; 122c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim private Integer mMaxHeight; 123c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim private Integer mGeneration; 124c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 125c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public Builder() { 126c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 127c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 128c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public Builder streamId(int streamId) { 129c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim mStreamId = streamId; 130c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim return this; 131c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 132c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 133c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public Builder type(int type) { 134c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim mType = type; 135c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim return this; 136c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 137c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 138c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public Builder maxWidth(int maxWidth) { 139c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim mMaxWidth = maxWidth; 140c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim return this; 141c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 142c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 143c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public Builder maxHeight(int maxHeight) { 144c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim mMaxHeight = maxHeight; 145c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim return this; 146c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 147c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 148c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public Builder generation(int generation) { 149c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim mGeneration = generation; 150c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim return this; 151c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 152c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 153c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public TvStreamConfig build() { 154c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim if (mStreamId == null || mType == null || mMaxWidth == null || mMaxHeight == null 155c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim || mGeneration == null) { 156c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim throw new UnsupportedOperationException(); 157c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 158c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 159c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim TvStreamConfig config = new TvStreamConfig(); 160c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim config.mStreamId = mStreamId; 161c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim config.mType = mType; 162c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim config.mMaxWidth = mMaxWidth; 163c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim config.mMaxHeight = mMaxHeight; 164c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim config.mGeneration = mGeneration; 165c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim return config; 166c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 167c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 1688f24a8b60f9afc1aedb89e7ee80ce65515439600Wonsik Kim 1698f24a8b60f9afc1aedb89e7ee80ce65515439600Wonsik Kim @Override 1708f24a8b60f9afc1aedb89e7ee80ce65515439600Wonsik Kim public boolean equals(Object obj) { 1718f24a8b60f9afc1aedb89e7ee80ce65515439600Wonsik Kim if (obj == null) return false; 1728f24a8b60f9afc1aedb89e7ee80ce65515439600Wonsik Kim if (!(obj instanceof TvStreamConfig)) return false; 1738f24a8b60f9afc1aedb89e7ee80ce65515439600Wonsik Kim 1748f24a8b60f9afc1aedb89e7ee80ce65515439600Wonsik Kim TvStreamConfig config = (TvStreamConfig) obj; 1758f24a8b60f9afc1aedb89e7ee80ce65515439600Wonsik Kim return config.mGeneration == mGeneration 1768f24a8b60f9afc1aedb89e7ee80ce65515439600Wonsik Kim && config.mStreamId == mStreamId 1778f24a8b60f9afc1aedb89e7ee80ce65515439600Wonsik Kim && config.mType == mType 1788f24a8b60f9afc1aedb89e7ee80ce65515439600Wonsik Kim && config.mMaxWidth == mMaxWidth 1798f24a8b60f9afc1aedb89e7ee80ce65515439600Wonsik Kim && config.mMaxHeight == mMaxHeight; 1808f24a8b60f9afc1aedb89e7ee80ce65515439600Wonsik Kim } 181230204967978b65731f1dd85278aaadb26322a7fJeff Davidson} 182