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 attributes of video calls.
2427d1e257f3cba2d5954e5562db69035df9ecf290Tyler Gunn *
2527d1e257f3cba2d5954e5562db69035df9ecf290Tyler Gunn * {@hide}
267c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn */
27b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awadpublic class VideoProfile implements Parcelable {
287c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    /**
297c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * "High" video quality.
307c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     */
317c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    public static final int QUALITY_HIGH = 1;
327c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn
337c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    /**
347c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * "Medium" video quality.
357c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     */
367c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    public static final int QUALITY_MEDIUM = 2;
377c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn
387c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    /**
397c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * "Low" video quality.
407c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     */
417c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    public static final int QUALITY_LOW = 3;
427c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn
437c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    /**
447c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * Use default video quality.
457c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     */
467c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    public static final int QUALITY_DEFAULT = 4;
477c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn
487c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    private final int mVideoState;
497c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn
507c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    private final int mQuality;
517c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn
527c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    /**
53b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad     * Creates an instance of the VideoProfile
547c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     *
557c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * @param videoState The video state.
56055e5a227bf9924fb8278e14ffc08a4054ba8f95Andrew Lee     */
57b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad    public VideoProfile(int videoState) {
58055e5a227bf9924fb8278e14ffc08a4054ba8f95Andrew Lee        this(videoState, QUALITY_DEFAULT);
59055e5a227bf9924fb8278e14ffc08a4054ba8f95Andrew Lee    }
60055e5a227bf9924fb8278e14ffc08a4054ba8f95Andrew Lee
61055e5a227bf9924fb8278e14ffc08a4054ba8f95Andrew Lee    /**
62b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad     * Creates an instance of the VideoProfile
63055e5a227bf9924fb8278e14ffc08a4054ba8f95Andrew Lee     *
64055e5a227bf9924fb8278e14ffc08a4054ba8f95Andrew Lee     * @param videoState The video state.
657c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * @param quality The video quality.
667c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     */
67b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad    public VideoProfile(int videoState, int quality) {
687c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn        mVideoState = videoState;
697c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn        mQuality = quality;
707c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    }
717c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn
727c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    /**
7348332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee     * The video state of the call.
74b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad     * Valid values: {@link VideoProfile.VideoState#AUDIO_ONLY},
75b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad     * {@link VideoProfile.VideoState#BIDIRECTIONAL},
76b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad     * {@link VideoProfile.VideoState#TX_ENABLED},
77b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad     * {@link VideoProfile.VideoState#RX_ENABLED},
78b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad     * {@link VideoProfile.VideoState#PAUSED}.
797c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     */
807c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    public int getVideoState() {
817c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn        return mVideoState;
827c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    }
837c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn
847c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    /**
857c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * The desired video quality for the call.
86b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad     * Valid values: {@link VideoProfile#QUALITY_HIGH}, {@link VideoProfile#QUALITY_MEDIUM},
87b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad     * {@link VideoProfile#QUALITY_LOW}, {@link VideoProfile#QUALITY_DEFAULT}.
887c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     */
897c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    public int getQuality() {
907c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn        return mQuality;
917c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    }
927c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn
937c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    /**
94b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad     * Responsible for creating VideoProfile objects from deserialized Parcels.
957c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     **/
96b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad    public static final Parcelable.Creator<VideoProfile> CREATOR =
97b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad            new Parcelable.Creator<VideoProfile> () {
987c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn                /**
997c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn                 * Creates a MediaProfile instances from a parcel.
1007c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn                 *
1017c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn                 * @param source The parcel.
1027c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn                 * @return The MediaProfile.
1037c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn                 */
1047c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn                @Override
105b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad                public VideoProfile createFromParcel(Parcel source) {
1067c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn                    int state = source.readInt();
1077c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn                    int quality = source.readInt();
1087c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn
109b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad                    ClassLoader classLoader = VideoProfile.class.getClassLoader();
110b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad                    return new VideoProfile(state, quality);
1117c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn                }
1127c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn
1137c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn                @Override
114b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad                public VideoProfile[] newArray(int size) {
115b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad                    return new VideoProfile[size];
1167c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn                }
1177c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn            };
1187c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn
1197c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    /**
1207c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * Describe the kinds of special objects contained in this Parcelable's
1217c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * marshalled representation.
1227c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     *
1237c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * @return a bitmask indicating the set of special object types marshalled
1247c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * by the Parcelable.
1257c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     */
1267c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    @Override
1277c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    public int describeContents() {
1287c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn        return 0;
1297c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    }
1307c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn
1317c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    /**
1327c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * Flatten this object in to a Parcel.
1337c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     *
1347c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * @param dest  The Parcel in which the object should be written.
1357c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     * @param flags Additional flags about how the object should be written.
1367c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     *              May be 0 or {@link #PARCELABLE_WRITE_RETURN_VALUE}.
1377c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn     */
1387c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    @Override
1397c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    public void writeToParcel(Parcel dest, int flags) {
1407c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn        dest.writeInt(mVideoState);
1417c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn        dest.writeInt(mQuality);
1427c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn    }
14348332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee
14448332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee    /**
14548332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee    * The video state of the call, stored as a bit-field describing whether video transmission and
14648332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee    * receipt it enabled, as well as whether the video is currently muted.
14748332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee    */
14848332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee    public static class VideoState {
14948332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee        /**
15048332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         * Call is currently in an audio-only mode with no video transmission or receipt.
15148332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         */
15248332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee        public static final int AUDIO_ONLY = 0x0;
15348332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee
15448332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee        /**
15548332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         * Video transmission is enabled.
15648332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         */
15748332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee        public static final int TX_ENABLED = 0x1;
15848332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee
15948332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee        /**
16048332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         * Video reception is enabled.
16148332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         */
16248332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee        public static final int RX_ENABLED = 0x2;
16348332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee
16448332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee        /**
16548332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         * Video signal is bi-directional.
16648332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         */
16748332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee        public static final int BIDIRECTIONAL = TX_ENABLED | RX_ENABLED;
16848332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee
16948332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee        /**
17048332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         * Video is paused.
17148332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         */
17248332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee        public static final int PAUSED = 0x4;
17348332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee
17448332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee        /**
17548332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         * Whether the video state is audio only.
17648332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         * @param videoState The video state.
17748332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         * @return Returns true if the video state is audio only.
17848332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         */
17948332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee        public static boolean isAudioOnly(int videoState) {
18048332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee            return !hasState(videoState, TX_ENABLED) && !hasState(videoState, RX_ENABLED);
18148332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee        }
18248332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee
18348332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee        /**
18448332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         * Whether the video transmission is enabled.
18548332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         * @param videoState The video state.
18648332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         * @return Returns true if the video transmission is enabled.
18748332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         */
18848332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee        public static boolean isTransmissionEnabled(int videoState) {
18948332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee            return hasState(videoState, TX_ENABLED);
19048332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee        }
19148332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee
19248332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee        /**
19348332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         * Whether the video reception is enabled.
19448332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         * @param videoState The video state.
19548332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         * @return Returns true if the video transmission is enabled.
19648332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         */
19748332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee        public static boolean isReceptionEnabled(int videoState) {
19848332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee            return hasState(videoState, RX_ENABLED);
19948332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee        }
20048332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee
20148332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee        /**
20248332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         * Whether the video signal is bi-directional.
20348332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         * @param videoState
20448332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         * @return Returns true if the video signal is bi-directional.
20548332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         */
20648332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee        public static boolean isBidirectional(int videoState) {
20748332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee            return hasState(videoState, BIDIRECTIONAL);
20848332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee        }
20948332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee
21048332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee        /**
21148332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         * Whether the video is paused.
21248332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         * @param videoState The video state.
21348332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         * @return Returns true if the video is paused.
21448332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         */
21548332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee        public static boolean isPaused(int videoState) {
21648332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee            return hasState(videoState, PAUSED);
21748332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee        }
21848332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee
21948332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee        /**
22048332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         * Determines if a specified state is set in a videoState bit-mask.
22148332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         *
22248332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         * @param videoState The video state bit-mask.
22348332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         * @param state The state to check.
22448332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         * @return {@code True} if the state is set.
22548332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         * {@hide}
22648332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee         */
22748332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee        private static boolean hasState(int videoState, int state) {
22848332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee            return (videoState & state) == state;
22948332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee        }
23048332d622b138aeb3a198efe29bb3d4705411f62Andrew Lee    }
2317c668b921b62e07833c2b8384b33e6ab9c5a0929Tyler Gunn}
232