diff --git a/driver/platform/waipio/src/msm_vidc_waipio.c b/driver/platform/waipio/src/msm_vidc_waipio.c index bb025f5613..f7abd095e1 100644 --- a/driver/platform/waipio/src/msm_vidc_waipio.c +++ b/driver/platform/waipio/src/msm_vidc_waipio.c @@ -70,7 +70,7 @@ static struct msm_platform_core_capability core_data_waipio[] = { {DEBUG_TIMEOUT, 0}, // TODO: review below entries, and if required rename as PREFETCH {PREFIX_BUF_COUNT_PIX, 18}, - {PREFIX_BUF_SIZE_PIX, 13434880}, /* Calculated by VENUS_BUFFER_SIZE for 4096x2160 UBWC */ + {PREFIX_BUF_SIZE_PIX, 13434880}, /* Calculated by VIDEO_RAW_BUFFER_SIZE for 4096x2160 UBWC */ {PREFIX_BUF_COUNT_NON_PIX, 1}, {PREFIX_BUF_SIZE_NON_PIX, 209715200}, /* * Internal buffer size is calculated for secure decode session diff --git a/driver/variant/iris2/src/msm_vidc_buffer_iris2.c b/driver/variant/iris2/src/msm_vidc_buffer_iris2.c index b76ae4b06c..a3168090df 100644 --- a/driver/variant/iris2/src/msm_vidc_buffer_iris2.c +++ b/driver/variant/iris2/src/msm_vidc_buffer_iris2.c @@ -198,7 +198,7 @@ static u32 msm_vidc_decoder_dpb_size_iris2(struct msm_vidc_inst *inst) { u32 size = 0; - u32 color_fmt, media_fmt; + u32 color_fmt, v4l2_fmt; u32 width, height; struct v4l2_format *f; @@ -216,22 +216,22 @@ static u32 msm_vidc_decoder_dpb_size_iris2(struct msm_vidc_inst *inst) height = f->fmt.pix_mp.height; if (color_fmt == MSM_VIDC_FMT_NV12) { - media_fmt = COLOR_FMT_NV12_UBWC; + v4l2_fmt = V4L2_PIX_FMT_VIDC_NV12C; HFI_NV12_UBWC_IL_CALC_BUF_SIZE_V2(size, width, height, - VENUS_Y_STRIDE(media_fmt, width), VENUS_Y_SCANLINES(media_fmt, height), - VENUS_UV_STRIDE(media_fmt, width), VENUS_UV_SCANLINES(media_fmt, height), - VENUS_Y_META_STRIDE(media_fmt, width), VENUS_Y_META_SCANLINES(media_fmt, + VIDEO_Y_STRIDE_BYTES(v4l2_fmt, width), VIDEO_Y_SCANLINES(v4l2_fmt, height), + VIDEO_UV_STRIDE_BYTES(v4l2_fmt, width), VIDEO_UV_SCANLINES(v4l2_fmt, height), + VIDEO_Y_META_STRIDE(v4l2_fmt, width), VIDEO_Y_META_SCANLINES(v4l2_fmt, height), - VENUS_UV_META_STRIDE(media_fmt, width), VENUS_UV_META_SCANLINES(media_fmt, + VIDEO_UV_META_STRIDE(v4l2_fmt, width), VIDEO_UV_META_SCANLINES(v4l2_fmt, height)); } else if (color_fmt == MSM_VIDC_FMT_P010) { - media_fmt = COLOR_FMT_P010_UBWC; + v4l2_fmt = V4L2_PIX_FMT_VIDC_TP10C; HFI_YUV420_TP10_UBWC_CALC_BUF_SIZE(size, - VENUS_Y_STRIDE(media_fmt, width), VENUS_Y_SCANLINES(media_fmt, height), - VENUS_UV_STRIDE(media_fmt, width), VENUS_UV_SCANLINES(media_fmt, height), - VENUS_Y_META_STRIDE(media_fmt, width), VENUS_Y_META_SCANLINES(media_fmt, + VIDEO_Y_STRIDE_BYTES(v4l2_fmt, width), VIDEO_Y_SCANLINES(v4l2_fmt, height), + VIDEO_UV_STRIDE_BYTES(v4l2_fmt, width), VIDEO_UV_SCANLINES(v4l2_fmt, height), + VIDEO_Y_META_STRIDE(v4l2_fmt, width), VIDEO_Y_META_SCANLINES(v4l2_fmt, height), - VENUS_UV_META_STRIDE(media_fmt, width), VENUS_UV_META_SCANLINES(media_fmt, + VIDEO_UV_META_STRIDE(v4l2_fmt, width), VIDEO_UV_META_SCANLINES(v4l2_fmt, height)); } diff --git a/driver/vidc/inc/msm_media_info.h b/driver/vidc/inc/msm_media_info.h index f9aa5b2a51..60d8e2416c 100644 --- a/driver/vidc/inc/msm_media_info.h +++ b/driver/vidc/inc/msm_media_info.h @@ -6,6 +6,9 @@ #ifndef __MSM_MEDIA_INFO_H__ #define __MSM_MEDIA_INFO_H__ +#include +#include + /* Width and Height should be multiple of 16 */ #define INTERLACE_WIDTH_MAX 1920 #define INTERLACE_HEIGHT_MAX 1920 @@ -21,726 +24,14 @@ #define MSM_MEDIA_ROUNDUP(__sz, __r) (((__sz) + ((__r) - 1)) / (__r)) #endif -enum color_fmts { - /* Venus NV12: - * 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 128 - * UV_Stride : Width aligned to 128 - * Y_Scanlines: Height aligned to 32 - * UV_Scanlines: Height/2 aligned to 16 - * Total size = align(Y_Stride * Y_Scanlines - * + UV_Stride * UV_Scanlines, 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 - * 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 - * 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 . . . . UV_Scanlines - * . . . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . . . V - * . . . . . . . . . . . . . . . . --> Padding & Buffer size alignment - * - * Y_Stride : Width aligned to 128 - * UV_Stride : Width aligned to 128 - * Y_Scanlines: Height aligned to 32 - * UV_Scanlines: Height/2 aligned to 16 - * Total size = align(Y_Stride * Y_Scanlines - * + UV_Stride * UV_Scanlines, 4096) - */ - COLOR_FMT_NV21, - /* - * The buffer can be of 2 types: - * (1) Venus NV12 UBWC Progressive - * (2) Venus NV12 UBWC Interlaced - * - * (1) Venus NV12 UBWC Progressive Buffer Format: - * Compressed Macro-tile format for NV12. - * Contains 4 planes in the following order - - * (A) Y_Meta_Plane - * (B) Y_UBWC_Plane - * (C) UV_Meta_Plane - * (D) UV_UBWC_Plane - * - * Y_Meta_Plane consists of meta information to decode compressed - * tile data in Y_UBWC_Plane. - * Y_UBWC_Plane consists of Y data in compressed macro-tile format. - * UBWC decoder block will use the Y_Meta_Plane data together with - * Y_UBWC_Plane data to produce loss-less uncompressed 8 bit Y samples. - * - * UV_Meta_Plane consists of meta information to decode compressed - * tile data in UV_UBWC_Plane. - * UV_UBWC_Plane consists of UV data in compressed macro-tile format. - * UBWC decoder block will use UV_Meta_Plane data together with - * UV_UBWC_Plane data to produce loss-less uncompressed 8 bit 2x2 - * subsampled color difference samples. - * - * Each tile in Y_UBWC_Plane/UV_UBWC_Plane is independently decodable - * and randomly accessible. There is no dependency between tiles. - * - * <----- Y_Meta_Stride ----> - * <-------- Width ------> - * M M M M M M M M M M M M . . ^ ^ - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . Height | - * M M M M M M M M M M M M . . | Meta_Y_Scanlines - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . V | - * . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k - * . . . . . . . . . . . . . . V - * <--Compressed tile Y 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* . . . . Height | - * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | Macro_tile_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* . . . . V | - * . . . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k - * . . . . . . . . . . . . . . . . V - * <----- UV_Meta_Stride ----> - * M M M M M M M M M M M M . . ^ - * M M M M M M M M M M M M . . | - * M M M M M M M M M M M M . . | - * M M M M M M M M M M M M . . M_UV_Scanlines - * . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . V - * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k - * <--Compressed tile UV Stride---> - * 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 aligned to 4k - * - * Y_Stride = align(Width, 128) - * UV_Stride = align(Width, 128) - * Y_Scanlines = align(Height, 32) - * UV_Scanlines = align(Height/2, 32) - * Y_UBWC_Plane_size = align(Y_Stride * Y_Scanlines, 4096) - * UV_UBWC_Plane_size = align(UV_Stride * UV_Scanlines, 4096) - * Y_Meta_Stride = align(roundup(Width, Y_TileWidth), 64) - * Y_Meta_Scanlines = align(roundup(Height, Y_TileHeight), 16) - * Y_Meta_Plane_size = align(Y_Meta_Stride * Y_Meta_Scanlines, 4096) - * UV_Meta_Stride = align(roundup(Width, UV_TileWidth), 64) - * UV_Meta_Scanlines = align(roundup(Height, UV_TileHeight), 16) - * UV_Meta_Plane_size = align(UV_Meta_Stride * UV_Meta_Scanlines, 4096) - * - * Total size = align( Y_UBWC_Plane_size + UV_UBWC_Plane_size + - * Y_Meta_Plane_size + UV_Meta_Plane_size, 4096) - * - * - * (2) Venus NV12 UBWC Interlaced Buffer Format: - * Compressed Macro-tile format for NV12 interlaced. - * Contains 8 planes in the following order - - * (A) Y_Meta_Top_Field_Plane - * (B) Y_UBWC_Top_Field_Plane - * (C) UV_Meta_Top_Field_Plane - * (D) UV_UBWC_Top_Field_Plane - * (E) Y_Meta_Bottom_Field_Plane - * (F) Y_UBWC_Bottom_Field_Plane - * (G) UV_Meta_Bottom_Field_Plane - * (H) UV_UBWC_Bottom_Field_Plane - * Y_Meta_Top_Field_Plane consists of meta information to decode - * compressed tile data for Y_UBWC_Top_Field_Plane. - * Y_UBWC_Top_Field_Plane consists of Y data in compressed macro-tile - * format for top field of an interlaced frame. - * UBWC decoder block will use the Y_Meta_Top_Field_Plane data together - * with Y_UBWC_Top_Field_Plane data to produce loss-less uncompressed - * 8 bit Y samples for top field of an interlaced frame. - * - * UV_Meta_Top_Field_Plane consists of meta information to decode - * compressed tile data in UV_UBWC_Top_Field_Plane. - * UV_UBWC_Top_Field_Plane consists of UV data in compressed macro-tile - * format for top field of an interlaced frame. - * UBWC decoder block will use UV_Meta_Top_Field_Plane data together - * with UV_UBWC_Top_Field_Plane data to produce loss-less uncompressed - * 8 bit subsampled color difference samples for top field of an - * interlaced frame. - * - * Each tile in Y_UBWC_Top_Field_Plane/UV_UBWC_Top_Field_Plane is - * independently decodable and randomly accessible. There is no - * dependency between tiles. - * - * Y_Meta_Bottom_Field_Plane consists of meta information to decode - * compressed tile data for Y_UBWC_Bottom_Field_Plane. - * Y_UBWC_Bottom_Field_Plane consists of Y data in compressed macro-tile - * format for bottom field of an interlaced frame. - * UBWC decoder block will use the Y_Meta_Bottom_Field_Plane data - * together with Y_UBWC_Bottom_Field_Plane data to produce loss-less - * uncompressed 8 bit Y samples for bottom field of an interlaced frame. - * - * UV_Meta_Bottom_Field_Plane consists of meta information to decode - * compressed tile data in UV_UBWC_Bottom_Field_Plane. - * UV_UBWC_Bottom_Field_Plane consists of UV data in compressed - * macro-tile format for bottom field of an interlaced frame. - * UBWC decoder block will use UV_Meta_Bottom_Field_Plane data together - * with UV_UBWC_Bottom_Field_Plane data to produce loss-less - * uncompressed 8 bit subsampled color difference samples for bottom - * field of an interlaced frame. - * - * Each tile in Y_UBWC_Bottom_Field_Plane/UV_UBWC_Bottom_Field_Plane is - * independently decodable and randomly accessible. There is no - * dependency between tiles. - * - * <-----Y_TF_Meta_Stride----> - * <-------- Width ------> - * M M M M M M M M M M M M . . ^ ^ - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . Half_height | - * M M M M M M M M M M M M . . | Meta_Y_TF_Scanlines - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . V | - * . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k - * . . . . . . . . . . . . . . V - * <-Compressed tile Y_TF 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* . . . . Half_height | - * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | Macro_tile_Y_TF_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* . . . . V | - * . . . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k - * . . . . . . . . . . . . . . . . V - * <----UV_TF_Meta_Stride----> - * M M M M M M M M M M M M . . ^ - * M M M M M M M M M M M M . . | - * M M M M M M M M M M M M . . | - * M M M M M M M M M M M M . . M_UV_TF_Scanlines - * . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . V - * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k - * <-Compressed tile UV_TF Stride-> - * 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_TF_Scanlines - * . . . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . . . V - * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k - * <-----Y_BF_Meta_Stride----> - * <-------- Width ------> - * M M M M M M M M M M M M . . ^ ^ - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . Half_height | - * M M M M M M M M M M M M . . | Meta_Y_BF_Scanlines - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . V | - * . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k - * . . . . . . . . . . . . . . V - * <-Compressed tile Y_BF 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* . . . . Half_height | - * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | Macro_tile_Y_BF_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* . . . . V | - * . . . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k - * . . . . . . . . . . . . . . . . V - * <----UV_BF_Meta_Stride----> - * M M M M M M M M M M M M . . ^ - * M M M M M M M M M M M M . . | - * M M M M M M M M M M M M . . | - * M M M M M M M M M M M M . . M_UV_BF_Scanlines - * . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . V - * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k - * <-Compressed tile UV_BF Stride-> - * 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_BF_Scanlines - * . . . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . . . V - * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k - * - * Half_height = (Height+1)>>1 - * Y_TF_Stride = align(Width, 128) - * UV_TF_Stride = align(Width, 128) - * Y_TF_Scanlines = align(Half_height, 32) - * UV_TF_Scanlines = align((Half_height+1)/2, 32) - * Y_UBWC_TF_Plane_size = align(Y_TF_Stride * Y_TF_Scanlines, 4096) - * UV_UBWC_TF_Plane_size = align(UV_TF_Stride * UV_TF_Scanlines, 4096) - * Y_TF_Meta_Stride = align(roundup(Width, Y_TileWidth), 64) - * Y_TF_Meta_Scanlines = align(roundup(Half_height, Y_TileHeight), 16) - * Y_TF_Meta_Plane_size = - * align(Y_TF_Meta_Stride * Y_TF_Meta_Scanlines, 4096) - * UV_TF_Meta_Stride = align(roundup(Width, UV_TileWidth), 64) - * UV_TF_Meta_Scanlines = align(roundup(Half_height, UV_TileHeight), 16) - * UV_TF_Meta_Plane_size = - * align(UV_TF_Meta_Stride * UV_TF_Meta_Scanlines, 4096) - * Y_BF_Stride = align(Width, 128) - * UV_BF_Stride = align(Width, 128) - * Y_BF_Scanlines = align(Half_height, 32) - * UV_BF_Scanlines = align((Half_height+1)/2, 32) - * Y_UBWC_BF_Plane_size = align(Y_BF_Stride * Y_BF_Scanlines, 4096) - * UV_UBWC_BF_Plane_size = align(UV_BF_Stride * UV_BF_Scanlines, 4096) - * Y_BF_Meta_Stride = align(roundup(Width, Y_TileWidth), 64) - * Y_BF_Meta_Scanlines = align(roundup(Half_height, Y_TileHeight), 16) - * Y_BF_Meta_Plane_size = - * align(Y_BF_Meta_Stride * Y_BF_Meta_Scanlines, 4096) - * UV_BF_Meta_Stride = align(roundup(Width, UV_TileWidth), 64) - * UV_BF_Meta_Scanlines = align(roundup(Half_height, UV_TileHeight), 16) - * UV_BF_Meta_Plane_size = - * align(UV_BF_Meta_Stride * UV_BF_Meta_Scanlines, 4096) - * - * Total size = align( Y_UBWC_TF_Plane_size + UV_UBWC_TF_Plane_size + - * Y_TF_Meta_Plane_size + UV_TF_Meta_Plane_size + - * Y_UBWC_BF_Plane_size + UV_UBWC_BF_Plane_size + - * Y_BF_Meta_Plane_size + UV_BF_Meta_Plane_size +, 4096) - */ - COLOR_FMT_NV12_UBWC, - /* Venus NV12 10-bit UBWC: - * Compressed Macro-tile format for NV12. - * Contains 4 planes in the following order - - * (A) Y_Meta_Plane - * (B) Y_UBWC_Plane - * (C) UV_Meta_Plane - * (D) UV_UBWC_Plane - * - * Y_Meta_Plane consists of meta information to decode compressed - * tile data in Y_UBWC_Plane. - * Y_UBWC_Plane consists of Y data in compressed macro-tile format. - * UBWC decoder block will use the Y_Meta_Plane data together with - * Y_UBWC_Plane data to produce loss-less uncompressed 10 bit Y samples. - * - * UV_Meta_Plane consists of meta information to decode compressed - * tile data in UV_UBWC_Plane. - * UV_UBWC_Plane consists of UV data in compressed macro-tile format. - * UBWC decoder block will use UV_Meta_Plane data together with - * UV_UBWC_Plane data to produce loss-less uncompressed 10 bit 2x2 - * subsampled color difference samples. - * - * Each tile in Y_UBWC_Plane/UV_UBWC_Plane is independently decodable - * and randomly accessible. There is no dependency between tiles. - * - * <----- Y_Meta_Stride -----> - * <-------- Width ------> - * M M M M M M M M M M M M . . ^ ^ - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . Height | - * M M M M M M M M M M M M . . | Meta_Y_Scanlines - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . V | - * . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k - * . . . . . . . . . . . . . . V - * <--Compressed tile Y 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* . . . . Height | - * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | Macro_tile_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* . . . . V | - * . . . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k - * . . . . . . . . . . . . . . . . V - * <----- UV_Meta_Stride ----> - * M M M M M M M M M M M M . . ^ - * M M M M M M M M M M M M . . | - * M M M M M M M M M M M M . . | - * M M M M M M M M M M M M . . M_UV_Scanlines - * . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . V - * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k - * <--Compressed tile UV Stride---> - * 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 aligned to 4k - * - * - * Y_Stride = align(Width * 4/3, 256) - * UV_Stride = align(Width * 4/3, 256) - * Y_Scanlines = align(Height, 32) - * UV_Scanlines = align(Height/2, 16) - * Y_UBWC_Plane_Size = align(Y_Stride * Y_Scanlines, 4096) - * UV_UBWC_Plane_Size = align(UV_Stride * UV_Scanlines, 4096) - * Y_Meta_Stride = align(roundup(Width, Y_TileWidth), 64) - * Y_Meta_Scanlines = align(roundup(Height, Y_TileHeight), 16) - * Y_Meta_Plane_size = align(Y_Meta_Stride * Y_Meta_Scanlines, 4096) - * UV_Meta_Stride = align(roundup(Width, UV_TileWidth), 64) - * UV_Meta_Scanlines = align(roundup(Height, UV_TileHeight), 16) - * UV_Meta_Plane_size = align(UV_Meta_Stride * UV_Meta_Scanlines, 4096) - * - * Total size = align(Y_UBWC_Plane_size + UV_UBWC_Plane_size + - * Y_Meta_Plane_size + UV_Meta_Plane_size, 4096) - */ - COLOR_FMT_NV12_BPP10_UBWC, - /* Venus RGBA8888 format: - * Contains 1 plane in the following order - - * (A) RGBA plane - * - * <-------- RGB_Stride --------> - * <------- Width -------> - * R R R R R R R R R R R R . . . . ^ ^ - * R R R R R R R R R R R R . . . . | | - * R R R R R R R R R R R R . . . . Height | - * R R R R R R R R R R R R . . . . | RGB_Scanlines - * R R R R R R R R R R R R . . . . | | - * R R R R R R R R R R R R . . . . | | - * R R R R R R R R R R R R . . . . | | - * R R R R R R R R R R R R . . . . V | - * . . . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . . . V - * - * RGB_Stride = align(Width * 4, 128) - * RGB_Scanlines = align(Height, 32) - * RGB_Plane_size = align(RGB_Stride * RGB_Scanlines, 4096) - * - * Total size = align(RGB_Plane_size , 4096) - */ - COLOR_FMT_RGBA8888, - /* Venus RGBA8888 UBWC format: - * Contains 2 planes in the following order - - * (A) Meta plane - * (B) RGBA plane - * - * <--- RGB_Meta_Stride ----> - * <-------- Width ------> - * M M M M M M M M M M M M . . ^ ^ - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . Height | - * M M M M M M M M M M M M . . | Meta_RGB_Scanlines - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . V | - * . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k - * . . . . . . . . . . . . . . V - * <-------- RGB_Stride --------> - * <------- Width -------> - * R R R R R R R R R R R R . . . . ^ ^ - * R R R R R R R R R R R R . . . . | | - * R R R R R R R R R R R R . . . . Height | - * R R R R R R R R R R R R . . . . | RGB_Scanlines - * R R R R R R R R R R R R . . . . | | - * R R R R R R R R R R R R . . . . | | - * R R R R R R R R R R R R . . . . | | - * R R R R R R R R R R R R . . . . V | - * . . . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k - * . . . . . . . . . . . . . . . . V - * - * RGB_Stride = align(Width * 4, 256) - * RGB_Scanlines = align(Height, 16) - * RGB_Plane_size = align(RGB_Stride * RGB_Scanlines, 4096) - * RGB_Meta_Stride = align(roundup(Width, RGB_TileWidth), 64) - * RGB_Meta_Scanline = align(roundup(Height, RGB_TileHeight), 16) - * RGB_Meta_Plane_size = align(RGB_Meta_Stride * - * RGB_Meta_Scanlines, 4096) - * - * Total size = align(RGB_Meta_Plane_size + RGB_Plane_size, 4096) - */ - COLOR_FMT_RGBA8888_UBWC, - /* Venus RGBA1010102 UBWC format: - * Contains 2 planes in the following order - - * (A) Meta plane - * (B) RGBA plane - * - * <--- RGB_Meta_Stride ----> - * <-------- Width ------> - * M M M M M M M M M M M M . . ^ ^ - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . Height | - * M M M M M M M M M M M M . . | Meta_RGB_Scanlines - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . V | - * . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k - * . . . . . . . . . . . . . . V - * <-------- RGB_Stride --------> - * <------- Width -------> - * R R R R R R R R R R R R . . . . ^ ^ - * R R R R R R R R R R R R . . . . | | - * R R R R R R R R R R R R . . . . Height | - * R R R R R R R R R R R R . . . . | RGB_Scanlines - * R R R R R R R R R R R R . . . . | | - * R R R R R R R R R R R R . . . . | | - * R R R R R R R R R R R R . . . . | | - * R R R R R R R R R R R R . . . . V | - * . . . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k - * . . . . . . . . . . . . . . . . V - * - * RGB_Stride = align(Width * 4, 256) - * RGB_Scanlines = align(Height, 16) - * RGB_Plane_size = align(RGB_Stride * RGB_Scanlines, 4096) - * RGB_Meta_Stride = align(roundup(Width, RGB_TileWidth), 64) - * RGB_Meta_Scanline = align(roundup(Height, RGB_TileHeight), 16) - * RGB_Meta_Plane_size = align(RGB_Meta_Stride * - * RGB_Meta_Scanlines, 4096) - * - * Total size = align(RGB_Meta_Plane_size + RGB_Plane_size, 4096) - */ - COLOR_FMT_RGBA1010102_UBWC, - /* Venus RGB565 UBWC format: - * Contains 2 planes in the following order - - * (A) Meta plane - * (B) RGB plane - * - * <--- RGB_Meta_Stride ----> - * <-------- Width ------> - * M M M M M M M M M M M M . . ^ ^ - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . Height | - * M M M M M M M M M M M M . . | Meta_RGB_Scanlines - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . V | - * . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k - * . . . . . . . . . . . . . . V - * <-------- RGB_Stride --------> - * <------- Width -------> - * R R R R R R R R R R R R . . . . ^ ^ - * R R R R R R R R R R R R . . . . | | - * R R R R R R R R R R R R . . . . Height | - * R R R R R R R R R R R R . . . . | RGB_Scanlines - * R R R R R R R R R R R R . . . . | | - * R R R R R R R R R R R R . . . . | | - * R R R R R R R R R R R R . . . . | | - * R R R R R R R R R R R R . . . . V | - * . . . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k - * . . . . . . . . . . . . . . . . V - * - * RGB_Stride = align(Width * 2, 256) - * RGB_Scanlines = align(Height, 16) - * RGB_Plane_size = align(RGB_Stride * RGB_Scanlines, 4096) - * RGB_Meta_Stride = align(roundup(Width, RGB_TileWidth), 64) - * RGB_Meta_Scanline = align(roundup(Height, RGB_TileHeight), 16) - * RGB_Meta_Plane_size = align(RGB_Meta_Stride * - * RGB_Meta_Scanlines, 4096) - * - * Total size = align(RGB_Meta_Plane_size + RGB_Plane_size, 4096) - */ - COLOR_FMT_RGB565_UBWC, - /* P010 UBWC: - * Compressed Macro-tile format for NV12. - * Contains 4 planes in the following order - - * (A) Y_Meta_Plane - * (B) Y_UBWC_Plane - * (C) UV_Meta_Plane - * (D) UV_UBWC_Plane - * - * Y_Meta_Plane consists of meta information to decode compressed - * tile data in Y_UBWC_Plane. - * Y_UBWC_Plane consists of Y data in compressed macro-tile format. - * UBWC decoder block will use the Y_Meta_Plane data together with - * Y_UBWC_Plane data to produce loss-less uncompressed 10 bit Y samples. - * - * UV_Meta_Plane consists of meta information to decode compressed - * tile data in UV_UBWC_Plane. - * UV_UBWC_Plane consists of UV data in compressed macro-tile format. - * UBWC decoder block will use UV_Meta_Plane data together with - * UV_UBWC_Plane data to produce loss-less uncompressed 10 bit 2x2 - * subsampled color difference samples. - * - * Each tile in Y_UBWC_Plane/UV_UBWC_Plane is independently decodable - * and randomly accessible. There is no dependency between tiles. - * - * <----- Y_Meta_Stride -----> - * <-------- Width ------> - * M M M M M M M M M M M M . . ^ ^ - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . Height | - * M M M M M M M M M M M M . . | Meta_Y_Scanlines - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . | | - * M M M M M M M M M M M M . . V | - * . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k - * . . . . . . . . . . . . . . V - * <--Compressed tile Y 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* . . . . Height | - * Y* Y* Y* Y* Y* Y* Y* Y* . . . . | Macro_tile_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* . . . . V | - * . . . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . . . -------> Buffer size aligned to 4k - * . . . . . . . . . . . . . . . . V - * <----- UV_Meta_Stride ----> - * M M M M M M M M M M M M . . ^ - * M M M M M M M M M M M M . . | - * M M M M M M M M M M M M . . | - * M M M M M M M M M M M M . . M_UV_Scanlines - * . . . . . . . . . . . . . . | - * . . . . . . . . . . . . . . V - * . . . . . . . . . . . . . . -------> Buffer size aligned to 4k - * <--Compressed tile UV Stride---> - * 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 aligned to 4k - * - * - * Y_Stride = align(Width * 2, 256) - * UV_Stride = align(Width * 2, 256) - * Y_Scanlines = align(Height, 16) - * UV_Scanlines = align(Height/2, 16) - * Y_UBWC_Plane_Size = align(Y_Stride * Y_Scanlines, 4096) - * UV_UBWC_Plane_Size = align(UV_Stride * UV_Scanlines, 4096) - * Y_Meta_Stride = align(roundup(Width, Y_TileWidth), 64) - * Y_Meta_Scanlines = align(roundup(Height, Y_TileHeight), 16) - * Y_Meta_Plane_size = align(Y_Meta_Stride * Y_Meta_Scanlines, 4096) - * UV_Meta_Stride = align(roundup(Width, UV_TileWidth), 64) - * UV_Meta_Scanlines = align(roundup(Height, UV_TileHeight), 16) - * UV_Meta_Plane_size = align(UV_Meta_Stride * UV_Meta_Scanlines, 4096) - * - * Total size = align(Y_UBWC_Plane_size + UV_UBWC_Plane_size + - * Y_Meta_Plane_size + UV_Meta_Plane_size, 4096) - */ - COLOR_FMT_P010_UBWC, - /* Venus P010: - * YUV 4:2:0 image with a plane of 10 bit Y samples followed - * by an interleaved U/V plane containing 10 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 * 2 aligned to 256 - * UV_Stride : Width * 2 aligned to 256 - * Y_Scanlines: Height aligned to 32 - * UV_Scanlines: Height/2 aligned to 16 - * Total size = align(Y_Stride * Y_Scanlines - * + UV_Stride * UV_Scanlines, 4096) - */ - COLOR_FMT_P010, -}; - /* * Function arguments: - * @color_fmt + * @v4l2_fmt * @width * Progressive: width * Interlaced: width */ -static inline unsigned int VENUS_Y_STRIDE(unsigned int color_fmt, +static inline unsigned int VIDEO_Y_STRIDE_BYTES(unsigned int v4l2_fmt, unsigned int width) { unsigned int alignment, stride = 0; @@ -748,20 +39,19 @@ static inline unsigned int VENUS_Y_STRIDE(unsigned int color_fmt, if (!width) goto invalid_input; - switch (color_fmt) { - case COLOR_FMT_NV12: - case COLOR_FMT_NV21: - case COLOR_FMT_NV12_UBWC: + switch (v4l2_fmt) { + case V4L2_PIX_FMT_NV12: + case V4L2_PIX_FMT_NV21: + case V4L2_PIX_FMT_VIDC_NV12C: alignment = 128; stride = MSM_MEDIA_ALIGN(width, alignment); break; - case COLOR_FMT_NV12_BPP10_UBWC: + case V4L2_PIX_FMT_VIDC_TP10C: alignment = 256; stride = MSM_MEDIA_ALIGN(width, 192); stride = MSM_MEDIA_ALIGN(stride * 4/3, alignment); break; - case COLOR_FMT_P010_UBWC: - case COLOR_FMT_P010: + case V4L2_PIX_FMT_VIDC_P010: alignment = 256; stride = MSM_MEDIA_ALIGN(width * 2, alignment); break; @@ -774,12 +64,12 @@ invalid_input: /* * Function arguments: - * @color_fmt + * @v4l2_fmt * @width * Progressive: width * Interlaced: width */ -static inline unsigned int VENUS_UV_STRIDE(unsigned int color_fmt, +static inline unsigned int VIDEO_Y_STRIDE_PIX(unsigned int v4l2_fmt, unsigned int width) { unsigned int alignment, stride = 0; @@ -787,20 +77,56 @@ static inline unsigned int VENUS_UV_STRIDE(unsigned int color_fmt, if (!width) goto invalid_input; - switch (color_fmt) { - case COLOR_FMT_NV21: - case COLOR_FMT_NV12: - case COLOR_FMT_NV12_UBWC: + switch (v4l2_fmt) { + case V4L2_PIX_FMT_NV12: + case V4L2_PIX_FMT_NV21: + case V4L2_PIX_FMT_VIDC_NV12C: alignment = 128; stride = MSM_MEDIA_ALIGN(width, alignment); break; - case COLOR_FMT_NV12_BPP10_UBWC: + case V4L2_PIX_FMT_VIDC_TP10C: + alignment = 192; + stride = MSM_MEDIA_ALIGN(width, alignment); + break; + case V4L2_PIX_FMT_VIDC_P010: + alignment = 256; + stride = MSM_MEDIA_ALIGN(width, alignment); + break; + default: + break; + } +invalid_input: + return stride; +} + +/* + * Function arguments: + * @v4l2_fmt + * @width + * Progressive: width + * Interlaced: width + */ +static inline unsigned int VIDEO_UV_STRIDE_BYTES(unsigned int v4l2_fmt, + unsigned int width) +{ + unsigned int alignment, stride = 0; + + if (!width) + goto invalid_input; + + switch (v4l2_fmt) { + case V4L2_PIX_FMT_NV21: + case V4L2_PIX_FMT_NV12: + case V4L2_PIX_FMT_VIDC_NV12C: + alignment = 128; + stride = MSM_MEDIA_ALIGN(width, alignment); + break; + case V4L2_PIX_FMT_VIDC_TP10C: alignment = 256; stride = MSM_MEDIA_ALIGN(width, 192); stride = MSM_MEDIA_ALIGN(stride * 4/3, alignment); break; - case COLOR_FMT_P010_UBWC: - case COLOR_FMT_P010: + case V4L2_PIX_FMT_VIDC_P010: alignment = 256; stride = MSM_MEDIA_ALIGN(width * 2, alignment); break; @@ -813,12 +139,49 @@ invalid_input: /* * Function arguments: - * @color_fmt + * @v4l2_fmt + * @width + * Progressive: width + * Interlaced: width + */ +static inline unsigned int VIDEO_UV_STRIDE_PIX(unsigned int v4l2_fmt, + unsigned int width) +{ + unsigned int alignment, stride = 0; + + if (!width) + goto invalid_input; + + switch (v4l2_fmt) { + case V4L2_PIX_FMT_NV21: + case V4L2_PIX_FMT_NV12: + case V4L2_PIX_FMT_VIDC_NV12C: + alignment = 128; + stride = MSM_MEDIA_ALIGN(width, alignment); + break; + case V4L2_PIX_FMT_VIDC_TP10C: + alignment = 192; + stride = MSM_MEDIA_ALIGN(width, alignment); + break; + case V4L2_PIX_FMT_VIDC_P010: + alignment = 256; + stride = MSM_MEDIA_ALIGN(width, alignment); + break; + default: + break; + } +invalid_input: + return stride; +} + +/* + * Function arguments: + * @v4l2_fmt * @height * Progressive: height * Interlaced: (height+1)>>1 */ -static inline unsigned int VENUS_Y_SCANLINES(unsigned int color_fmt, +static inline unsigned int VIDEO_Y_SCANLINES(unsigned int v4l2_fmt, unsigned int height) { unsigned int alignment, sclines = 0; @@ -826,15 +189,14 @@ static inline unsigned int VENUS_Y_SCANLINES(unsigned int color_fmt, if (!height) goto invalid_input; - switch (color_fmt) { - case COLOR_FMT_NV12: - case COLOR_FMT_NV21: - case COLOR_FMT_NV12_UBWC: - case COLOR_FMT_P010: + switch (v4l2_fmt) { + case V4L2_PIX_FMT_NV12: + case V4L2_PIX_FMT_NV21: + case V4L2_PIX_FMT_VIDC_NV12C: + case V4L2_PIX_FMT_VIDC_P010: alignment = 32; break; - case COLOR_FMT_NV12_BPP10_UBWC: - case COLOR_FMT_P010_UBWC: + case V4L2_PIX_FMT_VIDC_TP10C: alignment = 16; break; default: @@ -847,12 +209,12 @@ invalid_input: /* * Function arguments: - * @color_fmt + * @v4l2_fmt * @height * Progressive: height * Interlaced: (height+1)>>1 */ -static inline unsigned int VENUS_UV_SCANLINES(unsigned int color_fmt, +static inline unsigned int VIDEO_UV_SCANLINES(unsigned int v4l2_fmt, unsigned int height) { unsigned int alignment, sclines = 0; @@ -860,15 +222,14 @@ static inline unsigned int VENUS_UV_SCANLINES(unsigned int color_fmt, if (!height) goto invalid_input; - switch (color_fmt) { - case COLOR_FMT_NV21: - case COLOR_FMT_NV12: - case COLOR_FMT_NV12_BPP10_UBWC: - case COLOR_FMT_P010_UBWC: - case COLOR_FMT_P010: + switch (v4l2_fmt) { + case V4L2_PIX_FMT_NV21: + case V4L2_PIX_FMT_NV12: + case V4L2_PIX_FMT_VIDC_TP10C: + case V4L2_PIX_FMT_VIDC_P010: alignment = 16; break; - case COLOR_FMT_NV12_UBWC: + case V4L2_PIX_FMT_VIDC_NV12C: alignment = 32; break; default: @@ -883,12 +244,12 @@ invalid_input: /* * Function arguments: - * @color_fmt + * @v4l2_fmt * @width * Progressive: width * Interlaced: width */ -static inline unsigned int VENUS_Y_META_STRIDE(unsigned int color_fmt, +static inline unsigned int VIDEO_Y_META_STRIDE(unsigned int v4l2_fmt, unsigned int width) { int y_tile_width = 0, y_meta_stride = 0; @@ -896,12 +257,11 @@ static inline unsigned int VENUS_Y_META_STRIDE(unsigned int color_fmt, if (!width) goto invalid_input; - switch (color_fmt) { - case COLOR_FMT_NV12_UBWC: - case COLOR_FMT_P010_UBWC: + switch (v4l2_fmt) { + case V4L2_PIX_FMT_VIDC_NV12C: y_tile_width = 32; break; - case COLOR_FMT_NV12_BPP10_UBWC: + case V4L2_PIX_FMT_VIDC_TP10C: y_tile_width = 48; break; default: @@ -917,12 +277,12 @@ invalid_input: /* * Function arguments: - * @color_fmt + * @v4l2_fmt * @height * Progressive: height * Interlaced: (height+1)>>1 */ -static inline unsigned int VENUS_Y_META_SCANLINES(unsigned int color_fmt, +static inline unsigned int VIDEO_Y_META_SCANLINES(unsigned int v4l2_fmt, unsigned int height) { int y_tile_height = 0, y_meta_scanlines = 0; @@ -930,12 +290,11 @@ static inline unsigned int VENUS_Y_META_SCANLINES(unsigned int color_fmt, if (!height) goto invalid_input; - switch (color_fmt) { - case COLOR_FMT_NV12_UBWC: + switch (v4l2_fmt) { + case V4L2_PIX_FMT_VIDC_NV12C: y_tile_height = 8; break; - case COLOR_FMT_NV12_BPP10_UBWC: - case COLOR_FMT_P010_UBWC: + case V4L2_PIX_FMT_VIDC_TP10C: y_tile_height = 4; break; default: @@ -951,12 +310,12 @@ invalid_input: /* * Function arguments: - * @color_fmt + * @v4l2_fmt * @width * Progressive: width * Interlaced: width */ -static inline unsigned int VENUS_UV_META_STRIDE(unsigned int color_fmt, +static inline unsigned int VIDEO_UV_META_STRIDE(unsigned int v4l2_fmt, unsigned int width) { int uv_tile_width = 0, uv_meta_stride = 0; @@ -964,12 +323,11 @@ static inline unsigned int VENUS_UV_META_STRIDE(unsigned int color_fmt, if (!width) goto invalid_input; - switch (color_fmt) { - case COLOR_FMT_NV12_UBWC: - case COLOR_FMT_P010_UBWC: + switch (v4l2_fmt) { + case V4L2_PIX_FMT_VIDC_NV12C: uv_tile_width = 16; break; - case COLOR_FMT_NV12_BPP10_UBWC: + case V4L2_PIX_FMT_VIDC_TP10C: uv_tile_width = 24; break; default: @@ -985,12 +343,12 @@ invalid_input: /* * Function arguments: - * @color_fmt + * @v4l2_fmt * @height * Progressive: height * Interlaced: (height+1)>>1 */ -static inline unsigned int VENUS_UV_META_SCANLINES(unsigned int color_fmt, +static inline unsigned int VIDEO_UV_META_SCANLINES(unsigned int v4l2_fmt, unsigned int height) { int uv_tile_height = 0, uv_meta_scanlines = 0; @@ -998,12 +356,11 @@ static inline unsigned int VENUS_UV_META_SCANLINES(unsigned int color_fmt, if (!height) goto invalid_input; - switch (color_fmt) { - case COLOR_FMT_NV12_UBWC: + switch (v4l2_fmt) { + case V4L2_PIX_FMT_VIDC_NV12C: uv_tile_height = 8; break; - case COLOR_FMT_NV12_BPP10_UBWC: - case COLOR_FMT_P010_UBWC: + case V4L2_PIX_FMT_VIDC_TP10C: uv_tile_height = 4; break; default: @@ -1017,7 +374,7 @@ invalid_input: return uv_meta_scanlines; } -static inline unsigned int VENUS_RGB_STRIDE(unsigned int color_fmt, +static inline unsigned int VIDEO_RGB_STRIDE_BYTES(unsigned int v4l2_fmt, unsigned int width) { unsigned int alignment = 0, stride = 0, bpp = 4; @@ -1025,17 +382,9 @@ static inline unsigned int VENUS_RGB_STRIDE(unsigned int color_fmt, if (!width) goto invalid_input; - switch (color_fmt) { - case COLOR_FMT_RGBA8888: - alignment = 128; - break; - case COLOR_FMT_RGB565_UBWC: - alignment = 256; - bpp = 2; - break; - case COLOR_FMT_RGBA8888_UBWC: - case COLOR_FMT_RGBA1010102_UBWC: - alignment = 256; + switch (v4l2_fmt) { + case V4L2_PIX_FMT_VIDC_ARGB32C: + alignment = 64; break; default: goto invalid_input; @@ -1047,7 +396,15 @@ invalid_input: return stride; } -static inline unsigned int VENUS_RGB_SCANLINES(unsigned int color_fmt, +static inline unsigned int VIDEO_RGB_STRIDE_PIX(unsigned int v4l2_fmt, + unsigned int width) +{ + unsigned int bpp = 4; + + return VIDEO_RGB_STRIDE_BYTES(v4l2_fmt, width) / bpp; +} + +static inline unsigned int VIDEO_RGB_SCANLINES(unsigned int v4l2_fmt, unsigned int height) { unsigned int alignment = 0, scanlines = 0; @@ -1055,13 +412,8 @@ static inline unsigned int VENUS_RGB_SCANLINES(unsigned int color_fmt, if (!height) goto invalid_input; - switch (color_fmt) { - case COLOR_FMT_RGBA8888: - alignment = 32; - break; - case COLOR_FMT_RGBA8888_UBWC: - case COLOR_FMT_RGBA1010102_UBWC: - case COLOR_FMT_RGB565_UBWC: + switch (v4l2_fmt) { + case V4L2_PIX_FMT_VIDC_ARGB32C: alignment = 16; break; default: @@ -1074,7 +426,7 @@ invalid_input: return scanlines; } -static inline unsigned int VENUS_RGB_META_STRIDE(unsigned int color_fmt, +static inline unsigned int VIDEO_RGB_META_STRIDE(unsigned int v4l2_fmt, unsigned int width) { int rgb_tile_width = 0, rgb_meta_stride = 0; @@ -1082,10 +434,8 @@ static inline unsigned int VENUS_RGB_META_STRIDE(unsigned int color_fmt, if (!width) goto invalid_input; - switch (color_fmt) { - case COLOR_FMT_RGBA8888_UBWC: - case COLOR_FMT_RGBA1010102_UBWC: - case COLOR_FMT_RGB565_UBWC: + switch (v4l2_fmt) { + case V4L2_PIX_FMT_VIDC_ARGB32C: rgb_tile_width = 16; break; default: @@ -1099,7 +449,7 @@ invalid_input: return rgb_meta_stride; } -static inline unsigned int VENUS_RGB_META_SCANLINES(unsigned int color_fmt, +static inline unsigned int VIDEO_RGB_META_SCANLINES(unsigned int v4l2_fmt, unsigned int height) { int rgb_tile_height = 0, rgb_meta_scanlines = 0; @@ -1107,10 +457,8 @@ static inline unsigned int VENUS_RGB_META_SCANLINES(unsigned int color_fmt, if (!height) goto invalid_input; - switch (color_fmt) { - case COLOR_FMT_RGBA8888_UBWC: - case COLOR_FMT_RGBA1010102_UBWC: - case COLOR_FMT_RGB565_UBWC: + switch (v4l2_fmt) { + case V4L2_PIX_FMT_VIDC_ARGB32C: rgb_tile_height = 4; break; default: @@ -1124,18 +472,8 @@ invalid_input: return rgb_meta_scanlines; } -/* - * Function arguments: - * @color_fmt - * @width - * Progressive: width - * Interlaced: width - * @height - * Progressive: height - * Interlaced: height - */ -static inline unsigned int VENUS_BUFFER_SIZE(unsigned int color_fmt, - unsigned int width, unsigned int height) +static inline unsigned int VIDEO_RAW_BUFFER_SIZE(unsigned int v4l2_fmt, + unsigned int pix_width, unsigned int pix_height, unsigned int interlace) { unsigned int size = 0; unsigned int y_plane, uv_plane, y_stride, @@ -1145,159 +483,115 @@ static inline unsigned int VENUS_BUFFER_SIZE(unsigned int color_fmt, unsigned int uv_meta_stride = 0, uv_meta_scanlines = 0; unsigned int y_meta_plane = 0, uv_meta_plane = 0; unsigned int rgb_stride = 0, rgb_scanlines = 0; - unsigned int rgb_plane = 0, rgb_ubwc_plane = 0, rgb_meta_plane = 0; + unsigned int rgb_ubwc_plane = 0, rgb_meta_plane = 0; unsigned int rgb_meta_stride = 0, rgb_meta_scanlines = 0; - if (!width || !height) + if (!pix_width || !pix_height) goto invalid_input; - y_stride = VENUS_Y_STRIDE(color_fmt, width); - uv_stride = VENUS_UV_STRIDE(color_fmt, width); - y_sclines = VENUS_Y_SCANLINES(color_fmt, height); - uv_sclines = VENUS_UV_SCANLINES(color_fmt, height); - rgb_stride = VENUS_RGB_STRIDE(color_fmt, width); - rgb_scanlines = VENUS_RGB_SCANLINES(color_fmt, height); + y_stride = VIDEO_Y_STRIDE_BYTES(v4l2_fmt, pix_width); + uv_stride = VIDEO_UV_STRIDE_BYTES(v4l2_fmt, pix_width); + y_sclines = VIDEO_Y_SCANLINES(v4l2_fmt, pix_height); + uv_sclines = VIDEO_UV_SCANLINES(v4l2_fmt, pix_height); + rgb_stride = VIDEO_RGB_STRIDE_BYTES(v4l2_fmt, pix_width); + rgb_scanlines = VIDEO_RGB_SCANLINES(v4l2_fmt, pix_height); - switch (color_fmt) { - case COLOR_FMT_NV21: - case COLOR_FMT_NV12: - case COLOR_FMT_P010: + switch (v4l2_fmt) { + case V4L2_PIX_FMT_NV21: + case V4L2_PIX_FMT_NV12: + case V4L2_PIX_FMT_VIDC_P010: y_plane = y_stride * y_sclines; uv_plane = uv_stride * uv_sclines; size = y_plane + uv_plane; break; - case COLOR_FMT_NV12_UBWC: - y_meta_stride = VENUS_Y_META_STRIDE(color_fmt, width); - uv_meta_stride = VENUS_UV_META_STRIDE(color_fmt, width); - if (width <= INTERLACE_WIDTH_MAX && - height <= INTERLACE_HEIGHT_MAX && - (height * width) / 256 <= INTERLACE_MB_PER_FRAME_MAX) { - y_sclines = - VENUS_Y_SCANLINES(color_fmt, (height+1)>>1); - y_ubwc_plane = - MSM_MEDIA_ALIGN(y_stride * y_sclines, 4096); - uv_sclines = - VENUS_UV_SCANLINES(color_fmt, (height+1)>>1); - uv_ubwc_plane = - MSM_MEDIA_ALIGN(uv_stride * uv_sclines, 4096); + case V4L2_PIX_FMT_VIDC_NV12C: + y_meta_stride = VIDEO_Y_META_STRIDE(v4l2_fmt, pix_width); + uv_meta_stride = VIDEO_UV_META_STRIDE(v4l2_fmt, pix_width); + if (!interlace && v4l2_fmt == V4L2_PIX_FMT_VIDC_NV12C) { + y_ubwc_plane = MSM_MEDIA_ALIGN(y_stride * y_sclines, 4096); + uv_ubwc_plane = MSM_MEDIA_ALIGN(uv_stride * uv_sclines, 4096); y_meta_scanlines = - VENUS_Y_META_SCANLINES(color_fmt, (height+1)>>1); + VIDEO_Y_META_SCANLINES(v4l2_fmt, pix_height); y_meta_plane = MSM_MEDIA_ALIGN( y_meta_stride * y_meta_scanlines, 4096); uv_meta_scanlines = - VENUS_UV_META_SCANLINES(color_fmt, (height+1)>>1); - uv_meta_plane = MSM_MEDIA_ALIGN(uv_meta_stride * - uv_meta_scanlines, 4096); - size = (y_ubwc_plane + uv_ubwc_plane + y_meta_plane + - uv_meta_plane)*2; - } else { - y_sclines = VENUS_Y_SCANLINES(color_fmt, height); - y_ubwc_plane = - MSM_MEDIA_ALIGN(y_stride * y_sclines, 4096); - uv_sclines = VENUS_UV_SCANLINES(color_fmt, height); - uv_ubwc_plane = - MSM_MEDIA_ALIGN(uv_stride * uv_sclines, 4096); - y_meta_scanlines = - VENUS_Y_META_SCANLINES(color_fmt, height); - y_meta_plane = MSM_MEDIA_ALIGN( - y_meta_stride * y_meta_scanlines, 4096); - uv_meta_scanlines = - VENUS_UV_META_SCANLINES(color_fmt, height); + VIDEO_UV_META_SCANLINES(v4l2_fmt, pix_height); uv_meta_plane = MSM_MEDIA_ALIGN(uv_meta_stride * uv_meta_scanlines, 4096); size = (y_ubwc_plane + uv_ubwc_plane + y_meta_plane + uv_meta_plane); + size = MSM_MEDIA_ALIGN(size, 4096); + } else { + if (pix_width <= INTERLACE_WIDTH_MAX && + pix_height <= INTERLACE_HEIGHT_MAX && + (pix_height * pix_width) / 256 <= INTERLACE_MB_PER_FRAME_MAX) { + y_sclines = + VIDEO_Y_SCANLINES(v4l2_fmt, (pix_height+1)>>1); + y_ubwc_plane = + MSM_MEDIA_ALIGN(y_stride * y_sclines, 4096); + uv_sclines = + VIDEO_UV_SCANLINES(v4l2_fmt, (pix_height+1)>>1); + uv_ubwc_plane = + MSM_MEDIA_ALIGN(uv_stride * uv_sclines, 4096); + y_meta_scanlines = + VIDEO_Y_META_SCANLINES(v4l2_fmt, (pix_height+1)>>1); + y_meta_plane = MSM_MEDIA_ALIGN( + y_meta_stride * y_meta_scanlines, 4096); + uv_meta_scanlines = + VIDEO_UV_META_SCANLINES(v4l2_fmt, (pix_height+1)>>1); + uv_meta_plane = MSM_MEDIA_ALIGN(uv_meta_stride * + uv_meta_scanlines, 4096); + size = (y_ubwc_plane + uv_ubwc_plane + y_meta_plane + + uv_meta_plane)*2; + } else { + y_sclines = VIDEO_Y_SCANLINES(v4l2_fmt, pix_height); + y_ubwc_plane = + MSM_MEDIA_ALIGN(y_stride * y_sclines, 4096); + uv_sclines = VIDEO_UV_SCANLINES(v4l2_fmt, pix_height); + uv_ubwc_plane = + MSM_MEDIA_ALIGN(uv_stride * uv_sclines, 4096); + y_meta_scanlines = + VIDEO_Y_META_SCANLINES(v4l2_fmt, pix_height); + y_meta_plane = MSM_MEDIA_ALIGN( + y_meta_stride * y_meta_scanlines, 4096); + uv_meta_scanlines = + VIDEO_UV_META_SCANLINES(v4l2_fmt, pix_height); + uv_meta_plane = MSM_MEDIA_ALIGN(uv_meta_stride * + uv_meta_scanlines, 4096); + size = (y_ubwc_plane + uv_ubwc_plane + y_meta_plane + + uv_meta_plane); + } } break; - case COLOR_FMT_NV12_BPP10_UBWC: + case V4L2_PIX_FMT_VIDC_TP10C: y_ubwc_plane = MSM_MEDIA_ALIGN(y_stride * y_sclines, 4096); uv_ubwc_plane = MSM_MEDIA_ALIGN(uv_stride * uv_sclines, 4096); - y_meta_stride = VENUS_Y_META_STRIDE(color_fmt, width); - y_meta_scanlines = VENUS_Y_META_SCANLINES(color_fmt, height); + y_meta_stride = VIDEO_Y_META_STRIDE(v4l2_fmt, pix_width); + y_meta_scanlines = VIDEO_Y_META_SCANLINES(v4l2_fmt, pix_height); y_meta_plane = MSM_MEDIA_ALIGN( - y_meta_stride * y_meta_scanlines, 4096); - uv_meta_stride = VENUS_UV_META_STRIDE(color_fmt, width); - uv_meta_scanlines = VENUS_UV_META_SCANLINES(color_fmt, height); + y_meta_stride * y_meta_scanlines, 4096); + uv_meta_stride = VIDEO_UV_META_STRIDE(v4l2_fmt, pix_width); + uv_meta_scanlines = VIDEO_UV_META_SCANLINES(v4l2_fmt, pix_height); uv_meta_plane = MSM_MEDIA_ALIGN(uv_meta_stride * - uv_meta_scanlines, 4096); + uv_meta_scanlines, 4096); size = y_ubwc_plane + uv_ubwc_plane + y_meta_plane + uv_meta_plane; break; - case COLOR_FMT_P010_UBWC: - y_ubwc_plane = MSM_MEDIA_ALIGN(y_stride * y_sclines, 4096); - uv_ubwc_plane = MSM_MEDIA_ALIGN(uv_stride * uv_sclines, 4096); - y_meta_stride = VENUS_Y_META_STRIDE(color_fmt, width); - y_meta_scanlines = VENUS_Y_META_SCANLINES(color_fmt, height); - y_meta_plane = MSM_MEDIA_ALIGN( - y_meta_stride * y_meta_scanlines, 4096); - uv_meta_stride = VENUS_UV_META_STRIDE(color_fmt, width); - uv_meta_scanlines = VENUS_UV_META_SCANLINES(color_fmt, height); - uv_meta_plane = MSM_MEDIA_ALIGN(uv_meta_stride * - uv_meta_scanlines, 4096); - - size = y_ubwc_plane + uv_ubwc_plane + y_meta_plane + - uv_meta_plane; - break; - case COLOR_FMT_RGBA8888: - rgb_plane = MSM_MEDIA_ALIGN(rgb_stride * rgb_scanlines, 4096); - size = rgb_plane; - break; - case COLOR_FMT_RGBA8888_UBWC: - case COLOR_FMT_RGBA1010102_UBWC: - case COLOR_FMT_RGB565_UBWC: + case V4L2_PIX_FMT_VIDC_ARGB32C: rgb_ubwc_plane = MSM_MEDIA_ALIGN(rgb_stride * rgb_scanlines, - 4096); - rgb_meta_stride = VENUS_RGB_META_STRIDE(color_fmt, width); - rgb_meta_scanlines = VENUS_RGB_META_SCANLINES(color_fmt, - height); + 4096); + rgb_meta_stride = VIDEO_RGB_META_STRIDE(v4l2_fmt, pix_width); + rgb_meta_scanlines = VIDEO_RGB_META_SCANLINES(v4l2_fmt, + pix_height); rgb_meta_plane = MSM_MEDIA_ALIGN(rgb_meta_stride * - rgb_meta_scanlines, 4096); + rgb_meta_scanlines, 4096); size = rgb_ubwc_plane + rgb_meta_plane; break; default: break; } -invalid_input: - return MSM_MEDIA_ALIGN(size, 4096); -} -static inline unsigned int VENUS_BUFFER_SIZE_USED(unsigned int color_fmt, - unsigned int width, unsigned int height, unsigned int interlace) -{ - unsigned int size = 0; - unsigned int y_stride, uv_stride, y_sclines, uv_sclines; - unsigned int y_ubwc_plane = 0, uv_ubwc_plane = 0; - unsigned int y_meta_stride = 0, y_meta_scanlines = 0; - unsigned int uv_meta_stride = 0, uv_meta_scanlines = 0; - unsigned int y_meta_plane = 0, uv_meta_plane = 0; - - if (!width || !height) - goto invalid_input; - - if (!interlace && color_fmt == COLOR_FMT_NV12_UBWC) { - y_stride = VENUS_Y_STRIDE(color_fmt, width); - uv_stride = VENUS_UV_STRIDE(color_fmt, width); - y_sclines = VENUS_Y_SCANLINES(color_fmt, height); - y_ubwc_plane = MSM_MEDIA_ALIGN(y_stride * y_sclines, 4096); - uv_sclines = VENUS_UV_SCANLINES(color_fmt, height); - uv_ubwc_plane = MSM_MEDIA_ALIGN(uv_stride * uv_sclines, 4096); - y_meta_stride = VENUS_Y_META_STRIDE(color_fmt, width); - y_meta_scanlines = - VENUS_Y_META_SCANLINES(color_fmt, height); - y_meta_plane = MSM_MEDIA_ALIGN( - y_meta_stride * y_meta_scanlines, 4096); - uv_meta_stride = VENUS_UV_META_STRIDE(color_fmt, width); - uv_meta_scanlines = - VENUS_UV_META_SCANLINES(color_fmt, height); - uv_meta_plane = MSM_MEDIA_ALIGN(uv_meta_stride * - uv_meta_scanlines, 4096); - size = (y_ubwc_plane + uv_ubwc_plane + y_meta_plane + - uv_meta_plane); - size = MSM_MEDIA_ALIGN(size, 4096); - } else { - size = VENUS_BUFFER_SIZE(color_fmt, width, height); - } invalid_input: return size; } diff --git a/driver/vidc/inc/msm_vidc_driver.h b/driver/vidc/inc/msm_vidc_driver.h index 971991594f..35e242e1ee 100644 --- a/driver/vidc/inc/msm_vidc_driver.h +++ b/driver/vidc/inc/msm_vidc_driver.h @@ -191,8 +191,6 @@ enum msm_vidc_codec_type v4l2_codec_to_driver(u32 v4l2_codec, const char *func); u32 v4l2_codec_from_driver(enum msm_vidc_codec_type codec, const char *func); -u32 v4l2_colorformat_to_media(u32 v4l2_fmt, - const char *func); enum msm_vidc_colorformat_type v4l2_colorformat_to_driver(u32 colorformat, const char *func); u32 v4l2_colorformat_from_driver(enum msm_vidc_colorformat_type colorformat, diff --git a/driver/vidc/src/msm_vdec.c b/driver/vidc/src/msm_vdec.c index 5343f1d922..050557f8e9 100644 --- a/driver/vidc/src/msm_vdec.c +++ b/driver/vidc/src/msm_vdec.c @@ -1254,16 +1254,13 @@ static int msm_vdec_update_properties(struct msm_vidc_inst *inst) inst->fmts[INPUT_PORT].fmt.pix_mp.width = width; inst->fmts[INPUT_PORT].fmt.pix_mp.height = height; - inst->fmts[OUTPUT_PORT].fmt.pix_mp.width = VENUS_Y_STRIDE( - v4l2_colorformat_to_media( - inst->fmts[OUTPUT_PORT].fmt.pix_mp.pixelformat, __func__), - width); - inst->fmts[OUTPUT_PORT].fmt.pix_mp.height = VENUS_Y_SCANLINES( - v4l2_colorformat_to_media( - inst->fmts[OUTPUT_PORT].fmt.pix_mp.pixelformat, __func__), - height); + inst->fmts[OUTPUT_PORT].fmt.pix_mp.width = VIDEO_Y_STRIDE_PIX( + inst->fmts[OUTPUT_PORT].fmt.pix_mp.pixelformat, width); + inst->fmts[OUTPUT_PORT].fmt.pix_mp.height = VIDEO_Y_SCANLINES( + inst->fmts[OUTPUT_PORT].fmt.pix_mp.pixelformat, height); inst->fmts[OUTPUT_PORT].fmt.pix_mp.plane_fmt[0].bytesperline = - inst->fmts[OUTPUT_PORT].fmt.pix_mp.width; + VIDEO_Y_STRIDE_BYTES( + inst->fmts[OUTPUT_PORT].fmt.pix_mp.pixelformat, width); inst->fmts[OUTPUT_PORT].fmt.pix_mp.plane_fmt[0].sizeimage = call_session_op(core, buffer_size, inst, MSM_VIDC_BUF_OUTPUT); //inst->buffers.output.size = inst->fmts[OUTPUT_PORT].fmt.pix_mp.plane_fmt[0].sizeimage; @@ -1860,17 +1857,16 @@ int msm_vdec_s_fmt(struct msm_vidc_inst *inst, struct v4l2_format *f) f->fmt.pix_mp.width = fmt->fmt.pix_mp.width; } fmt->fmt.pix_mp.pixelformat = f->fmt.pix_mp.pixelformat; - fmt->fmt.pix_mp.width = VENUS_Y_STRIDE( - v4l2_colorformat_to_media( - fmt->fmt.pix_mp.pixelformat, __func__), - f->fmt.pix_mp.width); - fmt->fmt.pix_mp.height = VENUS_Y_SCANLINES( - v4l2_colorformat_to_media( - fmt->fmt.pix_mp.pixelformat, __func__), + fmt->fmt.pix_mp.width = VIDEO_Y_STRIDE_PIX( + fmt->fmt.pix_mp.pixelformat, f->fmt.pix_mp.width); + fmt->fmt.pix_mp.height = VIDEO_Y_SCANLINES( + fmt->fmt.pix_mp.pixelformat, f->fmt.pix_mp.height); fmt->fmt.pix_mp.num_planes = 1; fmt->fmt.pix_mp.plane_fmt[0].bytesperline = - fmt->fmt.pix_mp.width; + VIDEO_Y_STRIDE_BYTES( + inst->fmts[OUTPUT_PORT].fmt.pix_mp.pixelformat, + f->fmt.pix_mp.width); fmt->fmt.pix_mp.plane_fmt[0].sizeimage = call_session_op(core, buffer_size, inst, MSM_VIDC_BUF_OUTPUT); @@ -2238,14 +2234,15 @@ int msm_vdec_inst_init(struct msm_vidc_inst *inst) f = &inst->fmts[OUTPUT_PORT]; f->type = OUTPUT_MPLANE; f->fmt.pix_mp.pixelformat = V4L2_PIX_FMT_VIDC_NV12C; - f->fmt.pix_mp.width = VENUS_Y_STRIDE( - v4l2_colorformat_to_media(f->fmt.pix_mp.pixelformat, __func__), + f->fmt.pix_mp.width = VIDEO_Y_STRIDE_PIX(f->fmt.pix_mp.pixelformat, DEFAULT_WIDTH); - f->fmt.pix_mp.height = VENUS_Y_SCANLINES( - v4l2_colorformat_to_media(f->fmt.pix_mp.pixelformat, __func__), + f->fmt.pix_mp.height = VIDEO_Y_SCANLINES(f->fmt.pix_mp.pixelformat, DEFAULT_HEIGHT); f->fmt.pix_mp.num_planes = 1; - f->fmt.pix_mp.plane_fmt[0].bytesperline = f->fmt.pix_mp.width; + f->fmt.pix_mp.plane_fmt[0].bytesperline = + VIDEO_Y_STRIDE_BYTES( + inst->fmts[OUTPUT_PORT].fmt.pix_mp.pixelformat, + DEFAULT_WIDTH); f->fmt.pix_mp.plane_fmt[0].sizeimage = call_session_op(core, buffer_size, inst, MSM_VIDC_BUF_OUTPUT); f->fmt.pix_mp.colorspace = V4L2_COLORSPACE_DEFAULT; diff --git a/driver/vidc/src/msm_venc.c b/driver/vidc/src/msm_venc.c index ecd447dc85..27b774a7c2 100644 --- a/driver/vidc/src/msm_venc.c +++ b/driver/vidc/src/msm_venc.c @@ -1100,16 +1100,15 @@ static int msm_venc_s_fmt_input(struct msm_vidc_inst *inst, struct v4l2_format * fmt = &inst->fmts[INPUT_PORT]; fmt->type = INPUT_MPLANE; fmt->fmt.pix_mp.pixelformat = f->fmt.pix_mp.pixelformat; - fmt->fmt.pix_mp.width = VENUS_Y_STRIDE( - v4l2_colorformat_to_media(fmt->fmt.pix_mp.pixelformat, __func__), + fmt->fmt.pix_mp.width = VIDEO_Y_STRIDE_PIX(fmt->fmt.pix_mp.pixelformat, f->fmt.pix_mp.width); - fmt->fmt.pix_mp.height = VENUS_Y_SCANLINES( - v4l2_colorformat_to_media(fmt->fmt.pix_mp.pixelformat, __func__), + fmt->fmt.pix_mp.height = VIDEO_Y_SCANLINES(fmt->fmt.pix_mp.pixelformat, f->fmt.pix_mp.height); fmt->fmt.pix_mp.num_planes = 1; fmt->fmt.pix_mp.plane_fmt[0].bytesperline = - fmt->fmt.pix_mp.width; + VIDEO_Y_STRIDE_BYTES(fmt->fmt.pix_mp.pixelformat, + f->fmt.pix_mp.width); fmt->fmt.pix_mp.plane_fmt[0].sizeimage = call_session_op(core, buffer_size, inst, MSM_VIDC_BUF_INPUT); fmt->fmt.pix_mp.colorspace = f->fmt.pix_mp.colorspace; @@ -1775,14 +1774,14 @@ int msm_venc_inst_init(struct msm_vidc_inst *inst) f = &inst->fmts[INPUT_PORT]; f->type = INPUT_MPLANE; f->fmt.pix_mp.pixelformat = V4L2_PIX_FMT_VIDC_NV12C; - f->fmt.pix_mp.width = VENUS_Y_STRIDE( - v4l2_colorformat_to_media(f->fmt.pix_mp.pixelformat, __func__), + f->fmt.pix_mp.width = VIDEO_Y_STRIDE_PIX(f->fmt.pix_mp.pixelformat, DEFAULT_WIDTH); - f->fmt.pix_mp.height = VENUS_Y_SCANLINES( - v4l2_colorformat_to_media(f->fmt.pix_mp.pixelformat, __func__), + f->fmt.pix_mp.height = VIDEO_Y_SCANLINES(f->fmt.pix_mp.pixelformat, DEFAULT_HEIGHT); f->fmt.pix_mp.num_planes = 1; - f->fmt.pix_mp.plane_fmt[0].bytesperline = f->fmt.pix_mp.width; + f->fmt.pix_mp.plane_fmt[0].bytesperline = + VIDEO_Y_STRIDE_BYTES(f->fmt.pix_mp.pixelformat, + DEFAULT_WIDTH); f->fmt.pix_mp.plane_fmt[0].sizeimage = call_session_op(core, buffer_size, inst, MSM_VIDC_BUF_INPUT); f->fmt.pix_mp.colorspace = V4L2_COLORSPACE_DEFAULT; diff --git a/driver/vidc/src/msm_vidc_buffer.c b/driver/vidc/src/msm_vidc_buffer.c index 4f24367606..71804b7eae 100644 --- a/driver/vidc/src/msm_vidc_buffer.c +++ b/driver/vidc/src/msm_vidc_buffer.c @@ -264,13 +264,12 @@ u32 msm_vidc_decoder_input_size(struct msm_vidc_inst *inst) u32 msm_vidc_decoder_output_size(struct msm_vidc_inst *inst) { u32 size; - u32 format; struct v4l2_format *f; f = &inst->fmts[OUTPUT_PORT]; - format = v4l2_colorformat_to_media(f->fmt.pix_mp.pixelformat, __func__); - size = VENUS_BUFFER_SIZE(format, f->fmt.pix_mp.width, - f->fmt.pix_mp.height); + size = VIDEO_RAW_BUFFER_SIZE(f->fmt.pix_mp.pixelformat, + f->fmt.pix_mp.width, + f->fmt.pix_mp.height, true); return size; } @@ -287,12 +286,11 @@ u32 msm_vidc_decoder_output_meta_size(struct msm_vidc_inst *inst) u32 msm_vidc_encoder_input_size(struct msm_vidc_inst *inst) { u32 size; - u32 format; struct v4l2_format *f; f = &inst->fmts[INPUT_PORT]; - format = v4l2_colorformat_to_media(f->fmt.pix_mp.pixelformat, __func__); - size = VENUS_BUFFER_SIZE_USED(format, f->fmt.pix_mp.width, + size = VIDEO_RAW_BUFFER_SIZE(f->fmt.pix_mp.pixelformat, + f->fmt.pix_mp.width, f->fmt.pix_mp.height, false); return size; } diff --git a/driver/vidc/src/msm_vidc_driver.c b/driver/vidc/src/msm_vidc_driver.c index 967b0b6aca..96939f5e1a 100644 --- a/driver/vidc/src/msm_vidc_driver.c +++ b/driver/vidc/src/msm_vidc_driver.c @@ -223,28 +223,6 @@ u32 v4l2_colorformat_from_driver(enum msm_vidc_colorformat_type colorformat, return v4l2_colorformat; } -u32 v4l2_colorformat_to_media(u32 v4l2_fmt, const char *func) -{ - switch (v4l2_fmt) { - case V4L2_PIX_FMT_NV12: - return COLOR_FMT_NV12; - case V4L2_PIX_FMT_NV21: - return COLOR_FMT_NV21; - case V4L2_PIX_FMT_VIDC_P010: - return COLOR_FMT_P010; - case V4L2_PIX_FMT_VIDC_NV12C: - return COLOR_FMT_NV12_UBWC; - case V4L2_PIX_FMT_VIDC_TP10C: - return COLOR_FMT_NV12_BPP10_UBWC; - case V4L2_PIX_FMT_VIDC_ARGB32C: - return COLOR_FMT_RGBA8888_UBWC; - default: - d_vpr_e("%s: invalid v4l2 color fmt: %#x, set default (NV12)", - func, v4l2_fmt); - return COLOR_FMT_NV12; - } -} - int v4l2_type_to_driver_port(struct msm_vidc_inst *inst, u32 type, const char *func) {