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