17c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn/*
27c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn * Copyright (C) 2014 The Android Open Source Project
37c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn *
47c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn * Licensed under the Apache License, Version 2.0 (the "License");
57c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn * you may not use this file except in compliance with the License.
67c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn * You may obtain a copy of the License at
77c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn *
87c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn *      http://www.apache.org/licenses/LICENSE-2.0
97c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn *
107c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn * Unless required by applicable law or agreed to in writing, software
117c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn * distributed under the License is distributed on an "AS IS" BASIS,
127c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn * See the License for the specific language governing permissions and
147c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn * limitations under the License
157c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn */
167c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn
17ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunnpackage android.telecom;
187c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn
197c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunnimport android.os.Parcel;
207c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunnimport android.os.Parcelable;
217c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn
227c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn/**
237c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn * Represents the camera capabilities important to a Video Telephony provider.
24be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn * @hide
257c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn */
26b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awadpublic final class CameraCapabilities implements Parcelable {
277c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn
287c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    /**
297c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * Whether the camera supports zoom.
307c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     */
317c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    private final boolean mZoomSupported;
327c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn
337c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    /**
347c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * The maximum zoom supported by the camera.
357c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     */
367c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    private final float mMaxZoom;
377c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn
387c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    /**
395d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn     * The width of the camera video in pixels.
405d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn     */
415d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn    private final int mWidth;
425d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn
435d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn    /**
445d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn     * The height of the camera video in pixels.
455d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn     */
465d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn    private final int mHeight;
475d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn
485d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn    /**
497c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * Create a call camera capabilities instance.
507c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     *
517c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * @param zoomSupported True when camera supports zoom.
527c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * @param maxZoom Maximum zoom supported by camera.
535d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn     * @param width The width of the camera video (in pixels).
545d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn     * @param height The height of the camera video (in pixels).
557c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     */
56b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad    public CameraCapabilities(boolean zoomSupported, float maxZoom, int width, int height) {
577c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn        mZoomSupported = zoomSupported;
587c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn        mMaxZoom = maxZoom;
595d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn        mWidth = width;
605d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn        mHeight = height;
617c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    }
627c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn
637c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    /**
647c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * Responsible for creating CallCameraCapabilities objects from deserialized Parcels.
657c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     **/
66b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad    public static final Parcelable.Creator<CameraCapabilities> CREATOR =
67b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad            new Parcelable.Creator<CameraCapabilities> () {
687c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn                /**
697c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn                 * Creates a CallCameraCapabilities instances from a parcel.
707c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn                 *
717c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn                 * @param source The parcel.
727c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn                 * @return The CallCameraCapabilities.
737c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn                 */
747c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn                @Override
75b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad                public CameraCapabilities createFromParcel(Parcel source) {
767c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn                    boolean supportsZoom = source.readByte() != 0;
777c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn                    float maxZoom = source.readFloat();
785d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn                    int width = source.readInt();
795d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn                    int height = source.readInt();
807c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn
81b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad                    return new CameraCapabilities(supportsZoom, maxZoom, width, height);
827c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn                }
837c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn
847c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn                @Override
85b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad                public CameraCapabilities[] newArray(int size) {
86b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad                    return new CameraCapabilities[size];
877c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn                }
887c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn            };
897c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn
907c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    /**
917c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * Describe the kinds of special objects contained in this Parcelable's
927c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * marshalled representation.
937c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     *
947c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * @return a bitmask indicating the set of special object types marshalled
957c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * by the Parcelable.
967c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     */
977c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    @Override
987c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    public int describeContents() {
997c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn        return 0;
1007c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    }
1017c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn
1027c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    /**
1037c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * Flatten this object in to a Parcel.
1047c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     *
1057c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * @param dest  The Parcel in which the object should be written.
1067c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * @param flags Additional flags about how the object should be written.
1077c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     *              May be 0 or {@link #PARCELABLE_WRITE_RETURN_VALUE}.
1087c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     */
1097c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    @Override
1107c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    public void writeToParcel(Parcel dest, int flags) {
1117c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn        dest.writeByte((byte) (isZoomSupported() ? 1 : 0));
1127c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn        dest.writeFloat(getMaxZoom());
1135d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn        dest.writeInt(getWidth());
1145d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn        dest.writeInt(getHeight());
1157c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    }
1167c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn
1177c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    /**
1187c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * Whether the camera supports zoom.
1197c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     */
1207c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    public boolean isZoomSupported() {
1217c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn        return mZoomSupported;
1227c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    }
1237c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn
1247c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    /**
1257c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * The maximum zoom supported by the camera.
1267c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     */
1277c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    public float getMaxZoom() {
1287c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn        return mMaxZoom;
1297c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    }
1305d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn
1315d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn    /**
1325d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn     * The width of the camera video in pixels.
1335d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn     */
1345d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn    public int getWidth() {
1355d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn        return mWidth;
1365d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn    }
1375d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn
1385d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn    /**
1395d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn     * The height of the camera video in pixels.
1405d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn     */
1415d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn    public int getHeight() {
1425d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn        return mHeight;
1435d231e134353a7cb07ecc7d6dd1a4ffdcf194bcaTyler Gunn    }
1447c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn}
145