165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn/* 265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Copyright (C) 2011 The Android Open Source Project 365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * 465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Licensed under the Apache License, Version 2.0 (the "License"); 565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * you may not use this file except in compliance with the License. 665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * You may obtain a copy of the License at 765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * 865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * http://www.apache.org/licenses/LICENSE-2.0 965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * 1065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Unless required by applicable law or agreed to in writing, software 1165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * distributed under the License is distributed on an "AS IS" BASIS, 1265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * See the License for the specific language governing permissions and 1465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * limitations under the License. 1565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn */ 1665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 1765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 1865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennpackage android.filterfw.core; 1965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 2065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport android.filterfw.core.KeyValueMap; 2165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport android.filterfw.core.MutableFrameFormat; 2265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 2365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport java.util.Arrays; 2465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport java.util.Map.Entry; 2565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 2665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn/** 2765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @hide 2865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn */ 2965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennpublic class FrameFormat { 3065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 3165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public static final int TYPE_UNSPECIFIED = 0; 3265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public static final int TYPE_BIT = 1; 3365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public static final int TYPE_BYTE = 2; 3465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public static final int TYPE_INT16 = 3; 3565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public static final int TYPE_INT32 = 4; 3665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public static final int TYPE_FLOAT = 5; 3765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public static final int TYPE_DOUBLE = 6; 3865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public static final int TYPE_POINTER = 7; 3965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public static final int TYPE_OBJECT = 8; 4065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 4165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public static final int TARGET_UNSPECIFIED = 0; 4265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public static final int TARGET_SIMPLE = 1; 4365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public static final int TARGET_NATIVE = 2; 4465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public static final int TARGET_GPU = 3; 4565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public static final int TARGET_VERTEXBUFFER = 4; 4665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public static final int TARGET_RS = 5; 4765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 4865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public static final int SIZE_UNSPECIFIED = 0; 4965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 5065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // TODO: When convenience formats are used, consider changing this to 0 and have the convenience 5165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // intializers use a proper BPS. 5265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public static final int BYTES_PER_SAMPLE_UNSPECIFIED = 1; 5365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 5465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn protected static final int SIZE_UNKNOWN = -1; 5565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 5665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn protected int mBaseType = TYPE_UNSPECIFIED; 5765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn protected int mBytesPerSample = 1; 5865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn protected int mSize = SIZE_UNKNOWN; 5965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn protected int mTarget = TARGET_UNSPECIFIED; 6065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn protected int[] mDimensions; 6165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn protected KeyValueMap mMetaData; 6265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn protected Class mObjectClass; 6365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 6465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn protected FrameFormat() { 6565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 6665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 6765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public FrameFormat(int baseType, int target) { 6865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn mBaseType = baseType; 6965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn mTarget = target; 7065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn initDefaults(); 7165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 7265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 7365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public static FrameFormat unspecified() { 7465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return new FrameFormat(TYPE_UNSPECIFIED, TARGET_UNSPECIFIED); 7565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 7665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 7765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public int getBaseType() { 7865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return mBaseType; 7965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 8065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 8165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public boolean isBinaryDataType() { 8265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return mBaseType >= TYPE_BIT && mBaseType <= TYPE_DOUBLE; 8365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 8465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 8565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public int getBytesPerSample() { 8665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return mBytesPerSample; 8765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 8865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 8965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public int getValuesPerSample() { 9065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return mBytesPerSample / bytesPerSampleOf(mBaseType); 9165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 9265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 9365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public int getTarget() { 9465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return mTarget; 9565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 9665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 9765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public int[] getDimensions() { 9865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return mDimensions; 9965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 10065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 10165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public int getDimension(int i) { 10265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return mDimensions[i]; 10365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 10465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 10565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public int getDimensionCount() { 10665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return mDimensions == null ? 0 : mDimensions.length; 10765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 10865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 10965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public boolean hasMetaKey(String key) { 11065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return mMetaData != null ? mMetaData.containsKey(key) : false; 11165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 11265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 11365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public boolean hasMetaKey(String key, Class expectedClass) { 11465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (mMetaData != null && mMetaData.containsKey(key)) { 11565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (!expectedClass.isAssignableFrom(mMetaData.get(key).getClass())) { 11665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn throw new RuntimeException( 11765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn "FrameFormat meta-key '" + key + "' is of type " + 11865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn mMetaData.get(key).getClass() + " but expected to be of type " + 11965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn expectedClass + "!"); 12065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 12165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return true; 12265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 12365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return false; 12465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 12565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 12665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public Object getMetaValue(String key) { 12765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return mMetaData != null ? mMetaData.get(key) : null; 12865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 12965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 13065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public int getNumberOfDimensions() { 13165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return mDimensions != null ? mDimensions.length : 0; 13265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 13365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 13465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public int getLength() { 13565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return (mDimensions != null && mDimensions.length >= 1) ? mDimensions[0] : -1; 13665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 13765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 13865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public int getWidth() { 13965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return getLength(); 14065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 14165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 14265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public int getHeight() { 14365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return (mDimensions != null && mDimensions.length >= 2) ? mDimensions[1] : -1; 14465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 14565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 14665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public int getDepth() { 14765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return (mDimensions != null && mDimensions.length >= 3) ? mDimensions[2] : -1; 14865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 14965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 15065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public int getSize() { 15165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (mSize == SIZE_UNKNOWN) mSize = calcSize(mDimensions); 15265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return mSize; 15365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 15465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 15565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public Class getObjectClass() { 15665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return mObjectClass; 15765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 15865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 15965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public MutableFrameFormat mutableCopy() { 16065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn MutableFrameFormat result = new MutableFrameFormat(); 16165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn result.setBaseType(getBaseType()); 16265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn result.setTarget(getTarget()); 16365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn result.setBytesPerSample(getBytesPerSample()); 16465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn result.setDimensions(getDimensions()); 16565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn result.setObjectClass(getObjectClass()); 16665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn result.mMetaData = mMetaData == null ? null : (KeyValueMap)mMetaData.clone(); 16765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return result; 16865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 16965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 17065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn @Override 17165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public boolean equals(Object object) { 17265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (this == object) { 17365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return true; 17465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 17565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 17665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (!(object instanceof FrameFormat)) { 17765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return false; 17865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 17965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 18065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn FrameFormat format = (FrameFormat)object; 18165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return format.mBaseType == mBaseType && 18265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn format.mTarget == mTarget && 18365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn format.mBytesPerSample == mBytesPerSample && 18465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn Arrays.equals(format.mDimensions, mDimensions) && 18565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn format.mMetaData.equals(mMetaData); 18665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 18765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 18865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn @Override 18965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public int hashCode() { 19065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return 4211 ^ mBaseType ^ mBytesPerSample ^ getSize(); 19165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 19265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 19365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public boolean isCompatibleWith(FrameFormat specification) { 19465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Check base type 19565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (specification.getBaseType() != TYPE_UNSPECIFIED 19665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn && getBaseType() != specification.getBaseType()) { 19765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return false; 19865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 19965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 20065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Check target 20165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (specification.getTarget() != TARGET_UNSPECIFIED 20265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn && getTarget() != specification.getTarget()) { 20365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return false; 20465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 20565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 20665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Check bytes per sample 20765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (specification.getBytesPerSample() != BYTES_PER_SAMPLE_UNSPECIFIED 20865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn && getBytesPerSample() != specification.getBytesPerSample()) { 20965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return false; 21065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 21165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 21265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Check number of dimensions 21365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (specification.getDimensionCount() > 0 21465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn && getDimensionCount() != specification.getDimensionCount()) { 21565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return false; 21665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 21765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 21865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Check dimensions 21965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn for (int i = 0; i < specification.getDimensionCount(); ++i) { 22065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn int specDim = specification.getDimension(i); 22165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (specDim != SIZE_UNSPECIFIED && getDimension(i) != specDim) { 22265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return false; 22365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 22465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 22565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 22665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Check class 22765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (specification.getObjectClass() != null) { 22865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (getObjectClass() == null 22965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn || !specification.getObjectClass().isAssignableFrom(getObjectClass())) { 23065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return false; 23165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 23265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 23365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 23465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Check meta-data 23565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (specification.mMetaData != null) { 23665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn for (String specKey : specification.mMetaData.keySet()) { 23765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (mMetaData == null 23865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn || !mMetaData.containsKey(specKey) 23965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn || !mMetaData.get(specKey).equals(specification.mMetaData.get(specKey))) { 24065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return false; 24165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 24265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 24365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 24465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 24565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Passed all the tests 24665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return true; 24765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 24865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 24965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public boolean mayBeCompatibleWith(FrameFormat specification) { 25065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Check base type 25165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (specification.getBaseType() != TYPE_UNSPECIFIED 25265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn && getBaseType() != TYPE_UNSPECIFIED 25365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn && getBaseType() != specification.getBaseType()) { 25465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return false; 25565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 25665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 25765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Check target 25865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (specification.getTarget() != TARGET_UNSPECIFIED 25965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn && getTarget() != TARGET_UNSPECIFIED 26065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn && getTarget() != specification.getTarget()) { 26165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return false; 26265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 26365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 26465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Check bytes per sample 26565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (specification.getBytesPerSample() != BYTES_PER_SAMPLE_UNSPECIFIED 26665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn && getBytesPerSample() != BYTES_PER_SAMPLE_UNSPECIFIED 26765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn && getBytesPerSample() != specification.getBytesPerSample()) { 26865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return false; 26965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 27065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 27165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Check number of dimensions 27265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (specification.getDimensionCount() > 0 27365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn && getDimensionCount() > 0 27465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn && getDimensionCount() != specification.getDimensionCount()) { 27565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return false; 27665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 27765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 27865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Check dimensions 27965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn for (int i = 0; i < specification.getDimensionCount(); ++i) { 28065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn int specDim = specification.getDimension(i); 28165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (specDim != SIZE_UNSPECIFIED 28265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn && getDimension(i) != SIZE_UNSPECIFIED 28365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn && getDimension(i) != specDim) { 28465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return false; 28565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 28665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 28765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 28865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Check class 28965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (specification.getObjectClass() != null && getObjectClass() != null) { 29065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (!specification.getObjectClass().isAssignableFrom(getObjectClass())) { 29165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return false; 29265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 29365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 29465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 29565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Check meta-data 29665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (specification.mMetaData != null && mMetaData != null) { 29765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn for (String specKey : specification.mMetaData.keySet()) { 29865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (mMetaData.containsKey(specKey) 29965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn && !mMetaData.get(specKey).equals(specification.mMetaData.get(specKey))) { 30065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return false; 30165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 30265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 30365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 30465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 30565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Passed all the tests 30665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return true; 30765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 30865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 30965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public static int bytesPerSampleOf(int baseType) { 31065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Defaults based on base-type 31165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn switch (baseType) { 31265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn case TYPE_BIT: 31365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn case TYPE_BYTE: 31465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return 1; 31565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn case TYPE_INT16: 31665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return 2; 31765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn case TYPE_INT32: 31865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn case TYPE_FLOAT: 31965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn case TYPE_POINTER: 32065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return 4; 32165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn case TYPE_DOUBLE: 32265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return 8; 32365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn default: 32465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return 1; 32565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 32665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 32765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 32865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public static String dimensionsToString(int[] dimensions) { 32965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn StringBuffer buffer = new StringBuffer(); 33065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (dimensions != null) { 33165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn int n = dimensions.length; 33265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn for (int i = 0; i < n; ++i) { 33365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (dimensions[i] == SIZE_UNSPECIFIED) { 33465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn buffer.append("[]"); 33565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } else { 33665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn buffer.append("[" + String.valueOf(dimensions[i]) + "]"); 33765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 33865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 33965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 34065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return buffer.toString(); 34165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 34265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 34365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public static String baseTypeToString(int baseType) { 34465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn switch (baseType) { 34565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn case TYPE_UNSPECIFIED: return "unspecified"; 34665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn case TYPE_BIT: return "bit"; 34765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn case TYPE_BYTE: return "byte"; 34865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn case TYPE_INT16: return "int"; 34965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn case TYPE_INT32: return "int"; 35065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn case TYPE_FLOAT: return "float"; 35165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn case TYPE_DOUBLE: return "double"; 35265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn case TYPE_POINTER: return "pointer"; 35365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn case TYPE_OBJECT: return "object"; 35465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn default: return "unknown"; 35565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 35665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 35765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 35865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public static String targetToString(int target) { 35965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn switch (target) { 36065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn case TARGET_UNSPECIFIED: return "unspecified"; 36165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn case TARGET_SIMPLE: return "simple"; 36265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn case TARGET_NATIVE: return "native"; 36365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn case TARGET_GPU: return "gpu"; 36465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn case TARGET_VERTEXBUFFER: return "vbo"; 36565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn case TARGET_RS: return "renderscript"; 36665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn default: return "unknown"; 36765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 36865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 36965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 37065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public static String metaDataToString(KeyValueMap metaData) { 37165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (metaData == null) { 37265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return ""; 37365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } else { 37465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn StringBuffer buffer = new StringBuffer(); 37565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn buffer.append("{ "); 37665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn for (Entry<String, Object> entry : metaData.entrySet()) { 37765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn buffer.append(entry.getKey() + ": " + entry.getValue() + " "); 37865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 37965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn buffer.append("}"); 38065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return buffer.toString(); 38165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 38265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 38365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 38465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public static int readTargetString(String targetString) { 38565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (targetString.equalsIgnoreCase("CPU") || targetString.equalsIgnoreCase("NATIVE")) { 38665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return FrameFormat.TARGET_NATIVE; 38765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } else if (targetString.equalsIgnoreCase("GPU")) { 38865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return FrameFormat.TARGET_GPU; 38965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } else if (targetString.equalsIgnoreCase("SIMPLE")) { 39065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return FrameFormat.TARGET_SIMPLE; 39165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } else if (targetString.equalsIgnoreCase("VERTEXBUFFER")) { 39265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return FrameFormat.TARGET_VERTEXBUFFER; 39365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } else if (targetString.equalsIgnoreCase("UNSPECIFIED")) { 39465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return FrameFormat.TARGET_UNSPECIFIED; 39565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } else { 39665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn throw new RuntimeException("Unknown target type '" + targetString + "'!"); 39765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 39865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 39965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 40065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // TODO: FromString 40165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 40265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public String toString() { 40365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn int valuesPerSample = getValuesPerSample(); 40465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn String sampleCountString = valuesPerSample == 1 ? "" : String.valueOf(valuesPerSample); 40565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn String targetString = mTarget == TARGET_UNSPECIFIED ? "" : (targetToString(mTarget) + " "); 40665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn String classString = mObjectClass == null 40765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn ? "" 40865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn : (" class(" + mObjectClass.getSimpleName() + ") "); 40965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 41065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return targetString 41165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn + baseTypeToString(mBaseType) 41265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn + sampleCountString 41365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn + dimensionsToString(mDimensions) 41465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn + classString 41565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn + metaDataToString(mMetaData); 41665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 41765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 41865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn private void initDefaults() { 41965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn mBytesPerSample = bytesPerSampleOf(mBaseType); 42065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 42165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 42265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Core internal methods /////////////////////////////////////////////////////////////////////// 42365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn int calcSize(int[] dimensions) { 42465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (dimensions != null && dimensions.length > 0) { 42565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn int size = getBytesPerSample(); 42665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn for (int dim : dimensions) { 42765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn size *= dim; 42865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 42965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return size; 43065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 43165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return 0; 43265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 43365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 43465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn boolean isReplaceableBy(FrameFormat format) { 43565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return mTarget == format.mTarget 43665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn && getSize() == format.getSize() 43765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn && Arrays.equals(format.mDimensions, mDimensions); 43865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 43965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 440