Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 89d5b5a9 authored by Harish Mahendrakar's avatar Harish Mahendrakar Committed by Cherrypicker Worker
Browse files

c2 vp9, av1: List P010 in color formats only if it is supported

AHardwareBuffer_isSupported() now supports P010 format and thus
can be used to check if P010 is supported before advertising it as
as supported pixel format.

Also this is now instead of an extra allocation that was done earlier
to check if a format was supported.

Bug: 214411172
Test: atest CtsMediaDecoderTestCases:ImageReaderDecoderTest -- \
 --module-arg \
 CtsMediaDecoderTestCases:instrumentation-arg:codec-prefix:=c2.android.
Test: atest android.mediav2.cts.CodecDecoderSurfaceTest \
 android.mediav2.cts.AdaptivePlaybackTest \
 android.mediav2.cts.CodecDecoderTest -- --module-arg \
 CtsMediaV2TestCases:instrumentation-arg:codec-prefix:=c2.android.

Change-Id: Iee516a1d45ab82308e74fe6941be748a12bab8af
(cherry picked from commit f5dec500)
Merged-In: Iee516a1d45ab82308e74fe6941be748a12bab8af
parent 30910c6c
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -37,6 +37,11 @@ cc_library {
        "libsfplugin_ccodec_utils",
    ],

    header_libs: [
        "libarect_headers",
        "libnativewindow_headers",
    ],

    shared_libs: [
        "libcutils", // for properties
        "liblog", // for ALOG
@@ -77,6 +82,11 @@ cc_defaults {
        "libsfplugin_ccodec_utils",
    ],

    header_libs: [
        "libarect_headers",
        "libnativewindow_headers",
    ],

    shared_libs: [
        "libcodec2_soft_common",
        "libcutils", // for properties
+6 −21
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@
#define LOG_TAG "SimpleC2Component"
#include <log/log.h>

#include <android/hardware_buffer.h>
#include <cutils/properties.h>
#include <media/stagefright/foundation/AMessage.h>

@@ -26,19 +27,14 @@
#include <C2Config.h>
#include <C2Debug.h>
#include <C2PlatformSupport.h>
#include <Codec2BufferUtils.h>
#include <Codec2CommonUtils.h>
#include <SimpleC2Component.h>

namespace android {
constexpr uint8_t kNeutralUVBitDepth8 = 128;
constexpr uint16_t kNeutralUVBitDepth10 = 512;

bool isAtLeastT() {
    char deviceCodeName[PROP_VALUE_MAX];
    __system_property_get("ro.build.version.codename", deviceCodeName);
    return android_get_device_api_level() >= __ANDROID_API_T__ ||
           !strcmp(deviceCodeName, "Tiramisu");
}

void convertYUV420Planar8ToYV12(uint8_t *dstY, uint8_t *dstU, uint8_t *dstV, const uint8_t *srcY,
                                const uint8_t *srcU, const uint8_t *srcV, size_t srcYStride,
                                size_t srcUStride, size_t srcVStride, size_t dstYStride,
@@ -885,25 +881,14 @@ int SimpleC2Component::getHalPixelFormatForBitDepth10(bool allowRGBA1010102) {
    // Save supported hal pixel formats for bit depth of 10, the first time this is called
    if (!mBitDepth10HalPixelFormats.size()) {
        std::vector<int> halPixelFormats;
        if (isAtLeastT()) {
        halPixelFormats.push_back(HAL_PIXEL_FORMAT_YCBCR_P010);
        }

        // since allowRGBA1010102 can chance in each call, but mBitDepth10HalPixelFormats
        // is populated only once, allowRGBA1010102 is not considered at this stage.
        halPixelFormats.push_back(HAL_PIXEL_FORMAT_RGBA_1010102);

        for (int halPixelFormat : halPixelFormats) {
            std::shared_ptr<C2GraphicBlock> block;

            uint32_t gpuConsumerFlags = halPixelFormat == HAL_PIXEL_FORMAT_RGBA_1010102
                                                ? C2AndroidMemoryUsage::HW_TEXTURE_READ
                                                : 0;
            C2MemoryUsage usage = {C2MemoryUsage::CPU_READ | gpuConsumerFlags,
                                   C2MemoryUsage::CPU_WRITE};
            // TODO(b/214411172) Use AHardwareBuffer_isSupported once it supports P010
            c2_status_t status =
                    mOutputBlockPool->fetchGraphicBlock(320, 240, halPixelFormat, usage, &block);
            if (status == C2_OK) {
            if (isHalPixelFormatSupported((AHardwareBuffer_Format)halPixelFormat)) {
                mBitDepth10HalPixelFormats.push_back(halPixelFormat);
            }
        }
+0 −1
Original line number Diff line number Diff line
@@ -27,7 +27,6 @@
#include <media/stagefright/foundation/Mutexed.h>

namespace android {
bool isAtLeastT();
void convertYUV420Planar8ToYV12(uint8_t *dstY, uint8_t *dstU, uint8_t *dstV, const uint8_t *srcY,
                                const uint8_t *srcU, const uint8_t *srcV, size_t srcYStride,
                                size_t srcUStride, size_t srcVStride, size_t dstYStride,
+2 −1
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@
#include <C2Debug.h>
#include <C2PlatformSupport.h>
#include <Codec2BufferUtils.h>
#include <Codec2CommonUtils.h>
#include <Codec2Mapper.h>
#include <SimpleC2Interface.h>
#include <log/log.h>
@@ -191,7 +192,7 @@ class C2SoftGav1Dec::IntfImpl : public SimpleInterface<void>::BaseParams {
              .build());

    std::vector<uint32_t> pixelFormats = {HAL_PIXEL_FORMAT_YCBCR_420_888};
    if (isAtLeastT()) {
    if (isHalPixelFormatSupported((AHardwareBuffer_Format)HAL_PIXEL_FORMAT_YCBCR_P010)) {
        pixelFormats.push_back(HAL_PIXEL_FORMAT_YCBCR_P010);
    }
    // TODO: support more formats?
+2 −1
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@
#include <C2Debug.h>
#include <C2PlatformSupport.h>
#include <Codec2BufferUtils.h>
#include <Codec2CommonUtils.h>
#include <SimpleC2Interface.h>

#include "C2SoftVpxDec.h"
@@ -219,7 +220,7 @@ public:
        // TODO: support more formats?
        std::vector<uint32_t> pixelFormats = {HAL_PIXEL_FORMAT_YCBCR_420_888};
#ifdef VP9
        if (isAtLeastT()) {
        if (isHalPixelFormatSupported((AHardwareBuffer_Format)HAL_PIXEL_FORMAT_YCBCR_P010)) {
            pixelFormats.push_back(HAL_PIXEL_FORMAT_YCBCR_P010);
        }
#endif
Loading