<?xml version="1.0" encoding="utf-8" ?>
<!--
    Copyright (c) 2019-2020 Qualcomm Technologies, Inc.
    All Rights Reserved.
    Confidential and Proprietary - Qualcomm Technologies, Inc.

    Not a Contribution.

    Copyright (C) 2012-2018 The Linux Foundation. All rights reserved.
    Copyright (C) 2012-2013 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.
-->

<!--
 Saipan Non-Secure decoder capabilities
 _________________________________________________________
 | Codec       | W       H       fps     Mbps    MB/s    |
 |_____________|_________________________________________|
 | h264        | 3840    2176    60      100     1958400 |
 |             | (4096)  (2176)  (48)    (100)           |
 | hevc        | 3840    2176    60      100     1958400 |
 |             | (4096)  (2176)  (48)    (100)           |
 | vp8         | 3840    2176    30      100      979200 |
 |             | (4096)  (2176)  (24)    (100)           |
 | vp9         | 3840    2176    60      100     1958400 |
 |             | (4096)  (2176)  (48)    (100)           |
 |_____________|_________________________________________|

 Saipan Secure decoder capabilities
 ______________________________________________________
 | Codec    | W       H       fps     Mbps    MB/s    |
 |__________|_________________________________________|
 | h264     | 3840    2176    60      40      1958400 |
 |          | (4096)  (2176)  (48)    (40)            |
 | vp9      | 3840    2176    60      40      1958400 |
 |          | (4096)  (2176)  (48)    (40)            |
 | hevc     | 3840    2176    60      40      1958400 |
 |          | (4096)  (2176)  (48)    (40)            |
 |__________|_________________________________________|

 Saipan Non-Secure encoder capabilities (Secure not supported)
 ______________________________________________________
 | Codec    | W       H       fps     Mbps    MB/s    |
 |__________|_________________________________________|
 | h264     | 3840    2176    60      100     1958400 |
 |          | (4096)  (2176)  (48)    (100)           |
 | hevc     | 3840    2176    60      100     1958400 |
 |          | (4096)  (2176)  (48)    (100)           |
 | vp8      | 3840    2176    30      100      979200 |
 |          | (4096)  (2176)  (24)    (100)           |
 |__________|_________________________________________|
-->

