112da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh/*
212da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh * Copyright (C) 2014 The Android Open Source Project
312da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh *
412da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh * Licensed under the Apache License, Version 2.0 (the "License");
512da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh * you may not use this file except in compliance with the License.
612da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh * You may obtain a copy of the License at
712da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh *
812da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh *      http://www.apache.org/licenses/LICENSE-2.0
912da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh *
1012da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh * Unless required by applicable law or agreed to in writing, software
1112da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh * distributed under the License is distributed on an "AS IS" BASIS,
1212da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1312da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh * See the License for the specific language governing permissions and
1412da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh * limitations under the License.
1512da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh */
1612da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yehpackage android.hardware.camera2.marshal.impl;
1712da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh
1812da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yehimport android.hardware.camera2.marshal.Marshaler;
1912da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yehimport android.hardware.camera2.marshal.MarshalQueryable;
2012da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yehimport android.hardware.camera2.params.HighSpeedVideoConfiguration;
2112da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yehimport android.hardware.camera2.utils.TypeReference;
2212da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh
2312da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yehimport static android.hardware.camera2.impl.CameraMetadataNative.*;
2412da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yehimport static android.hardware.camera2.marshal.MarshalHelpers.*;
2512da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh
2612da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yehimport java.nio.ByteBuffer;
2712da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh
2812da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh/**
2912da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh * Marshaler for {@code android.control.availableHighSpeedVideoConfigurations} custom class
3012da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh * {@link HighSpeedVideoConfiguration}
3112da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh *
3212da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh * <p>Data is stored as {@code (width, height, fpsMin, fpsMax)} tuples (int32).</p>
3312da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh */
3412da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yehpublic class MarshalQueryableHighSpeedVideoConfiguration
3512da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh        implements MarshalQueryable<HighSpeedVideoConfiguration> {
36b1300e39c7974937d563b3ec62f5246248a157b3Zhijun He    private static final int SIZE = SIZEOF_INT32 * 5;
3712da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh
3812da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh    private class MarshalerHighSpeedVideoConfiguration
3912da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh            extends Marshaler<HighSpeedVideoConfiguration> {
4012da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh        protected MarshalerHighSpeedVideoConfiguration(
4112da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh                TypeReference<HighSpeedVideoConfiguration> typeReference,
4212da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh                int nativeType) {
4312da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh            super(MarshalQueryableHighSpeedVideoConfiguration.this, typeReference, nativeType);
4412da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh        }
4512da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh
4612da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh        @Override
4712da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh        public void marshal(HighSpeedVideoConfiguration value, ByteBuffer buffer) {
4812da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh            buffer.putInt(value.getWidth());
4912da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh            buffer.putInt(value.getHeight());
5012da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh            buffer.putInt(value.getFpsMin());
5112da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh            buffer.putInt(value.getFpsMax());
52b1300e39c7974937d563b3ec62f5246248a157b3Zhijun He            buffer.putInt(value.getBatchSizeMax());
5312da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh        }
5412da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh
5512da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh        @Override
5612da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh        public HighSpeedVideoConfiguration unmarshal(ByteBuffer buffer) {
5712da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh            int width = buffer.getInt();
5812da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh            int height = buffer.getInt();
5912da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh            int fpsMin = buffer.getInt();
6012da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh            int fpsMax = buffer.getInt();
61b1300e39c7974937d563b3ec62f5246248a157b3Zhijun He            int batchSizeMax = buffer.getInt();
6212da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh
63b1300e39c7974937d563b3ec62f5246248a157b3Zhijun He            return new HighSpeedVideoConfiguration(width, height, fpsMin, fpsMax, batchSizeMax);
6412da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh        }
6512da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh
6612da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh        @Override
6712da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh        public int getNativeSize() {
6812da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh            return SIZE;
6912da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh        }
7012da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh
7112da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh    }
7212da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh
7312da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh    @Override
7412da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh    public Marshaler<HighSpeedVideoConfiguration> createMarshaler(
7512da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh            TypeReference<HighSpeedVideoConfiguration> managedType, int nativeType) {
7612da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh        return new MarshalerHighSpeedVideoConfiguration(managedType, nativeType);
7712da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh    }
7812da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh
7912da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh    @Override
8012da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh    public boolean isTypeMappingSupported(TypeReference<HighSpeedVideoConfiguration> managedType,
8112da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh            int nativeType) {
8212da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh        return nativeType == TYPE_INT32 &&
8312da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh                managedType.getType().equals(HighSpeedVideoConfiguration.class);
8412da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh    }
8512da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh}
86