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

Commit 580a6443 authored by Slawomir Rosek's avatar Slawomir Rosek
Browse files

Codec2Buffer: accept RGB/RGBA MediaImage layouts



This CL adds basic verification of RGB/RGBA layouts to MediaImage
converter. Some of the vendor encoders may use them as hal pixel
format IMPLEMENTATION_DEFINED which is mapped to COLOR_FormatSurface.
Similar handling was already implemented in Android 11 but of some
reason it was removed with the following change:
I5a0827eb54f0c6834a247bfaa653489e4633b6c7.

Bug: 240954075
Bug: 273115267
Test: CtsMediaCodecTestCases
Change-Id: Iba5f2f57686ba20b3debbd0ddf62c3a1f521fc3b
Signed-off-by: default avatarSlawomir Rosek <srosek@google.com>
parent 7df706ae
Loading
Loading
Loading
Loading
+47 −10
Original line number Diff line number Diff line
@@ -478,19 +478,56 @@ public:
                mInitCheck = NO_INIT;
                return;
            case C2PlanarLayout::TYPE_RGB:
                mediaImage->mType = MediaImage2::MEDIA_IMAGE_TYPE_RGB;
                // TODO: support MediaImage layout
                switch (mClientColorFormat) {
                    case COLOR_FormatSurface:
                    case COLOR_FormatRGBFlexible:
                    case COLOR_Format24bitBGR888:
                    case COLOR_Format24bitRGB888:
                        ALOGD("Converter: accept color format "
                                "(client %d component %d) for RGB layout",
                                mClientColorFormat, mComponentColorFormat);
                        break;
                    default:
                        ALOGD("Converter: unrecognized color format "
                                "(client %d component %d) for RGB layout",
                                mClientColorFormat, mComponentColorFormat);
                mInitCheck = NO_INIT;
                // TODO: support MediaImage layout
                        mInitCheck = BAD_VALUE;
                        return;
                }
                if (layout.numPlanes != 3) {
                    ALOGD("Converter: %d planes for RGB layout", layout.numPlanes);
                    mInitCheck = BAD_VALUE;
                    return;
                }
                break;
            case C2PlanarLayout::TYPE_RGBA:
                mediaImage->mType = MediaImage2::MEDIA_IMAGE_TYPE_RGBA;
                // TODO: support MediaImage layout
                switch (mClientColorFormat) {
                    case COLOR_FormatSurface:
                    case COLOR_FormatRGBAFlexible:
                    case COLOR_Format32bitABGR8888:
                    case COLOR_Format32bitARGB8888:
                    case COLOR_Format32bitBGRA8888:
                        ALOGD("Converter: accept color format "
                                "(client %d component %d) for RGBA layout",
                                mClientColorFormat, mComponentColorFormat);
                        break;
                    default:
                        ALOGD("Converter: unrecognized color format "
                                "(client %d component %d) for RGBA layout",
                                mClientColorFormat, mComponentColorFormat);
                mInitCheck = NO_INIT;
                // TODO: support MediaImage layout
                        mInitCheck = BAD_VALUE;
                        return;
                }
                if (layout.numPlanes != 4) {
                    ALOGD("Converter: %d planes for RGBA layout", layout.numPlanes);
                    mInitCheck = BAD_VALUE;
                    return;
                }
                break;
            default:
                mediaImage->mType = MediaImage2::MEDIA_IMAGE_TYPE_UNKNOWN;
                if (layout.numPlanes == 1) {