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

Commit 45109a3b authored by Lajos Molnar's avatar Lajos Molnar
Browse files

codec2: pass color aspects to RGBA conversion for av1/vp9 decoder

Bug: 234641213
Change-Id: I07081f4bf7b95f2f1ddfa83d87abb0c998b71ff1
parent c971e964
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -539,9 +539,10 @@ bool C2SoftAomDec::outputBuffer(

    std::shared_ptr<C2GraphicBlock> block;
    uint32_t format = HAL_PIXEL_FORMAT_YV12;
    std::shared_ptr<C2StreamColorAspectsTuning::output> defaultColorAspects;
    if (img->fmt == AOM_IMG_FMT_I42016) {
        IntfImpl::Lock lock = mIntf->lock();
        std::shared_ptr<C2StreamColorAspectsTuning::output> defaultColorAspects = mIntf->getDefaultColorAspects_l();
        defaultColorAspects = mIntf->getDefaultColorAspects_l();

        if (defaultColorAspects->primaries == C2Color::PRIMARIES_BT2020 &&
            defaultColorAspects->matrix == C2Color::MATRIX_BT2020 &&
@@ -590,7 +591,8 @@ bool C2SoftAomDec::outputBuffer(
        if (format == HAL_PIXEL_FORMAT_RGBA_1010102) {
            convertYUV420Planar16ToY410OrRGBA1010102(
                    (uint32_t *)dstY, srcY, srcU, srcV, srcYStride / 2, srcUStride / 2,
                    srcVStride / 2, dstYStride / sizeof(uint32_t), mWidth, mHeight);
                    srcVStride / 2, dstYStride / sizeof(uint32_t), mWidth, mHeight,
                    std::static_pointer_cast<const C2ColorAspectsStruct>(defaultColorAspects));
        } else {
            convertYUV420Planar16ToYV12(dstY, dstU, dstV, srcY, srcU, srcV, srcYStride / 2,
                                        srcUStride / 2, srcVStride / 2, dstYStride, dstUVStride,
+7 −5
Original line number Diff line number Diff line
@@ -636,10 +636,10 @@ bool C2SoftGav1Dec::outputBuffer(const std::shared_ptr<C2BlockPool> &pool,

  std::shared_ptr<C2GraphicBlock> block;
  uint32_t format = HAL_PIXEL_FORMAT_YV12;
  std::shared_ptr<C2StreamColorAspectsInfo::output> codedColorAspects;
  if (buffer->bitdepth == 10) {
    IntfImpl::Lock lock = mIntf->lock();
    std::shared_ptr<C2StreamColorAspectsInfo::output> codedColorAspects =
        mIntf->getColorAspects_l();
    codedColorAspects = mIntf->getColorAspects_l();
    bool allowRGBA1010102 = false;
    if (codedColorAspects->primaries == C2Color::PRIMARIES_BT2020 &&
        codedColorAspects->matrix == C2Color::MATRIX_BT2020 &&
@@ -713,9 +713,11 @@ bool C2SoftGav1Dec::outputBuffer(const std::shared_ptr<C2BlockPool> &pool,
    const uint16_t *srcV = (const uint16_t *)buffer->plane[2];

    if (format == HAL_PIXEL_FORMAT_RGBA_1010102) {
        convertYUV420Planar16ToY410OrRGBA1010102((uint32_t *)dstY, srcY, srcU, srcV, srcYStride / 2,
        convertYUV420Planar16ToY410OrRGBA1010102(
                (uint32_t *)dstY, srcY, srcU, srcV, srcYStride / 2,
                srcUStride / 2, srcVStride / 2,
                                                 dstYStride / sizeof(uint32_t), mWidth, mHeight);
                dstYStride / sizeof(uint32_t), mWidth, mHeight,
                std::static_pointer_cast<const C2ColorAspectsStruct>(codedColorAspects));
    } else if (format == HAL_PIXEL_FORMAT_YCBCR_P010) {
        convertYUV420Planar16ToP010((uint16_t *)dstY, (uint16_t *)dstU, srcY, srcU, srcV,
                                    srcYStride / 2, srcUStride / 2, srcVStride / 2, dstYStride / 2,
+7 −3
Original line number Diff line number Diff line
@@ -688,9 +688,10 @@ status_t C2SoftVpxDec::outputBuffer(

    std::shared_ptr<C2GraphicBlock> block;
    uint32_t format = HAL_PIXEL_FORMAT_YV12;
    std::shared_ptr<C2StreamColorAspectsTuning::output> defaultColorAspects;
    if (img->fmt == VPX_IMG_FMT_I42016) {
        IntfImpl::Lock lock = mIntf->lock();
        std::shared_ptr<C2StreamColorAspectsTuning::output> defaultColorAspects = mIntf->getDefaultColorAspects_l();
        defaultColorAspects = mIntf->getDefaultColorAspects_l();
        bool allowRGBA1010102 = false;
        if (defaultColorAspects->primaries == C2Color::PRIMARIES_BT2020 &&
            defaultColorAspects->matrix == C2Color::MATRIX_BT2020 &&
@@ -760,11 +761,14 @@ status_t C2SoftVpxDec::outputBuffer(
                queue->entries.push_back(
                        [dstY, srcY, srcU, srcV,
                         srcYStride, srcUStride, srcVStride, dstYStride,
                         width = mWidth, height = std::min(mHeight - i, kHeight)] {
                         width = mWidth, height = std::min(mHeight - i, kHeight),
                         defaultColorAspects] {
                            convertYUV420Planar16ToY410OrRGBA1010102(
                                    (uint32_t *)dstY, srcY, srcU, srcV, srcYStride / 2,
                                    srcUStride / 2, srcVStride / 2, dstYStride / sizeof(uint32_t),
                                    width, height);
                                    width, height,
                                    std::static_pointer_cast<const C2ColorAspectsStruct>(
                                            defaultColorAspects));
                        });
                srcY += srcYStride / 2 * kHeight;
                srcU += srcUStride / 2 * (kHeight / 2);