| /* |
| * 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 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. |
| * eg, for RGBA_8888, if sampleComponent0 is {10, 6, 4, 1} this means that 10 red pixels were |
| * displayed onscreen in range 0x00->0x3F, 6 red pixels were displayed onscreen 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; |
| } |
| } |