MarshalQueryableMeteringRectangle.java revision 3c40a046cf0ea7b6af01ec93e5276eccb3234bfe
13c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin/* 23c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin * Copyright (C) 2014 The Android Open Source Project 33c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin * 43c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin * Licensed under the Apache License, Version 2.0 (the "License"); 53c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin * you may not use this file except in compliance with the License. 63c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin * You may obtain a copy of the License at 73c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin * 83c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin * http://www.apache.org/licenses/LICENSE-2.0 93c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin * 103c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin * Unless required by applicable law or agreed to in writing, software 113c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin * distributed under the License is distributed on an "AS IS" BASIS, 123c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin * See the License for the specific language governing permissions and 143c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin * limitations under the License. 153c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin */ 163c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkinpackage android.hardware.camera2.marshal.impl; 173c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin 183c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkinimport android.hardware.camera2.MeteringRectangle; 193c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkinimport android.hardware.camera2.marshal.Marshaler; 203c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkinimport android.hardware.camera2.marshal.MarshalQueryable; 213c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkinimport android.hardware.camera2.utils.TypeReference; 223c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin 233c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkinimport java.nio.ByteBuffer; 243c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin 253c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkinimport static android.hardware.camera2.impl.CameraMetadataNative.*; 263c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkinimport static android.hardware.camera2.marshal.MarshalHelpers.*; 273c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin 283c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin/** 293c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin * Marshal {@link MeteringRectangle} to/from {@link #TYPE_INT32} 303c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin */ 313c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkinpublic class MarshalQueryableMeteringRectangle implements MarshalQueryable<MeteringRectangle> { 323c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin private static final int SIZE = SIZEOF_INT32 * 5; 333c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin 343c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin /** (xmin, ymin, xmax, ymax, weight) */ 353c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin private class MarshalerMeteringRectangle extends Marshaler<MeteringRectangle> { 363c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin protected MarshalerMeteringRectangle(TypeReference<MeteringRectangle> typeReference, 373c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin int nativeType) { 383c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin super(MarshalQueryableMeteringRectangle.this, typeReference, nativeType); 393c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin } 403c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin 413c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin @Override 423c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin public void marshal(MeteringRectangle value, ByteBuffer buffer) { 433c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin int xMin = value.getX(); 443c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin int yMin = value.getY(); 453c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin int xMax = xMin + value.getWidth(); 463c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin int yMax = yMin + value.getHeight(); 473c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin int weight = value.getMeteringWeight(); 483c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin 493c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin buffer.putInt(xMin); 503c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin buffer.putInt(yMin); 513c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin buffer.putInt(xMax); 523c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin buffer.putInt(yMax); 533c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin buffer.putInt(weight); 543c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin } 553c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin 563c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin @Override 573c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin public MeteringRectangle unmarshal(ByteBuffer buffer) { 583c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin int xMin = buffer.getInt(); 593c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin int yMin = buffer.getInt(); 603c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin int xMax = buffer.getInt(); 613c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin int yMax = buffer.getInt(); 623c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin int weight = buffer.getInt(); 633c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin 643c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin int width = xMax - xMin; 653c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin int height = yMax - yMin; 663c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin 673c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin return new MeteringRectangle(xMin, yMin, width, height, weight); 683c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin } 693c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin 703c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin @Override 713c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin public int getNativeSize() { 723c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin return SIZE; 733c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin } 743c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin } 753c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin 763c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin @Override 773c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin public Marshaler<MeteringRectangle> createMarshaler( 783c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin TypeReference<MeteringRectangle> managedType, int nativeType) { 793c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin return new MarshalerMeteringRectangle(managedType, nativeType); 803c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin } 813c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin 823c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin @Override 833c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin public boolean isTypeMappingSupported( 843c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin TypeReference<MeteringRectangle> managedType, int nativeType) { 853c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin return nativeType == TYPE_INT32 && MeteringRectangle.class.equals(managedType.getType()); 863c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin } 873c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin 883c40a046cf0ea7b6af01ec93e5276eccb3234bfeIgor Murashkin} 89