diff options
author | Roman Stratiienko <r.stratiienko@gmail.com> | 2023-10-02 12:17:35 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2023-10-02 12:17:35 +0000 |
commit | 066c581027d4050b54fccd06a9237adfcc999e06 (patch) | |
tree | ef20527b871812fccbe70a9cb96ebf23a7872971 | |
parent | 3fc0b55cac63832a28faeb8b14c43e225ac898f8 (diff) | |
parent | 501b1decd36b088e309a6bb438161c3fd4236d3c (diff) | |
download | v4l2_codec2-066c581027d4050b54fccd06a9237adfcc999e06.tar.gz |
v4l2_codec2: Add RGBA video pixel format am: 6a3ebb9202 am: 676e4ac138 am: 501b1decd3
Original change: https://android-review.googlesource.com/c/platform/external/v4l2_codec2/+/2767863
Change-Id: I11206d6a8873f6534aef058a02151f6413e07c8a
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | common/Fourcc.cpp | 9 | ||||
-rw-r--r-- | common/VideoPixelFormat.cpp | 7 | ||||
-rw-r--r-- | common/include/v4l2_codec2/common/Fourcc.h | 2 | ||||
-rw-r--r-- | common/include/v4l2_codec2/common/VideoPixelFormat.h | 1 |
4 files changed, 19 insertions, 0 deletions
diff --git a/common/Fourcc.cpp b/common/Fourcc.cpp index 11ea31e..7ff9249 100644 --- a/common/Fourcc.cpp +++ b/common/Fourcc.cpp @@ -25,6 +25,7 @@ std::optional<Fourcc> Fourcc::fromUint32(uint32_t fourcc) { case XR24: case XB24: case RGB4: + case BGR4: case YU12: case YV12: case YM12: @@ -58,6 +59,8 @@ std::optional<Fourcc> Fourcc::fromVideoPixelFormat(VideoPixelFormat pixelFormat, return Fourcc(XB24); case VideoPixelFormat::BGRA: return Fourcc(RGB4); + case VideoPixelFormat::RGBA: + return Fourcc(BGR4); case VideoPixelFormat::I420: return Fourcc(YU12); case VideoPixelFormat::YV12: @@ -124,6 +127,7 @@ std::optional<Fourcc> Fourcc::fromVideoPixelFormat(VideoPixelFormat pixelFormat, case VideoPixelFormat::XR30: case VideoPixelFormat::XB30: case VideoPixelFormat::BGRA: + case VideoPixelFormat::RGBA: case VideoPixelFormat::UNKNOWN: break; } @@ -145,6 +149,8 @@ VideoPixelFormat Fourcc::toVideoPixelFormat() const { return VideoPixelFormat::XBGR; case RGB4: return VideoPixelFormat::BGRA; + case BGR4: + return VideoPixelFormat::RGBA; case YU12: case YM12: return VideoPixelFormat::I420; @@ -200,6 +206,7 @@ std::optional<Fourcc> Fourcc::toSinglePlanar() const { case XR24: case XB24: case RGB4: + case BGR4: case YU12: case YV12: case YUYV: @@ -232,6 +239,7 @@ bool Fourcc::isMultiPlanar() const { case XR24: case XB24: case RGB4: + case BGR4: case YU12: case YV12: case YUYV: @@ -264,6 +272,7 @@ static_assert(Fourcc::XR24 == V4L2_PIX_FMT_XBGR32, "Mismatch Fourcc"); static_assert(Fourcc::XB24 == V4L2_PIX_FMT_RGBX32, "Mismatch Fourcc"); #endif // V4L2_PIX_FMT_RGBX32 static_assert(Fourcc::RGB4 == V4L2_PIX_FMT_RGB32, "Mismatch Fourcc"); +static_assert(Fourcc::BGR4 == V4L2_PIX_FMT_BGR32, "Mismatch Fourcc"); static_assert(Fourcc::YU12 == V4L2_PIX_FMT_YUV420, "Mismatch Fourcc"); static_assert(Fourcc::YV12 == V4L2_PIX_FMT_YVU420, "Mismatch Fourcc"); static_assert(Fourcc::YM12 == V4L2_PIX_FMT_YUV420M, "Mismatch Fourcc"); diff --git a/common/VideoPixelFormat.cpp b/common/VideoPixelFormat.cpp index f175c26..661a5d8 100644 --- a/common/VideoPixelFormat.cpp +++ b/common/VideoPixelFormat.cpp @@ -82,6 +82,8 @@ std::string videoPixelFormatToString(VideoPixelFormat format) { return "XB30"; case VideoPixelFormat::BGRA: return "BGRA"; + case VideoPixelFormat::RGBA: + return "BGRA"; case VideoPixelFormat::UNKNOWN: return "UNKNOWN"; } @@ -116,6 +118,7 @@ size_t bitDepth(VideoPixelFormat format) { case VideoPixelFormat::ABGR: case VideoPixelFormat::XBGR: case VideoPixelFormat::BGRA: + case VideoPixelFormat::RGBA: return 8; case VideoPixelFormat::YUV420P9: case VideoPixelFormat::YUV422P9: @@ -153,6 +156,7 @@ static bool RequiresEvenSizeAllocation(VideoPixelFormat format) { case VideoPixelFormat::XR30: case VideoPixelFormat::XB30: case VideoPixelFormat::BGRA: + case VideoPixelFormat::RGBA: return false; case VideoPixelFormat::NV12: case VideoPixelFormat::NV21: @@ -185,6 +189,7 @@ size_t numPlanes(VideoPixelFormat format) { case VideoPixelFormat::YUY2: case VideoPixelFormat::ARGB: case VideoPixelFormat::BGRA: + case VideoPixelFormat::RGBA: case VideoPixelFormat::XRGB: case VideoPixelFormat::RGB24: case VideoPixelFormat::MJPEG: @@ -269,6 +274,7 @@ int bytesPerElement(VideoPixelFormat format, size_t plane) { switch (format) { case VideoPixelFormat::ARGB: case VideoPixelFormat::BGRA: + case VideoPixelFormat::RGBA: case VideoPixelFormat::XRGB: case VideoPixelFormat::ABGR: case VideoPixelFormat::XBGR: @@ -361,6 +367,7 @@ android::ui::Size SampleSize(VideoPixelFormat format, size_t plane) { case VideoPixelFormat::XR30: case VideoPixelFormat::XB30: case VideoPixelFormat::BGRA: + case VideoPixelFormat::RGBA: ALOGE("Invalid pixel format"); } } diff --git a/common/include/v4l2_codec2/common/Fourcc.h b/common/include/v4l2_codec2/common/Fourcc.h index a0f5fc4..972a4a3 100644 --- a/common/include/v4l2_codec2/common/Fourcc.h +++ b/common/include/v4l2_codec2/common/Fourcc.h @@ -54,6 +54,8 @@ public: // it as-is. RGB4 = composeFourcc('R', 'G', 'B', '4'), + BGR4 = composeFourcc('B', 'G', 'R', '4'), + // YUV420 single-planar formats. // https://linuxtv.org/downloads/v4l-dvb-apis/uapi/v4l/pixfmt-yuv420.html // Maps to PIXEL_FORMAT_I420, V4L2_PIX_FMT_YUV420, VA_FOURCC_I420. diff --git a/common/include/v4l2_codec2/common/VideoPixelFormat.h b/common/include/v4l2_codec2/common/VideoPixelFormat.h index 2cfe910..9867c79 100644 --- a/common/include/v4l2_codec2/common/VideoPixelFormat.h +++ b/common/include/v4l2_codec2/common/VideoPixelFormat.h @@ -35,6 +35,7 @@ enum class VideoPixelFormat { XR30, // 32bpp BGRX, 10 bits per channel, 2 bits ignored, 1 plane XB30, // 32bpp RGBX, 10 bits per channel, 2 bits ignored, 1 plane BGRA, // 32bpp ARGB (byte-order), 1 plane. + RGBA, // 32bpp ABGR (byte-order), 1 plane. // The P* in the formats below designates the number of bits per pixel component. I.e. P9 is // 9-bits per pixel component, P10 is 10-bits per pixel component, etc. YUV420P9, |