[v8,2/3] media: tpg: Add function to return colors' order of test image
diff mbox series

Message ID 20200630195052.23880-3-kgupta@es.iitr.ac.in
State New
Headers show
Series
  • media: Add colors' order and other info over test image
Related show

Commit Message

Kaaira Gupta June 30, 2020, 7:50 p.m. UTC
Currently there is no method to know the correct order of the colors for
a test image generated by tpg. Write a function that returns a string of
colors' order given a tpg. It returns a NULL pointer in case of test
patterns which do not have a well defined colors' order. Hence add a
NULL check for text in tpg_gen_text().

Signed-off-by: Kaaira Gupta <kgupta@es.iitr.ac.in>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
---
 drivers/media/common/v4l2-tpg/v4l2-tpg-core.c | 30 +++++++++++++++++--
 include/media/tpg/v4l2-tpg.h                  |  1 +
 2 files changed, 29 insertions(+), 2 deletions(-)

Comments

Helen Koike June 30, 2020, 8:45 p.m. UTC | #1
On 6/30/20 4:50 PM, Kaaira Gupta wrote:
> Currently there is no method to know the correct order of the colors for
> a test image generated by tpg. Write a function that returns a string of
> colors' order given a tpg. It returns a NULL pointer in case of test
> patterns which do not have a well defined colors' order. Hence add a
> NULL check for text in tpg_gen_text().
> 
> Signed-off-by: Kaaira Gupta <kgupta@es.iitr.ac.in>
> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
> ---
>  drivers/media/common/v4l2-tpg/v4l2-tpg-core.c | 30 +++++++++++++++++--
>  include/media/tpg/v4l2-tpg.h                  |  1 +
>  2 files changed, 29 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c b/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
> index dde22a4cbd6c..c46ddd902675 100644
> --- a/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
> +++ b/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
> @@ -1959,12 +1959,14 @@ void tpg_gen_text(const struct tpg_data *tpg, u8 *basep[TPG_MAX_PLANES][2],
>  	unsigned step = V4L2_FIELD_HAS_T_OR_B(tpg->field) ? 2 : 1;
>  	unsigned div = step;
>  	unsigned first = 0;
> -	unsigned len = strlen(text);
> +	unsigned len;
>  	unsigned p;
>  
> -	if (font8x16 == NULL || basep == NULL)
> +	if (font8x16 == NULL || basep == NULL || text == NULL)
>  		return;
>  
> +	len = strlen(text);
> +

This part of the code fixes another problem a bit unrelated to the commit message, but I understand
it's required to safely chain tpg_g_color_order() with tpg_gen_text(), so I guess it's fine.

Reviewed-by: Helen Koike <helen.koike@collabora.com>

Thanks
Helen

>  	/* Checks if it is possible to show string */
>  	if (y + 16 >= tpg->compose.height || x + 8 >= tpg->compose.width)
>  		return;
> @@ -2006,6 +2008,30 @@ void tpg_gen_text(const struct tpg_data *tpg, u8 *basep[TPG_MAX_PLANES][2],
>  }
>  EXPORT_SYMBOL_GPL(tpg_gen_text);
>  
> +const char *tpg_g_color_order(const struct tpg_data *tpg)
> +{
> +	switch (tpg->pattern) {
> +	case TPG_PAT_75_COLORBAR:
> +	case TPG_PAT_100_COLORBAR:
> +	case TPG_PAT_CSC_COLORBAR:
> +	case TPG_PAT_100_HCOLORBAR:
> +		return "white, yellow, cyan, green, magenta, red, blue, black";
> +	case TPG_PAT_BLACK:
> +		return "Black";
> +	case TPG_PAT_WHITE:
> +		return "White";
> +	case TPG_PAT_RED:
> +		return "Red";
> +	case TPG_PAT_GREEN:
> +		return "Green";
> +	case TPG_PAT_BLUE:
> +		return "Blue";
> +	default:
> +		return NULL;
> +	}
> +}
> +EXPORT_SYMBOL_GPL(tpg_g_color_order);
> +
>  void tpg_update_mv_step(struct tpg_data *tpg)
>  {
>  	int factor = tpg->mv_hor_mode > TPG_MOVE_NONE ? -1 : 1;
> diff --git a/include/media/tpg/v4l2-tpg.h b/include/media/tpg/v4l2-tpg.h
> index 9749ed409856..0b0ddb87380e 100644
> --- a/include/media/tpg/v4l2-tpg.h
> +++ b/include/media/tpg/v4l2-tpg.h
> @@ -252,6 +252,7 @@ void tpg_fillbuffer(struct tpg_data *tpg, v4l2_std_id std,
>  bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc);
>  void tpg_s_crop_compose(struct tpg_data *tpg, const struct v4l2_rect *crop,
>  		const struct v4l2_rect *compose);
> +const char *tpg_g_color_order(const struct tpg_data *tpg);
>  
>  static inline void tpg_s_pattern(struct tpg_data *tpg, enum tpg_pattern pattern)
>  {
>
Helen Koike June 30, 2020, 8:45 p.m. UTC | #2
On 6/30/20 4:50 PM, Kaaira Gupta wrote:
> Currently there is no method to know the correct order of the colors for
> a test image generated by tpg. Write a function that returns a string of
> colors' order given a tpg. It returns a NULL pointer in case of test
> patterns which do not have a well defined colors' order. Hence add a
> NULL check for text in tpg_gen_text().
> 
> Signed-off-by: Kaaira Gupta <kgupta@es.iitr.ac.in>
> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
> ---
>  drivers/media/common/v4l2-tpg/v4l2-tpg-core.c | 30 +++++++++++++++++--
>  include/media/tpg/v4l2-tpg.h                  |  1 +
>  2 files changed, 29 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c b/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
> index dde22a4cbd6c..c46ddd902675 100644
> --- a/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
> +++ b/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
> @@ -1959,12 +1959,14 @@ void tpg_gen_text(const struct tpg_data *tpg, u8 *basep[TPG_MAX_PLANES][2],
>  	unsigned step = V4L2_FIELD_HAS_T_OR_B(tpg->field) ? 2 : 1;
>  	unsigned div = step;
>  	unsigned first = 0;
> -	unsigned len = strlen(text);
> +	unsigned len;
>  	unsigned p;
>  
> -	if (font8x16 == NULL || basep == NULL)
> +	if (font8x16 == NULL || basep == NULL || text == NULL)
>  		return;
>  
> +	len = strlen(text);
> +

This part of the code fixes another problem a bit unrelated to the commit message, but I understand
it's required to safely chain tpg_g_color_order() with tpg_gen_text(), so I guess it's fine.

Reviewed-by: Helen Koike <helen.koike@collabora.com>

Thanks
Helen

>  	/* Checks if it is possible to show string */
>  	if (y + 16 >= tpg->compose.height || x + 8 >= tpg->compose.width)
>  		return;
> @@ -2006,6 +2008,30 @@ void tpg_gen_text(const struct tpg_data *tpg, u8 *basep[TPG_MAX_PLANES][2],
>  }
>  EXPORT_SYMBOL_GPL(tpg_gen_text);
>  
> +const char *tpg_g_color_order(const struct tpg_data *tpg)
> +{
> +	switch (tpg->pattern) {
> +	case TPG_PAT_75_COLORBAR:
> +	case TPG_PAT_100_COLORBAR:
> +	case TPG_PAT_CSC_COLORBAR:
> +	case TPG_PAT_100_HCOLORBAR:
> +		return "white, yellow, cyan, green, magenta, red, blue, black";
> +	case TPG_PAT_BLACK:
> +		return "Black";
> +	case TPG_PAT_WHITE:
> +		return "White";
> +	case TPG_PAT_RED:
> +		return "Red";
> +	case TPG_PAT_GREEN:
> +		return "Green";
> +	case TPG_PAT_BLUE:
> +		return "Blue";
> +	default:
> +		return NULL;
> +	}
> +}
> +EXPORT_SYMBOL_GPL(tpg_g_color_order);
> +
>  void tpg_update_mv_step(struct tpg_data *tpg)
>  {
>  	int factor = tpg->mv_hor_mode > TPG_MOVE_NONE ? -1 : 1;
> diff --git a/include/media/tpg/v4l2-tpg.h b/include/media/tpg/v4l2-tpg.h
> index 9749ed409856..0b0ddb87380e 100644
> --- a/include/media/tpg/v4l2-tpg.h
> +++ b/include/media/tpg/v4l2-tpg.h
> @@ -252,6 +252,7 @@ void tpg_fillbuffer(struct tpg_data *tpg, v4l2_std_id std,
>  bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc);
>  void tpg_s_crop_compose(struct tpg_data *tpg, const struct v4l2_rect *crop,
>  		const struct v4l2_rect *compose);
> +const char *tpg_g_color_order(const struct tpg_data *tpg);
>  
>  static inline void tpg_s_pattern(struct tpg_data *tpg, enum tpg_pattern pattern)
>  {
>

Patch
diff mbox series

diff --git a/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c b/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
index dde22a4cbd6c..c46ddd902675 100644
--- a/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
+++ b/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
@@ -1959,12 +1959,14 @@  void tpg_gen_text(const struct tpg_data *tpg, u8 *basep[TPG_MAX_PLANES][2],
 	unsigned step = V4L2_FIELD_HAS_T_OR_B(tpg->field) ? 2 : 1;
 	unsigned div = step;
 	unsigned first = 0;
-	unsigned len = strlen(text);
+	unsigned len;
 	unsigned p;
 
-	if (font8x16 == NULL || basep == NULL)
+	if (font8x16 == NULL || basep == NULL || text == NULL)
 		return;
 
+	len = strlen(text);
+
 	/* Checks if it is possible to show string */
 	if (y + 16 >= tpg->compose.height || x + 8 >= tpg->compose.width)
 		return;
@@ -2006,6 +2008,30 @@  void tpg_gen_text(const struct tpg_data *tpg, u8 *basep[TPG_MAX_PLANES][2],
 }
 EXPORT_SYMBOL_GPL(tpg_gen_text);
 
+const char *tpg_g_color_order(const struct tpg_data *tpg)
+{
+	switch (tpg->pattern) {
+	case TPG_PAT_75_COLORBAR:
+	case TPG_PAT_100_COLORBAR:
+	case TPG_PAT_CSC_COLORBAR:
+	case TPG_PAT_100_HCOLORBAR:
+		return "white, yellow, cyan, green, magenta, red, blue, black";
+	case TPG_PAT_BLACK:
+		return "Black";
+	case TPG_PAT_WHITE:
+		return "White";
+	case TPG_PAT_RED:
+		return "Red";
+	case TPG_PAT_GREEN:
+		return "Green";
+	case TPG_PAT_BLUE:
+		return "Blue";
+	default:
+		return NULL;
+	}
+}
+EXPORT_SYMBOL_GPL(tpg_g_color_order);
+
 void tpg_update_mv_step(struct tpg_data *tpg)
 {
 	int factor = tpg->mv_hor_mode > TPG_MOVE_NONE ? -1 : 1;
diff --git a/include/media/tpg/v4l2-tpg.h b/include/media/tpg/v4l2-tpg.h
index 9749ed409856..0b0ddb87380e 100644
--- a/include/media/tpg/v4l2-tpg.h
+++ b/include/media/tpg/v4l2-tpg.h
@@ -252,6 +252,7 @@  void tpg_fillbuffer(struct tpg_data *tpg, v4l2_std_id std,
 bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc);
 void tpg_s_crop_compose(struct tpg_data *tpg, const struct v4l2_rect *crop,
 		const struct v4l2_rect *compose);
+const char *tpg_g_color_order(const struct tpg_data *tpg);
 
 static inline void tpg_s_pattern(struct tpg_data *tpg, enum tpg_pattern pattern)
 {