aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman Stratiienko <r.stratiienko@gmail.com>2023-10-02 12:17:35 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-10-02 12:17:35 +0000
commit066c581027d4050b54fccd06a9237adfcc999e06 (patch)
treeef20527b871812fccbe70a9cb96ebf23a7872971
parent3fc0b55cac63832a28faeb8b14c43e225ac898f8 (diff)
parent501b1decd36b088e309a6bb438161c3fd4236d3c (diff)
downloadv4l2_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.cpp9
-rw-r--r--common/VideoPixelFormat.cpp7
-rw-r--r--common/include/v4l2_codec2/common/Fourcc.h2
-rw-r--r--common/include/v4l2_codec2/common/VideoPixelFormat.h1
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,