<Included>
    <Include href="media_codecs_google_audio.xml" />
    <Include href="media_codecs_google_telephony.xml" />
    <Settings>
        <Setting name="max-video-encoder-input-buffers" value="11" />
    </Settings>
    <Decoders>
        <!-- C2 decoders -->
        <MediaCodec name="c2.qti.avc.decoder" type="video/avc">
            <Limit name="size" min="128x128" max="4096x2176" />
            <Limit name="alignment" value="2x2" />
            <Limit name="block-size" value="16x16" />
            <Limit name="blocks-per-second" range="64-1958400" />
            <Limit name="bitrate" range="1-100000000" />
            <Limit name="frame-rate" range="1-480" />
            <Limit name="concurrent-instances" max="16" />
            <Limit name="performance-point-4096x2160" value="30" />
            <Limit name="performance-point-3840x2160" value="60" />
            <Limit name="performance-point-1920x1080" value="240" />
            <Limit name="performance-point-1280x720" value="480" />
            <Feature name="adaptive-playback" />
        </MediaCodec>
        <MediaCodec name="c2.qti.avc.decoder.low_latency" type="video/avc">
            <Limit name="size" min="128x128" max="4096x2176" />
            <Limit name="alignment" value="2x2" />
            <Limit name="block-size" value="16x16" />
            <Limit name="blocks-per-second" range="64-1958400" />
            <Limit name="bitrate" range="1-60000000" />
            <Limit name="frame-rate" range="1-480" />
            <Limit name="concurrent-instances" max="16" />
            <Feature name="adaptive-playback" />
            <Feature name="low-latency" />
            <Limit name="concurrent-instances" max="16" />
            <Limit name="performance-point-1280x720" value="240" />
            <Limit name="performance-point-1920x1080" value="120" />
            <Limit name="performance-point-3840x2160" value="30" />
            <Limit name="performance-point-4096x2160" value="24" />
        </MediaCodec>
        <MediaCodec name="c2.qti.avc.decoder.secure" type="video/avc" >
            <Limit name="size" min="128x128" max="4096x2176" />
            <Limit name="alignment" value="2x2" />
            <Limit name="block-size" value="16x16" />
            <Limit name="blocks-per-second" min="64" max="1958400" />
            <Limit name="bitrate" range="1-40000000" />
            <Limit name="frame-rate" range="1-240" />
            <Feature name="adaptive-playback" />
            <Feature name="secure-playback" required="true" />
            <Limit name="concurrent-instances" max="6" />
            <Limit name="performance-point-4096x2160" value="30" />
            <Limit name="performance-point-3840x2160" value="60" />
        </MediaCodec>
        <MediaCodec name="c2.qti.hevc.decoder" type="video/hevc" >
            <Limit name="size" min="128x128" max="4096x2176" />
            <Limit name="alignment" value="2x2" />
            <Limit name="block-size" value="16x16" />
            <Limit name="blocks-per-second" min="64" max="1958400" />
            <Limit name="bitrate" range="1-100000000" />
            <Limit name="frame-rate" range="1-480" />
            <Feature name="adaptive-playback" />
            <Limit name="concurrent-instances" max="16" />
            <Limit name="performance-point-4096x2160" value="30" />
            <Limit name="performance-point-3840x2160" value="60" />
            <Limit name="performance-point-1920x1080" value="240" />
            <Limit name="performance-point-1280x720" value="480" />
        </MediaCodec>
        <MediaCodec name="c2.qti.hevc.decoder.low_latency" type="video/hevc" >
            <Limit name="size" min="128x128" max="4096x2176" />
            <Limit name="alignment" value="2x2" />
            <Limit name="block-size" value="16x16" />
            <Limit name="blocks-per-second" min="64" max="1958400" />
            <Limit name="bitrate" range="1-60000000" />
            <Limit name="frame-rate" range="1-480" />
            <Feature name="adaptive-playback" />
            <Feature name="low-latency" />
            <Limit name="concurrent-instances" max="16" />
            <Limit name="performance-point-1280x720" value="240" />
            <Limit name="performance-point-1920x1080" value="120" />
            <Limit name="performance-point-3840x2160" value="30" />
            <Limit name="performance-point-4096x2160" value="24" />
        </MediaCodec>
        <MediaCodec name="c2.qti.hevc.decoder.secure" type="video/hevc" >
            <Limit name="size" min="128x128" max="4096x2176" />
            <Limit name="alignment" value="2x2" />
            <Limit name="block-size" value="16x16" />
            <Limit name="blocks-per-second" min="64" max="1958400" />
            <Limit name="bitrate" range="1-40000000" />
            <Limit name="frame-rate" range="1-480" />
            <Feature name="adaptive-playback" />
            <Feature name="secure-playback" required="true" />
            <Limit name="concurrent-instances" max="6" />
            <Limit name="performance-point-4096x2304" value="30" />
            <Limit name="performance-point-3840x2160" value="60" />
        </MediaCodec>
        <MediaCodec name="c2.qti.vp8.decoder" type="video/x-vnd.on2.vp8" >
            <Limit name="size" min="128x128" max="4096x2176" />
            <Limit name="alignment" value="2x2" />
            <Limit name="block-size" value="16x16" />
            <Limit name="blocks-per-second" min="64" max="1036800" />
            <Limit name="bitrate" range="1-100000000" />
            <Limit name="frame-rate" range="1-240" />
            <Feature name="adaptive-playback" />
            <Limit name="concurrent-instances" max="16" />
            <Limit name="performance-point-4096x2160" value="24" />
            <Limit name="performance-point-3840x2160" value="30" />
            <Limit name="performance-point-1920x1080" value="120" />
            <Limit name="performance-point-1280x720" value="240" />
        </MediaCodec>
        <MediaCodec name="c2.qti.vp9.decoder" type="video/x-vnd.on2.vp9" >
            <Limit name="size" min="128x128" max="4096x2176" />
            <Limit name="alignment" value="2x2" />
            <Limit name="block-size" value="16x16" />
            <Limit name="blocks-per-second" min="64" max="1958400" />
            <Limit name="bitrate" range="1-100000000" />
            <Limit name="frame-rate" range="1-480" />
            <Feature name="adaptive-playback" />
            <Limit name="concurrent-instances" max="6" />
            <Limit name="performance-point-4096x2160" value="30" />
            <Limit name="performance-point-3840x2160" value="60" />
            <Limit name="performance-point-1920x1080" value="240" />
            <Limit name="performance-point-1280x720" value="480" />
        </MediaCodec>
        <MediaCodec name="c2.qti.vp9.decoder.secure" type="video/x-vnd.on2.vp9" >
            <Limit name="size" min="128x128" max="4096x2176" />
            <Limit name="alignment" value="2x2" />
            <Limit name="block-size" value="16x16" />
            <Limit name="blocks-per-second" min="64" max="1958400" />
            <Limit name="bitrate" range="1-40000000" />
            <Limit name="frame-rate" range="1-480" />
            <Feature name="adaptive-playback" />
            <Feature name="secure-playback" required="true" />
            <Limit name="concurrent-instances" max="6" />
            <Limit name="performance-point-4096x2304" value="30" />
            <Limit name="performance-point-3840x2160" value="60" />
        </MediaCodec>
        <!-- TODO: parameters are copied from kona omx -->

        <!-- OMX alias decoders (Codec2 decoders with OMX names) -->
        <MediaCodec name="OMX.qcom.video.decoder.avc" type="video/avc" >
            <Quirk name="requires-allocate-on-input-ports" />
            <Quirk name="requires-allocate-on-output-ports" />
            <Limit name="size" min="128x128" max="4096x2176" />
            <Limit name="alignment" value="2x2" />
            <Limit name="block-size" value="16x16" />
            <Limit name="blocks-per-second" min="64" max="1958400" />
            <Limit name="bitrate" range="1-100000000" />
            <Limit name="frame-rate" range="1-480" />
            <Feature name="adaptive-playback" />
            <Limit name="concurrent-instances" max="16" />
            <Limit name="performance-point-4096x2160" value="30" />
            <Limit name="performance-point-3840x2160" value="60" />
            <Limit name="performance-point-1920x1080" value="240" />
            <Limit name="performance-point-1280x720" value="480" />
        </MediaCodec>
        <MediaCodec name="OMX.qcom.video.decoder.avc.secure" type="video/avc" >
            <Quirk name="requires-allocate-on-input-ports" />
            <Quirk name="requires-allocate-on-output-ports" />
            <Limit name="size" min="128x128" max="4096x2176" />
            <Limit name="alignment" value="2x2" />
            <Limit name="block-size" value="16x16" />
            <Limit name="blocks-per-second" min="64" max="1958400" />
            <Limit name="bitrate" range="1-40000000" />
            <Limit name="frame-rate" range="1-60" />
            <Feature name="adaptive-playback" />
            <Feature name="secure-playback" required="true" />
            <Limit name="concurrent-instances" max="6" />
            <Limit name="performance-point-4096x2160" value="30" />
            <Limit name="performance-point-3840x2160" value="60" />
        </MediaCodec>
        <MediaCodec name="OMX.qcom.video.decoder.vp8" type="video/x-vnd.on2.vp8" >
            <Quirk name="requires-allocate-on-input-ports" />
            <Quirk name="requires-allocate-on-output-ports" />
            <Limit name="size" min="128x128" max="4096x2176" />
            <Limit name="alignment" value="2x2" />
            <Limit name="block-size" value="16x16" />
            <Limit name="blocks-per-second" min="64" max="979200" />
            <Limit name="bitrate" range="1-120000000" />
            <Limit name="frame-rate" range="1-240" />
            <Feature name="adaptive-playback" />
            <Limit name="concurrent-instances" max="16" />
            <Limit name="performance-point-4096x2160" value="24" />
            <Limit name="performance-point-3840x2160" value="30" />
            <Limit name="performance-point-1920x1080" value="60" />
            <Limit name="performance-point-1280x720" value="120" />
        </MediaCodec>
        <MediaCodec name="OMX.qcom.video.decoder.vp9" type="video/x-vnd.on2.vp9" >
            <Quirk name="requires-allocate-on-input-ports" />
            <Quirk name="requires-allocate-on-output-ports" />
            <Limit name="size" min="128x128" max="4096x2176" />
            <Limit name="alignment" value="2x2" />
            <Limit name="block-size" value="16x16" />
            <Limit name="blocks-per-second" min="64" max="1958400" />
            <Limit name="bitrate" range="1-100000000" />
            <Limit name="frame-rate" range="1-480" />
            <Feature name="adaptive-playback" />
            <Limit name="concurrent-instances" max="6" />
            <Limit name="performance-point-4096x2160" value="30" />
            <Limit name="performance-point-3840x2160" value="60" />
            <Limit name="performance-point-1920x1080" value="240" />
            <Limit name="performance-point-1280x720" value="480" />
        </MediaCodec>
        <MediaCodec name="OMX.qcom.video.decoder.vp9.secure" type="video/x-vnd.on2.vp9" >
            <Quirk name="requires-allocate-on-input-ports" />
            <Quirk name="requires-allocate-on-output-ports" />
            <Limit name="size" min="128x128" max="4096x2176" />
            <Limit name="alignment" value="2x2" />
            <Limit name="block-size" value="16x16" />
            <Limit name="blocks-per-second" min="64" max="1958400" />
            <Limit name="bitrate" range="1-40000000" />
            <Limit name="frame-rate" range="1-60" />
            <Feature name="adaptive-playback" />
            <Feature name="secure-playback" required="true" />
            <Limit name="concurrent-instances" max="6" />
            <Limit name="performance-point-4096x2160" value="30" />
            <Limit name="performance-point-3840x2160" value="60" />
        </MediaCodec>
        <MediaCodec name="OMX.qcom.video.decoder.hevc" type="video/hevc" >
            <Quirk name="requires-allocate-on-input-ports" />
            <Quirk name="requires-allocate-on-output-ports" />
            <Limit name="size" min="128x128" max="4096x2176" />
            <Limit name="alignment" value="2x2" />
            <Limit name="block-size" value="16x16" />
            <Limit name="blocks-per-second" min="64" max="1958400" />
            <Limit name="bitrate" range="1-100000000" />
            <Limit name="frame-rate" range="1-480" />
            <Feature name="adaptive-playback" />
            <Limit name="concurrent-instances" max="16" />
            <Limit name="performance-point-4096x2160" value="30" />
            <Limit name="performance-point-3840x2160" value="60" />
            <Limit name="performance-point-1920x1080" value="240" />
            <Limit name="performance-point-1280x720" value="480" />
        </MediaCodec>
        <MediaCodec name="OMX.qcom.video.decoder.hevc.secure" type="video/hevc" >
            <Quirk name="requires-allocate-on-input-ports" />
            <Quirk name="requires-allocate-on-output-ports" />
            <Limit name="size" min="128x128" max="4096x2176" />
            <Limit name="alignment" value="2x2" />
            <Limit name="block-size" value="16x16" />
            <Limit name="blocks-per-second" min="64" max="1958400" />
            <Limit name="bitrate" range="1-40000000" />
            <Limit name="frame-rate" range="1-60" />
            <Feature name="adaptive-playback" />
            <Feature name="secure-playback" required="true" />
            <Limit name="concurrent-instances" max="6" />
            <Limit name="performance-point-4096x2160" value="30" />
            <Limit name="performance-point-3840x2160" value="60" />
        </MediaCodec>
        <!-- TODO: parameters are copied from kona omx -->
    </Decoders>

    <Encoders>
        <!-- C2 encoders -->
        <MediaCodec name="c2.qti.avc.encoder" type="video/avc">
            <Limit name="size" min="128x128" max="4096x2176" />
            <Limit name="alignment" value="2x2" />
            <Limit name="block-size" value="16x16" />
            <Limit name="blocks-per-second" min="64" max="1958400" />
            <Limit name="bitrate" range="1-100000000" />
            <Limit name="frame-rate" range="1-480" />
            <Limit name="performance-point-4096x2160" value="30" />
            <Limit name="performance-point-3840x2160" value="60" />
            <Limit name="performance-point-1920x1080" value="240" />
            <Limit name="performance-point-1280x720" value="480" />
            <Limit name="concurrent-instances" max="16" />
        </MediaCodec>
        <MediaCodec name="c2.qti.hevc.encoder" type="video/hevc">
            <Limit name="size" min="128x128" max="4096x2176" />
            <Limit name="alignment" value="2x2" />
            <Limit name="block-size" value="16x16" />
            <Limit name="blocks-per-second" min="64" max="1958400" />
            <Limit name="bitrate" range="1-100000000" />
            <Limit name="frame-rate" range="1-480" />
            <Limit name="concurrent-instances" max="16" />
            <Limit name="performance-point-4096x2160" value="30" />
            <Limit name="performance-point-3840x2160" value="60" />
            <Limit name="performance-point-1920x1080" value="240" />
            <Limit name="performance-point-1280x720" value="480" />
            <Feature name="bitrate-modes" value="VBR,CBR" />
        </MediaCodec>
        <MediaCodec name="c2.qti.hevc.encoder.cq" type="video/hevc" >
            <Alias name="OMX.qcom.video.encoder.hevc.cq"/>
            <Quirk name="requires-allocate-on-input-ports" />
            <Quirk name="requires-allocate-on-output-ports" />
            <Quirk name="requires-loaded-to-idle-after-allocation" />
            <Limit name="size" min="128x128" max="512x512" />
            <Limit name="alignment" value="2x2" />
            <Limit name="block-size" value="16x16" />
            <Limit name="frame-rate" range="1-20" />
            <Limit name="concurrent-instances" max="6" />
            <Limit name="quality" range="0-100" default="80" />
            <Feature name="bitrate-modes" value="CQ" />
            <Limit name="performance-point-512x512" value="2025" />
        </MediaCodec>
        <MediaCodec name="c2.qti.heic.encoder" type="image/vnd.android.heic" >
            <Alias name="OMX.qcom.video.encoder.heic"/>
            <Quirk name="requires-allocate-on-input-ports" />
            <Quirk name="requires-allocate-on-input-ports" />
            <Quirk name="requires-allocate-on-output-ports" />
            <Quirk name="requires-loaded-to-idle-after-allocation" />
            <Limit name="size" min="512x512" max="8192x8192" />
            <Limit name="alignment" value="2x2" />
            <Limit name="block-size" value="16x16" />
            <Limit name="frame-rate" range="1-20" />
            <Limit name="concurrent-instances" max="6" />
            <Limit name="quality" range="0-100" default="80" />
            <Feature name="bitrate-modes" value="CQ" />
            <Limit name="performance-point-8192x4320" value="3" />
            <Limit name="performance-point-1920x1080" value="6" />
        </MediaCodec>
        <MediaCodec name="c2.qti.vp8.encoder" type="video/x-vnd.on2.vp8">
            <Limit name="size" min="128x128" max="4096x2176" />
            <Limit name="alignment" value="2x2" />
            <Limit name="block-size" value="16x16" />
            <Limit name="blocks-per-second" min="64" max="2073600" />
            <Limit name="bitrate" range="1-100000000" />
            <Limit name="frame-rate" range="1-480" />
            <Limit name="concurrent-instances" max="16" />
            <Limit name="performance-point-4096x2160" value="24" />
            <Limit name="performance-point-3840x2160" value="30" />
            <Limit name="performance-point-1920x1080" value="60" />
            <Limit name="performance-point-1280x720" value="120" />
        </MediaCodec>

        <!-- OMX alias encoders (Codec2 encoders with OMX names) -->
        <MediaCodec name="OMX.qcom.video.encoder.avc" type="video/avc" >
            <Quirk name="requires-allocate-on-input-ports" />
            <Quirk name="requires-allocate-on-output-ports" />
            <Quirk name="requires-loaded-to-idle-after-allocation" />
            <Limit name="size" min="128x128" max="4096x2176" />
            <Limit name="alignment" value="2x2" />
            <Limit name="block-size" value="16x16" />
            <Limit name="blocks-per-second" min="64" max="1958400" />
            <Limit name="bitrate" range="1-100000000" />
            <Limit name="frame-rate" range="1-480" />
            <Limit name="concurrent-instances" max="16" />
            <Limit name="performance-point-4096x2160" value="30" />
            <Limit name="performance-point-3840x2160" value="60" />
            <Limit name="performance-point-1920x1080" value="240" />
            <Limit name="performance-point-1280x720" value="480" />
        </MediaCodec>
        <MediaCodec name="OMX.qcom.video.encoder.vp8" type="video/x-vnd.on2.vp8" >
            <Quirk name="requires-allocate-on-input-ports" />
            <Quirk name="requires-allocate-on-output-ports" />
            <Quirk name="requires-loaded-to-idle-after-allocation" />
            <Limit name="size" min="128x128" max="4096x2176" />
            <Limit name="alignment" value="2x2" />
            <Limit name="block-size" value="16x16" />
            <Limit name="blocks-per-second" min="64" max="979200" />
            <Limit name="bitrate" range="1-100000000" />
            <Limit name="frame-rate" range="1-240" />
            <Limit name="concurrent-instances" max="16" />
            <Limit name="performance-point-4096x2160" value="24" />
            <Limit name="performance-point-3840x2160" value="30" />
            <Limit name="performance-point-1920x1080" value="120" />
            <Limit name="performance-point-1280x720" value="240" />
        </MediaCodec>
        <MediaCodec name="OMX.qcom.video.encoder.hevc" type="video/hevc" >
            <Quirk name="requires-allocate-on-input-ports" />
            <Quirk name="requires-allocate-on-output-ports" />
            <Quirk name="requires-loaded-to-idle-after-allocation" />
            <Limit name="size" min="128x128" max="4096x2176" />
            <Limit name="alignment" value="2x2" />
            <Limit name="block-size" value="16x16" />
            <Limit name="blocks-per-second" min="64" max="1958400" />
            <Limit name="bitrate" range="1-100000000" />
            <Limit name="frame-rate" range="1-480" />
            <Limit name="concurrent-instances" max="16" />
            <Limit name="performance-point-4096x2160" value="30" />
            <Limit name="performance-point-3840x2160" value="60" />
            <Limit name="performance-point-1920x1080" value="240" />
            <Limit name="performance-point-1280x720" value="480" />
            <Limit name="quality" range="0-100" default="80" />
            <Feature name="bitrate-modes" value="VBR,CBR,CQ" />
        </MediaCodec>
    </Encoders>
    <Include href="media_codecs_google_c2.xml" />
</Included>
