13710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin/* 23710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * Copyright (C) 2013 The Android Open Source Project 33710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * 43710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * Licensed under the Apache License, Version 2.0 (the "License"); 53710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * you may not use this file except in compliance with the License. 63710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * You may obtain a copy of the License at 73710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * 83710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * http://www.apache.org/licenses/LICENSE-2.0 93710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * 103710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * Unless required by applicable law or agreed to in writing, software 113710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * distributed under the License is distributed on an "AS IS" BASIS, 123710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * See the License for the specific language governing permissions and 143710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * limitations under the License. 153710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin */ 163710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin 172f1a2e423e0fbb64467d6fcfa4e82c6384f31210Eino-Ville Talvalapackage android.hardware.camera2.impl; 183710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin 193710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkinimport java.nio.ByteBuffer; 203710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin 213710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkinpublic interface MetadataMarshalClass<T> { 223710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin 233710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin /** 243710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * Marshal the specified object instance (value) into a byte buffer. 253710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * 263710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * @param value the value of type T that we wish to write into the byte buffer 273710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * @param buffer the byte buffer into which the marshalled object will be written 283710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * @param nativeType the native type, e.g. 2970c2207c34cf0e6b3b383b1b1500ff5385aa51a6Eino-Ville Talvala * {@link android.hardware.camera2.impl.CameraMetadataNative#TYPE_BYTE TYPE_BYTE}. 303710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * Guaranteed to be one for which isNativeTypeSupported returns true. 313710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * @param sizeOnly if this is true, don't write to the byte buffer. calculate the size only. 323710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * @return the size that needs to be written to the byte buffer 333710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin */ 343710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin int marshal(T value, ByteBuffer buffer, int nativeType, boolean sizeOnly); 353710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin 363710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin /** 373710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * Unmarshal a new object instance from the byte buffer. 383710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * @param buffer the byte buffer, from which we will read the object 393710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * @param nativeType the native type, e.g. 4070c2207c34cf0e6b3b383b1b1500ff5385aa51a6Eino-Ville Talvala * {@link android.hardware.camera2.impl.CameraMetadataNative#TYPE_BYTE TYPE_BYTE}. 413710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * Guaranteed to be one for which isNativeTypeSupported returns true. 423710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * @return a new instance of type T read from the byte buffer 433710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin */ 443710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin T unmarshal(ByteBuffer buffer, int nativeType); 453710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin 463710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin Class<T> getMarshalingClass(); 473710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin 483710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin /** 493710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * Determines whether or not this marshaller supports this native type. Most marshallers 503710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * will are likely to only support one type. 513710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * 523710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * @param nativeType the native type, e.g. 5370c2207c34cf0e6b3b383b1b1500ff5385aa51a6Eino-Ville Talvala * {@link android.hardware.camera2.impl.CameraMetadataNative#TYPE_BYTE TYPE_BYTE} 543710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * @return true if it supports, false otherwise 553710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin */ 563710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin boolean isNativeTypeSupported(int nativeType); 573710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin 583710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin public static int NATIVE_SIZE_DYNAMIC = -1; 593710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin 603710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin /** 613710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * How many bytes T will take up if marshalled to/from nativeType 623710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * @param nativeType the native type, e.g. 6370c2207c34cf0e6b3b383b1b1500ff5385aa51a6Eino-Ville Talvala * {@link android.hardware.camera2.impl.CameraMetadataNative#TYPE_BYTE TYPE_BYTE} 643710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin * @return a size in bytes, or NATIVE_SIZE_DYNAMIC if the size is dynamic 653710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin */ 663710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin int getNativeSize(int nativeType); 673710db80d4b9e573d775790e4c9a2ab6e062201eIgor Murashkin} 68