/*
 * Copyright (C) 2023 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.
 */

syntax = "proto2";

package android.media.codec;

//
// MediaResource reclaim status code.
enum ReclaimStatus {
    // Unspecified Reclaim error.
    RECLAIM_STATUS_UNSPECIFIED = 0;
    // Reclaimed successfully.
    RECLAIM_SUCCESS = 1;
    // Reclaim failed as none of the clients have the requested resources.
    RECLAIM_FAILED_NO_CLIENTS = 2;
    // Reclaim failed as client(s) failed to reclaim the resources.
    RECLAIM_FAILED_RECLAIM_RESOURCES = 3;
}

//
// MediaCodec type.
//
// From
//  frameworks/av/services/mediaresourcemanager/aidl/android/media/MediaResourceSubType.aidl
enum CodecType {
    // Unspecified codec type.
    CODEC_TYPE_UNSPECIFIED = 0;
    // Audio codec
    CODEC_TYPE_AUDIO = 1;
    // Video codec.
    CODEC_TYPE_VIDEO = 2;
    // Image codec.
    CODEC_TYPE_IMAGE = 3;
}

// The codec technology.
enum Codec {
    CODEC_UNKNOWN = 0;
    CODEC_AVC = 1;
    CODEC_HEVC = 2;
    CODEC_VP8 = 3;
    CODEC_VP9 = 4;
    CODEC_AV1 = 5;
}

// The video resolution, as computed by multiplying the width by the height and finding the enum
// that is just below the limit.
enum Resolution {
   RESOLUTION_UNKNOWN = 0;
   RESOLUTION_ZERO = -1;
   RESOLUTION_INVALID = -2;

   RESOLUTION_SMALLEST = 11;
   RESOLUTION_VERY_LOW = 41;
   RESOLUTION_352X640 = 228;
   RESOLUTION_360X640 = 233;
   RESOLUTION_480X640 = 311;
   RESOLUTION_480X854 = 414;
   RESOLUTION_540X960 = 524;
   RESOLUTION_576X1024 = 621;

   RESOLUTION_720P_HD_ALMOST = 912; // -1%
   RESOLUTION_720P_HD = 931; // +1%

   RESOLUTION_1080P_FHD_ALMOST = 2053; // -1%
   RESOLUTION_1080P_FHD = 2095; // +1%

   RESOLUTION_1080X2340 = 2553;
   RESOLUTION_1080X2400 = 2618;
   RESOLUTION_1440X2560 = 3724;

   RESOLUTION_4K_UHD_ALMOST = 8211; // -1%
   RESOLUTION_4K_UHD = 8378; // +1%
   RESOLUTION_8K_UHD_ALMOST = 32846; // -1%
   RESOLUTION_8K_UHD = 33510; // +1%
   RESOLUTION_16K = 134038;
   RESOLUTION_32K = 536151;
   RESOLUTION_MAX_SIZE = 2147483647;
}

// The video framerate as detected by looking at timestamps.
enum Framerate {
    FRAMERATE_UNKNOWN = 0;
    FRAMERATE_UNDETERMINED = 1;
    FRAMERATE_24_3_2_PULLDOWN = 2;
    FRAMERATE_24 = 2400;
    FRAMERATE_25 = 2500;
    FRAMERATE_30 = 3000;
    FRAMERATE_50 = 5000;
    FRAMERATE_60 = 6000;
    FRAMERATE_120 = 12000;
    FRAMERATE_240 = 24000;
    FRAMERATE_480 = 48000;
    FRAMERATE_960 = 96000;
}

// Bitrate is relative to the codec, resolution and framerate using a lookup table.
enum Bitrate {
    BITRATE_UNKNOWN = 0;
    BITRATE_LOW = 1;
    BITRATE_MEDIUM = 2;
    BITRATE_HIGH = 3;
}

// The HDR format produced by the decoder.
enum HdrFormat {
    HDR_FORMAT_UNKNOWN = 0;
    HDR_FORMAT_NONE = 1;
    HDR_FORMAT_HLG = 2;
    HDR_FORMAT_HDR10 = 3;
    HDR_FORMAT_HDR10_PLUS = 4;
    HDR_FORMAT_DOLBY_VISION = 5;
}
