152842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk/* 252842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk * Copyright (C) 2014 The Android Open Source Project 352842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk * 452842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk * Licensed under the Apache License, Version 2.0 (the "License"); 552842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk * you may not use this file except in compliance with the License. 652842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk * You may obtain a copy of the License at 752842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk * 852842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk * http://www.apache.org/licenses/LICENSE-2.0 952842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk * 1052842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk * Unless required by applicable law or agreed to in writing, software 1152842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk * distributed under the License is distributed on an "AS IS" BASIS, 1252842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1352842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk * See the License for the specific language governing permissions and 1452842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk * limitations under the License. 1552842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk */ 1652842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunkpackage android.hardware.camera2.marshal.impl; 1752842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk 1852842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunkimport android.hardware.camera2.marshal.MarshalQueryable; 1952842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunkimport android.hardware.camera2.marshal.Marshaler; 2052842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunkimport android.hardware.camera2.params.BlackLevelPattern; 2152842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunkimport android.hardware.camera2.utils.TypeReference; 2252842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk 2352842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunkimport java.nio.ByteBuffer; 2452842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk 2552842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunkimport static android.hardware.camera2.impl.CameraMetadataNative.TYPE_INT32; 2652842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunkimport static android.hardware.camera2.marshal.MarshalHelpers.SIZEOF_INT32; 2752842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk 2852842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk/** 2952842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk * Marshal {@link BlackLevelPattern} to/from {@link #TYPE_INT32} {@code x 4} 3052842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk */ 3152842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunkpublic class MarshalQueryableBlackLevelPattern implements MarshalQueryable<BlackLevelPattern> { 3252842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk private static final int SIZE = SIZEOF_INT32 * BlackLevelPattern.COUNT; 3352842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk 3452842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk private class MarshalerBlackLevelPattern extends Marshaler<BlackLevelPattern> { 3552842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk protected MarshalerBlackLevelPattern(TypeReference<BlackLevelPattern> typeReference, 3652842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk int nativeType) { 3752842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk super(MarshalQueryableBlackLevelPattern.this, typeReference, nativeType); 3852842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk } 3952842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk 4052842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk @Override 4152842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk public void marshal(BlackLevelPattern value, ByteBuffer buffer) { 4252842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk for (int i = 0; i < BlackLevelPattern.COUNT / 2; ++i) { 4352842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk for (int j = 0; j < BlackLevelPattern.COUNT / 2; ++j) { 4452842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk buffer.putInt(value.getOffsetForIndex(j, i)); 4552842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk } 4652842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk } 4752842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk } 4852842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk 4952842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk @Override 5052842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk public BlackLevelPattern unmarshal(ByteBuffer buffer) { 5152842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk int[] channelOffsets = new int[BlackLevelPattern.COUNT]; 5252842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk for (int i = 0; i < BlackLevelPattern.COUNT; ++i) { 5352842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk channelOffsets[i] = buffer.getInt(); 5452842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk } 5552842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk return new BlackLevelPattern(channelOffsets); 5652842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk } 5752842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk 5852842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk @Override 5952842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk public int getNativeSize() { 6052842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk return SIZE; 6152842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk } 6252842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk } 6352842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk 6452842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk @Override 6552842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk public Marshaler<BlackLevelPattern> createMarshaler( 6652842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk TypeReference<BlackLevelPattern> managedType, int nativeType) { 6752842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk return new MarshalerBlackLevelPattern(managedType, nativeType); 6852842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk } 6952842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk 7052842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk @Override 7152842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk public boolean isTypeMappingSupported( 7252842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk TypeReference<BlackLevelPattern> managedType, int nativeType) { 7352842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk return nativeType == TYPE_INT32 && 7452842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk (BlackLevelPattern.class.equals(managedType.getType())); 7552842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk } 7652842e7a6f0e922185db04ae8b91c776a234acf1Ruben Brunk} 77