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

Commit 3dfbc8b1 authored by Amit Shekhar's avatar Amit Shekhar Committed by Sanjay Singh
Browse files

uapi: Add COLOR_FMT_NV12_512



HEIF HW encoding requires frames to be divided in 512x512 tiles.
Input frames, having width and height not a multiple of 512,
must be aligned to 512. Existing formats can't be modified to
accommodate HEIF's requirement because it will increase memory
footprint for all usecases of the modified color format.

Change-Id: I0dda7336bb98f04ebedb503598fa61044b8f8368
Signed-off-by: default avatarAmit Shekhar <ashekhar@codeaurora.org>
Signed-off-by: default avatarSanjay Singh <c_sisanj@codeaurora.org>
parent 67e27e60
Loading
Loading
Loading
Loading
+51 −1
Original line number Diff line number Diff line
@@ -53,7 +53,6 @@ enum color_fmts {
	 *          + max(Extradata, Y_Stride * 8), 4096)
	 */
	COLOR_FMT_NV12,

	/* Venus NV21:
	 * YUV 4:2:0 image with a plane of 8 bit Y samples followed
	 * by an interleaved V/U plane containing 8 bit 2x2 subsampled
@@ -806,12 +805,48 @@ enum color_fmts {
	 *          + max(Extradata, Y_Stride * 8), 4096)
	 */
	COLOR_FMT_P010,
	/* Venus NV12_512:
	 * YUV 4:2:0 image with a plane of 8 bit Y samples followed
	 * by an interleaved U/V plane containing 8 bit 2x2 subsampled
	 * colour difference samples.
	 *
	 * <-------- Y/UV_Stride -------->
	 * <------- Width ------->
	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  ^           ^
	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |           |
	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  Height      |
	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |          Y_Scanlines
	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |           |
	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |           |
	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |           |
	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  V           |
	 * . . . . . . . . . . . . . . . .              |
	 * . . . . . . . . . . . . . . . .              |
	 * . . . . . . . . . . . . . . . .              |
	 * . . . . . . . . . . . . . . . .              V
	 * U V U V U V U V U V U V . . . .  ^
	 * U V U V U V U V U V U V . . . .  |
	 * U V U V U V U V U V U V . . . .  |
	 * U V U V U V U V U V U V . . . .  UV_Scanlines
	 * . . . . . . . . . . . . . . . .  |
	 * . . . . . . . . . . . . . . . .  V
	 * . . . . . . . . . . . . . . . .  --> Buffer size alignment
	 *
	 * Y_Stride : Width aligned to 512
	 * UV_Stride : Width aligned to 512
	 * Y_Scanlines: Height aligned to 512
	 * UV_Scanlines: Height/2 aligned to 256
	 * Total size = align((Y_Stride * Y_Scanlines
	 *          + UV_Stride  * UV_Scanlines), 4096)
	 */
	COLOR_FMT_NV12_512,
};

#define COLOR_FMT_RGBA1010102_UBWC	COLOR_FMT_RGBA1010102_UBWC
#define COLOR_FMT_RGB565_UBWC		COLOR_FMT_RGB565_UBWC
#define COLOR_FMT_P010_UBWC		COLOR_FMT_P010_UBWC
#define COLOR_FMT_P010		COLOR_FMT_P010
#define COLOR_FMT_NV12_512		COLOR_FMT_NV12_512

static inline unsigned int VENUS_EXTRADATA_SIZE(int width, int height)
{
@@ -847,6 +882,10 @@ static inline unsigned int VENUS_Y_STRIDE(int color_fmt, int width)
		alignment = 128;
		stride = MSM_MEDIA_ALIGN(width, alignment);
		break;
	case COLOR_FMT_NV12_512:
		alignment = 512;
		stride = MSM_MEDIA_ALIGN(width, alignment);
		break;
	case COLOR_FMT_NV12_BPP10_UBWC:
		alignment = 256;
		stride = MSM_MEDIA_ALIGN(width, 192);
@@ -889,6 +928,10 @@ static inline unsigned int VENUS_UV_STRIDE(int color_fmt, int width)
		alignment = 128;
		stride = MSM_MEDIA_ALIGN(width, alignment);
		break;
	case COLOR_FMT_NV12_512:
		alignment = 512;
		stride = MSM_MEDIA_ALIGN(width, alignment);
		break;
	case COLOR_FMT_NV12_BPP10_UBWC:
		alignment = 256;
		stride = MSM_MEDIA_ALIGN(width, 192);
@@ -931,6 +974,9 @@ static inline unsigned int VENUS_Y_SCANLINES(int color_fmt, int height)
	case COLOR_FMT_P010:
		alignment = 32;
		break;
	case COLOR_FMT_NV12_512:
		alignment = 512;
		break;
	case COLOR_FMT_NV12_BPP10_UBWC:
	case COLOR_FMT_P010_UBWC:
		alignment = 16;
@@ -966,6 +1012,9 @@ static inline unsigned int VENUS_UV_SCANLINES(int color_fmt, int height)
	case COLOR_FMT_P010:
		alignment = 16;
		break;
	case COLOR_FMT_NV12_512:
		alignment = 256;
		break;
	case COLOR_FMT_NV12_UBWC:
		alignment = 32;
		break;
@@ -1268,6 +1317,7 @@ static inline unsigned int VENUS_BUFFER_SIZE(
		}
		break;
	case COLOR_FMT_P010:
	case COLOR_FMT_NV12_512:
		uv_alignment = 4096;
		y_plane = y_stride * y_sclines;
		uv_plane = uv_stride * uv_sclines + uv_alignment;