content: /*
   * Copyright 2018 The Android Open Source Project
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package android.hardware.display;
  
  /**
   * @hide
   */
  public final class DisplayedContentSample {
      private long mNumFrames;
      private long[] mSamplesComponent0;
      private long[] mSamplesComponent1;
      private long[] mSamplesComponent2;
      private long[] mSamplesComponent3;
  
      /**
       * Construct an object representing a color histogram of pixels that were displayed on screen.
       *
       * @param numFrames The number of frames represented by this sample.
       * @param mSamplesComponent0 is a histogram counting how many times and for how long a pixel
       * of a given value was displayed onscreen for FORMAT_COMPONENT_0. The buckets of the
       * histogram are evenly weighted, the number of buckets is device specific.
       * The units are in pixels * milliseconds, with 1 pixel millisecond being 1 pixel displayed
       * onscreen for 1ms.
       * eg, for RGBA_8888, if sampleComponent0 is {100, 50, 30, 20},  then red component was
       * onscreen for 100 pixel milliseconds in range 0x00->0x3F, 30 pixel milliseconds in
       * range 0x40->0x7F, etc.
       * @param mSamplesComponent1 is the same sample definition as sampleComponent0, but for the
       * second component of format.
       * @param mSamplesComponent2 is the same sample definition as sampleComponent0, but for the
       * third component of format.
       * @param mSamplesComponent3 is the same sample definition as sampleComponent0, but for the
       * fourth component of format.
       */
      public DisplayedContentSample(long numFrames,
              long[] sampleComponent0,
              long[] sampleComponent1,
              long[] sampleComponent2,
              long[] sampleComponent3) {
          mNumFrames = numFrames;
          mSamplesComponent0 = sampleComponent0;
          mSamplesComponent1 = sampleComponent1;
          mSamplesComponent2 = sampleComponent2;
          mSamplesComponent3 = sampleComponent3;
      }
  
      public enum ColorComponent {
          CHANNEL0,
          CHANNEL1,
          CHANNEL2,
          CHANNEL3,
      }
  
      /**
       * Returns a color histogram according to component channel.
       *
       * @param component the component to return, according to the PixelFormat ordering
       * (eg, for RGBA, CHANNEL0 is R, CHANNEL1 is G, etc).
       *
       * @return an evenly weighted histogram counting how many times a pixel was
       *         displayed onscreen that fell into the corresponding bucket, with the first entry
       *         corresponding to the normalized 0.0 value, and the last corresponding to the 1.0
       *         value for that PixelFormat component.
       */
      public long[] getSampleComponent(ColorComponent component) {
          switch (component) {
              case CHANNEL0: return mSamplesComponent0;
              case CHANNEL1: return mSamplesComponent1;
              case CHANNEL2: return mSamplesComponent2;
              case CHANNEL3: return mSamplesComponent3;
              default: throw new ArrayIndexOutOfBoundsException();
          }
      }
  
      /**
       * Return the number of frames this sample was collected over.
       *
       * @return  the number of frames that this sample was collected over.
       */
      public long getNumFrames() {
          return mNumFrames;
      }
  }
  