130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni/* 230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * Copyright (C) 2011 The Android Open Source Project 330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * 430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * Licensed under the Apache License, Version 2.0 (the "License"); 530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * you may not use this file except in compliance with the License. 630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * You may obtain a copy of the License at 730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * 830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * http://www.apache.org/licenses/LICENSE-2.0 930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * 1030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * Unless required by applicable law or agreed to in writing, software 1130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * distributed under the License is distributed on an "AS IS" BASIS, 1230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * See the License for the specific language governing permissions and 1430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * limitations under the License. 1530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni */ 1630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 1730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 1830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceronipackage android.filterfw.core; 1930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 2030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroniimport android.filterfw.core.KeyValueMap; 2130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroniimport android.filterfw.core.MutableFrameFormat; 2230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 2330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroniimport java.util.Arrays; 2421d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Rennimport java.util.Map.Entry; 2530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 26a3bfbe5389c6146abe318a7add3fa688d69bc01bEino-Ville Talvala/** 27a3bfbe5389c6146abe318a7add3fa688d69bc01bEino-Ville Talvala * @hide 28a3bfbe5389c6146abe318a7add3fa688d69bc01bEino-Ville Talvala */ 2930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceronipublic class FrameFormat { 3030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 3130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public static final int TYPE_UNSPECIFIED = 0; 3230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public static final int TYPE_BIT = 1; 3330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public static final int TYPE_BYTE = 2; 3430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public static final int TYPE_INT16 = 3; 3530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public static final int TYPE_INT32 = 4; 3630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public static final int TYPE_FLOAT = 5; 3730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public static final int TYPE_DOUBLE = 6; 3830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public static final int TYPE_POINTER = 7; 3930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public static final int TYPE_OBJECT = 8; 4030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 4130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public static final int TARGET_UNSPECIFIED = 0; 42bf4aaebc555cfb1e49ee411e3477203749fe6a11Marius Renn public static final int TARGET_SIMPLE = 1; 4330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public static final int TARGET_NATIVE = 2; 4430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public static final int TARGET_GPU = 3; 4530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public static final int TARGET_VERTEXBUFFER = 4; 4630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public static final int TARGET_RS = 5; 4730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 4830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public static final int SIZE_UNSPECIFIED = 0; 4930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 5030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni // TODO: When convenience formats are used, consider changing this to 0 and have the convenience 5130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni // intializers use a proper BPS. 5230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public static final int BYTES_PER_SAMPLE_UNSPECIFIED = 1; 5330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 5430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni protected static final int SIZE_UNKNOWN = -1; 5530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 5630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni protected int mBaseType = TYPE_UNSPECIFIED; 5730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni protected int mBytesPerSample = 1; 5830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni protected int mSize = SIZE_UNKNOWN; 5930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni protected int mTarget = TARGET_UNSPECIFIED; 6030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni protected int[] mDimensions; 6130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni protected KeyValueMap mMetaData; 6230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni protected Class mObjectClass; 6330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 6430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni protected FrameFormat() { 6530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 6630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 6730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public FrameFormat(int baseType, int target) { 6830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni mBaseType = baseType; 6930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni mTarget = target; 7030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni initDefaults(); 7130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 7230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 7321d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn public static FrameFormat unspecified() { 7421d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn return new FrameFormat(TYPE_UNSPECIFIED, TARGET_UNSPECIFIED); 7521d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn } 7621d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn 7730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public int getBaseType() { 7830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return mBaseType; 7930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 8030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 8130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public boolean isBinaryDataType() { 8230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return mBaseType >= TYPE_BIT && mBaseType <= TYPE_DOUBLE; 8330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 8430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 8530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public int getBytesPerSample() { 8630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return mBytesPerSample; 8730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 8830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 8921d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn public int getValuesPerSample() { 9021d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn return mBytesPerSample / bytesPerSampleOf(mBaseType); 9121d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn } 9221d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn 9330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public int getTarget() { 9430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return mTarget; 9530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 9630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 9730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public int[] getDimensions() { 9830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return mDimensions; 9930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 10030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 10130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public int getDimension(int i) { 10230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return mDimensions[i]; 10330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 10430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 10530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public int getDimensionCount() { 10630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return mDimensions == null ? 0 : mDimensions.length; 10730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 10830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 10930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public boolean hasMetaKey(String key) { 110c0017fd82acec5d0427306ea5f536c3d78854f95Marius Renn return mMetaData != null ? mMetaData.containsKey(key) : false; 11130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 11230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 11330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public boolean hasMetaKey(String key, Class expectedClass) { 114c0017fd82acec5d0427306ea5f536c3d78854f95Marius Renn if (mMetaData != null && mMetaData.containsKey(key)) { 115c0017fd82acec5d0427306ea5f536c3d78854f95Marius Renn if (!expectedClass.isAssignableFrom(mMetaData.get(key).getClass())) { 11630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni throw new RuntimeException( 11730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni "FrameFormat meta-key '" + key + "' is of type " + 118c0017fd82acec5d0427306ea5f536c3d78854f95Marius Renn mMetaData.get(key).getClass() + " but expected to be of type " + 11930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni expectedClass + "!"); 12030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 12130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return true; 12230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 12330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return false; 12430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 12530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 12630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public Object getMetaValue(String key) { 127c0017fd82acec5d0427306ea5f536c3d78854f95Marius Renn return mMetaData != null ? mMetaData.get(key) : null; 12830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 12930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 13030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public int getNumberOfDimensions() { 13130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return mDimensions != null ? mDimensions.length : 0; 13230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 13330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 13430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public int getLength() { 13530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return (mDimensions != null && mDimensions.length >= 1) ? mDimensions[0] : -1; 13630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 13730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 13830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public int getWidth() { 13930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return getLength(); 14030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 14130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 14230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public int getHeight() { 14330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return (mDimensions != null && mDimensions.length >= 2) ? mDimensions[1] : -1; 14430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 14530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 14630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public int getDepth() { 14730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return (mDimensions != null && mDimensions.length >= 3) ? mDimensions[2] : -1; 14830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 14930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 15030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public int getSize() { 15130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni if (mSize == SIZE_UNKNOWN) mSize = calcSize(mDimensions); 15230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return mSize; 15330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 15430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 15530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public Class getObjectClass() { 15630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return mObjectClass; 15730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 15830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 15930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public MutableFrameFormat mutableCopy() { 16030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni MutableFrameFormat result = new MutableFrameFormat(); 16130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni result.setBaseType(getBaseType()); 16230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni result.setTarget(getTarget()); 16330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni result.setBytesPerSample(getBytesPerSample()); 16430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni result.setDimensions(getDimensions()); 16530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni result.setObjectClass(getObjectClass()); 16621d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn result.mMetaData = mMetaData == null ? null : (KeyValueMap)mMetaData.clone(); 16730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return result; 16830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 16930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 17033d107bf315c9cc01a02a7a4a2c10a01f62e8c85Wei Hua @Override 17130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public boolean equals(Object object) { 17230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni if (this == object) { 17330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return true; 17430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 17530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 17630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni if (!(object instanceof FrameFormat)) { 17730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return false; 17830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 17930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 18030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni FrameFormat format = (FrameFormat)object; 18130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return format.mBaseType == mBaseType && 18230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni format.mTarget == mTarget && 18330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni format.mBytesPerSample == mBytesPerSample && 18430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni Arrays.equals(format.mDimensions, mDimensions) && 18530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni format.mMetaData.equals(mMetaData); 18630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 18730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 18833d107bf315c9cc01a02a7a4a2c10a01f62e8c85Wei Hua @Override 18930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public int hashCode() { 19030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return 4211 ^ mBaseType ^ mBytesPerSample ^ getSize(); 19130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 19230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 19330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public boolean isCompatibleWith(FrameFormat specification) { 19430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni // Check base type 19530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni if (specification.getBaseType() != TYPE_UNSPECIFIED 19630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni && getBaseType() != specification.getBaseType()) { 19730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return false; 19830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 19930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 20030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni // Check target 20130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni if (specification.getTarget() != TARGET_UNSPECIFIED 20230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni && getTarget() != specification.getTarget()) { 20330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return false; 20430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 20530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 20630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni // Check bytes per sample 20730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni if (specification.getBytesPerSample() != BYTES_PER_SAMPLE_UNSPECIFIED 20830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni && getBytesPerSample() != specification.getBytesPerSample()) { 20930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return false; 21030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 21130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 21230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni // Check number of dimensions 21330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni if (specification.getDimensionCount() > 0 21430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni && getDimensionCount() != specification.getDimensionCount()) { 21530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return false; 21630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 21730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 21830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni // Check dimensions 219a718cb84695939684101ceb70b05b4da1f96c63bEino-Ville Talvala for (int i = 0; i < specification.getDimensionCount(); ++i) { 22030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni int specDim = specification.getDimension(i); 22130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni if (specDim != SIZE_UNSPECIFIED && getDimension(i) != specDim) { 22230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return false; 22330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 22430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 22530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 22621d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn // Check class 22721d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn if (specification.getObjectClass() != null) { 22821d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn if (getObjectClass() == null 22921d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn || !specification.getObjectClass().isAssignableFrom(getObjectClass())) { 23021d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn return false; 23121d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn } 23221d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn } 23321d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn 234b64fe6f6bbad306e4b10fafefcbdd981ec82a5baMarius Renn // Check meta-data 235a4e8683367b9d4cfc4f8a6cbf3875fe2e35009f0Rodrigo Carceroni if (specification.mMetaData != null) { 236a4e8683367b9d4cfc4f8a6cbf3875fe2e35009f0Rodrigo Carceroni for (String specKey : specification.mMetaData.keySet()) { 237a4e8683367b9d4cfc4f8a6cbf3875fe2e35009f0Rodrigo Carceroni if (mMetaData == null 238c0017fd82acec5d0427306ea5f536c3d78854f95Marius Renn || !mMetaData.containsKey(specKey) 239c0017fd82acec5d0427306ea5f536c3d78854f95Marius Renn || !mMetaData.get(specKey).equals(specification.mMetaData.get(specKey))) { 240a4e8683367b9d4cfc4f8a6cbf3875fe2e35009f0Rodrigo Carceroni return false; 241a4e8683367b9d4cfc4f8a6cbf3875fe2e35009f0Rodrigo Carceroni } 242b64fe6f6bbad306e4b10fafefcbdd981ec82a5baMarius Renn } 243b64fe6f6bbad306e4b10fafefcbdd981ec82a5baMarius Renn } 244b64fe6f6bbad306e4b10fafefcbdd981ec82a5baMarius Renn 24530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni // Passed all the tests 24630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return true; 24730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 24830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 24921d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn public boolean mayBeCompatibleWith(FrameFormat specification) { 250489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn // Check base type 251489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn if (specification.getBaseType() != TYPE_UNSPECIFIED 252489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn && getBaseType() != TYPE_UNSPECIFIED 253489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn && getBaseType() != specification.getBaseType()) { 254489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn return false; 255489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn } 256489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn 257489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn // Check target 258489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn if (specification.getTarget() != TARGET_UNSPECIFIED 259489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn && getTarget() != TARGET_UNSPECIFIED 260489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn && getTarget() != specification.getTarget()) { 261489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn return false; 262489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn } 263489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn 264489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn // Check bytes per sample 265489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn if (specification.getBytesPerSample() != BYTES_PER_SAMPLE_UNSPECIFIED 266489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn && getBytesPerSample() != BYTES_PER_SAMPLE_UNSPECIFIED 267489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn && getBytesPerSample() != specification.getBytesPerSample()) { 268489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn return false; 269489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn } 270489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn 271489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn // Check number of dimensions 272489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn if (specification.getDimensionCount() > 0 273489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn && getDimensionCount() > 0 274489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn && getDimensionCount() != specification.getDimensionCount()) { 275489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn return false; 276489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn } 277489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn 278489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn // Check dimensions 279489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn for (int i = 0; i < specification.getDimensionCount(); ++i) { 280489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn int specDim = specification.getDimension(i); 281489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn if (specDim != SIZE_UNSPECIFIED 282489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn && getDimension(i) != SIZE_UNSPECIFIED 283489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn && getDimension(i) != specDim) { 284489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn return false; 285489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn } 286489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn } 287489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn 288489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn // Check class 289489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn if (specification.getObjectClass() != null && getObjectClass() != null) { 290489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn if (!specification.getObjectClass().isAssignableFrom(getObjectClass())) { 291489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn return false; 292489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn } 293489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn } 294489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn 295489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn // Check meta-data 296489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn if (specification.mMetaData != null && mMetaData != null) { 297489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn for (String specKey : specification.mMetaData.keySet()) { 298489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn if (mMetaData.containsKey(specKey) 299489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn && !mMetaData.get(specKey).equals(specification.mMetaData.get(specKey))) { 300489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn return false; 301489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn } 302489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn } 303489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn } 304489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn 305489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn // Passed all the tests 306489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn return true; 30721d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn } 30821d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn 30921d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn public static int bytesPerSampleOf(int baseType) { 31021d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn // Defaults based on base-type 31121d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn switch (baseType) { 31221d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn case TYPE_BIT: 31321d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn case TYPE_BYTE: 31421d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn return 1; 31521d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn case TYPE_INT16: 31621d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn return 2; 31721d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn case TYPE_INT32: 31821d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn case TYPE_FLOAT: 31921d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn case TYPE_POINTER: 32021d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn return 4; 32121d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn case TYPE_DOUBLE: 32221d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn return 8; 32321d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn default: 32421d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn return 1; 32521d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn } 32621d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn } 32721d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn 32821d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn public static String dimensionsToString(int[] dimensions) { 32921d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn StringBuffer buffer = new StringBuffer(); 33030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni if (dimensions != null) { 33130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni int n = dimensions.length; 33221d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn for (int i = 0; i < n; ++i) { 33321d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn if (dimensions[i] == SIZE_UNSPECIFIED) { 33421d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn buffer.append("[]"); 33521d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn } else { 33621d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn buffer.append("[" + String.valueOf(dimensions[i]) + "]"); 33721d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn } 33830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 33930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 34030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return buffer.toString(); 34130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 34230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 34321d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn public static String baseTypeToString(int baseType) { 34430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni switch (baseType) { 34530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni case TYPE_UNSPECIFIED: return "unspecified"; 34630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni case TYPE_BIT: return "bit"; 34730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni case TYPE_BYTE: return "byte"; 34821d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn case TYPE_INT16: return "int"; 34921d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn case TYPE_INT32: return "int"; 35030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni case TYPE_FLOAT: return "float"; 35130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni case TYPE_DOUBLE: return "double"; 35230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni case TYPE_POINTER: return "pointer"; 35330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni case TYPE_OBJECT: return "object"; 35430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni default: return "unknown"; 35530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 35630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 35730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 35821d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn public static String targetToString(int target) { 35930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni switch (target) { 36030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni case TARGET_UNSPECIFIED: return "unspecified"; 361bf4aaebc555cfb1e49ee411e3477203749fe6a11Marius Renn case TARGET_SIMPLE: return "simple"; 36221d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn case TARGET_NATIVE: return "native"; 36321d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn case TARGET_GPU: return "gpu"; 36421d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn case TARGET_VERTEXBUFFER: return "vbo"; 36521d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn case TARGET_RS: return "renderscript"; 36630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni default: return "unknown"; 36730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 36830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 36930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 37021d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn public static String metaDataToString(KeyValueMap metaData) { 37121d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn if (metaData == null) { 37221d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn return ""; 37321d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn } else { 37421d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn StringBuffer buffer = new StringBuffer(); 37521d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn buffer.append("{ "); 37621d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn for (Entry<String, Object> entry : metaData.entrySet()) { 37721d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn buffer.append(entry.getKey() + ": " + entry.getValue() + " "); 37821d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn } 37921d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn buffer.append("}"); 38021d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn return buffer.toString(); 38121d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn } 38221d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn } 38321d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn 38421d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn public static int readTargetString(String targetString) { 38521d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn if (targetString.equalsIgnoreCase("CPU") || targetString.equalsIgnoreCase("NATIVE")) { 38621d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn return FrameFormat.TARGET_NATIVE; 38721d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn } else if (targetString.equalsIgnoreCase("GPU")) { 38821d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn return FrameFormat.TARGET_GPU; 389bf4aaebc555cfb1e49ee411e3477203749fe6a11Marius Renn } else if (targetString.equalsIgnoreCase("SIMPLE")) { 390bf4aaebc555cfb1e49ee411e3477203749fe6a11Marius Renn return FrameFormat.TARGET_SIMPLE; 39121d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn } else if (targetString.equalsIgnoreCase("VERTEXBUFFER")) { 39221d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn return FrameFormat.TARGET_VERTEXBUFFER; 39321d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn } else if (targetString.equalsIgnoreCase("UNSPECIFIED")) { 39421d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn return FrameFormat.TARGET_UNSPECIFIED; 39521d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn } else { 39621d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn throw new RuntimeException("Unknown target type '" + targetString + "'!"); 39721d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn } 39821d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn } 39921d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn 40021d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn // TODO: FromString 40121d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn 40230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public String toString() { 40321d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn int valuesPerSample = getValuesPerSample(); 40421d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn String sampleCountString = valuesPerSample == 1 ? "" : String.valueOf(valuesPerSample); 40521d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn String targetString = mTarget == TARGET_UNSPECIFIED ? "" : (targetToString(mTarget) + " "); 406489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn String classString = mObjectClass == null 407489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn ? "" 408f5ae8eafa7605c6593f62f873b62cb64a3254db3Marius Renn : (" class(" + mObjectClass.getSimpleName() + ") "); 409489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn 41021d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn return targetString 41121d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn + baseTypeToString(mBaseType) 41221d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn + sampleCountString 41321d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn + dimensionsToString(mDimensions) 414489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn + classString 41521d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn + metaDataToString(mMetaData); 41630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 41730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 41830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni private void initDefaults() { 41921d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn mBytesPerSample = bytesPerSampleOf(mBaseType); 42030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 42121d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn 42221d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn // Core internal methods /////////////////////////////////////////////////////////////////////// 42330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni int calcSize(int[] dimensions) { 42430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni if (dimensions != null && dimensions.length > 0) { 42530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni int size = getBytesPerSample(); 42630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni for (int dim : dimensions) { 42730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni size *= dim; 42830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 42930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return size; 43030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 43130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return 0; 43230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 43330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 43430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni boolean isReplaceableBy(FrameFormat format) { 435489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn return mTarget == format.mTarget 436489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn && getSize() == format.getSize() 437489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn && Arrays.equals(format.mDimensions, mDimensions); 43830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 43930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni} 440