Commit e07d46e7 authored by Helen Mae Koike Fornazier's avatar Helen Mae Koike Fornazier Committed by Mauro Carvalho Chehab

[media] tpg: Export the tpg code from vivid as a module

The test pattern generator will be used by other drivers as the virtual
media controller (vimc)
Signed-off-by: default avatarHelen Mae Koike Fornazier <helen.koike@collabora.co.uk>
Acked-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent d1e5d8bd
...@@ -19,3 +19,4 @@ config CYPRESS_FIRMWARE ...@@ -19,3 +19,4 @@ config CYPRESS_FIRMWARE
source "drivers/media/common/b2c2/Kconfig" source "drivers/media/common/b2c2/Kconfig"
source "drivers/media/common/saa7146/Kconfig" source "drivers/media/common/saa7146/Kconfig"
source "drivers/media/common/siano/Kconfig" source "drivers/media/common/siano/Kconfig"
source "drivers/media/common/v4l2-tpg/Kconfig"
obj-y += b2c2/ saa7146/ siano/ obj-y += b2c2/ saa7146/ siano/ v4l2-tpg/
obj-$(CONFIG_VIDEO_CX2341X) += cx2341x.o obj-$(CONFIG_VIDEO_CX2341X) += cx2341x.o
obj-$(CONFIG_VIDEO_TVEEPROM) += tveeprom.o obj-$(CONFIG_VIDEO_TVEEPROM) += tveeprom.o
obj-$(CONFIG_CYPRESS_FIRMWARE) += cypress_firmware.o obj-$(CONFIG_CYPRESS_FIRMWARE) += cypress_firmware.o
config VIDEO_V4L2_TPG
tristate
v4l2-tpg-objs := v4l2-tpg-core.o v4l2-tpg-colors.o
obj-$(CONFIG_VIDEO_V4L2_TPG) += v4l2-tpg.o
/* /*
* vivid-color.c - A table that converts colors to various colorspaces * v4l2-tpg-colors.c - A table that converts colors to various colorspaces
* *
* The test pattern generator uses the tpg_colors for its test patterns. * The test pattern generator uses the tpg_colors for its test patterns.
* For testing colorspaces the first 8 colors of that table need to be * For testing colorspaces the first 8 colors of that table need to be
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
* This source also contains the code used to generate the tpg_csc_colors * This source also contains the code used to generate the tpg_csc_colors
* table. Run the following command to compile it: * table. Run the following command to compile it:
* *
* gcc vivid-tpg-colors.c -DCOMPILE_APP -o gen-colors -lm * gcc v4l2-tpg-colors.c -DCOMPILE_APP -o gen-colors -lm
* *
* and run the utility. * and run the utility.
* *
...@@ -36,8 +36,7 @@ ...@@ -36,8 +36,7 @@
*/ */
#include <linux/videodev2.h> #include <linux/videodev2.h>
#include <media/v4l2-tpg-colors.h>
#include "vivid-tpg-colors.h"
/* sRGB colors with range [0-255] */ /* sRGB colors with range [0-255] */
const struct color tpg_colors[TPG_COLOR_MAX] = { const struct color tpg_colors[TPG_COLOR_MAX] = {
......
/* /*
* vivid-tpg.c - Test Pattern Generator * v4l2-tpg-core.c - Test Pattern Generator
* *
* Note: gen_twopix and tpg_gen_text are based on code from vivi.c. See the * Note: gen_twopix and tpg_gen_text are based on code from vivi.c. See the
* vivi.c source for the copyright information of those functions. * vivi.c source for the copyright information of those functions.
...@@ -20,7 +20,8 @@ ...@@ -20,7 +20,8 @@
* SOFTWARE. * SOFTWARE.
*/ */
#include "vivid-tpg.h" #include <linux/module.h>
#include <media/v4l2-tpg.h>
/* Must remain in sync with enum tpg_pattern */ /* Must remain in sync with enum tpg_pattern */
const char * const tpg_pattern_strings[] = { const char * const tpg_pattern_strings[] = {
...@@ -48,6 +49,7 @@ const char * const tpg_pattern_strings[] = { ...@@ -48,6 +49,7 @@ const char * const tpg_pattern_strings[] = {
"Noise", "Noise",
NULL NULL
}; };
EXPORT_SYMBOL_GPL(tpg_pattern_strings);
/* Must remain in sync with enum tpg_aspect */ /* Must remain in sync with enum tpg_aspect */
const char * const tpg_aspect_strings[] = { const char * const tpg_aspect_strings[] = {
...@@ -58,6 +60,7 @@ const char * const tpg_aspect_strings[] = { ...@@ -58,6 +60,7 @@ const char * const tpg_aspect_strings[] = {
"16x9 Anamorphic", "16x9 Anamorphic",
NULL NULL
}; };
EXPORT_SYMBOL_GPL(tpg_aspect_strings);
/* /*
* Sine table: sin[0] = 127 * sin(-180 degrees) * Sine table: sin[0] = 127 * sin(-180 degrees)
...@@ -93,6 +96,7 @@ void tpg_set_font(const u8 *f) ...@@ -93,6 +96,7 @@ void tpg_set_font(const u8 *f)
{ {
font8x16 = f; font8x16 = f;
} }
EXPORT_SYMBOL_GPL(tpg_set_font);
void tpg_init(struct tpg_data *tpg, unsigned w, unsigned h) void tpg_init(struct tpg_data *tpg, unsigned w, unsigned h)
{ {
...@@ -114,6 +118,7 @@ void tpg_init(struct tpg_data *tpg, unsigned w, unsigned h) ...@@ -114,6 +118,7 @@ void tpg_init(struct tpg_data *tpg, unsigned w, unsigned h)
tpg->colorspace = V4L2_COLORSPACE_SRGB; tpg->colorspace = V4L2_COLORSPACE_SRGB;
tpg->perc_fill = 100; tpg->perc_fill = 100;
} }
EXPORT_SYMBOL_GPL(tpg_init);
int tpg_alloc(struct tpg_data *tpg, unsigned max_w) int tpg_alloc(struct tpg_data *tpg, unsigned max_w)
{ {
...@@ -150,6 +155,7 @@ int tpg_alloc(struct tpg_data *tpg, unsigned max_w) ...@@ -150,6 +155,7 @@ int tpg_alloc(struct tpg_data *tpg, unsigned max_w)
} }
return 0; return 0;
} }
EXPORT_SYMBOL_GPL(tpg_alloc);
void tpg_free(struct tpg_data *tpg) void tpg_free(struct tpg_data *tpg)
{ {
...@@ -174,6 +180,7 @@ void tpg_free(struct tpg_data *tpg) ...@@ -174,6 +180,7 @@ void tpg_free(struct tpg_data *tpg)
tpg->random_line[plane] = NULL; tpg->random_line[plane] = NULL;
} }
} }
EXPORT_SYMBOL_GPL(tpg_free);
bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc) bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
{ {
...@@ -403,6 +410,7 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc) ...@@ -403,6 +410,7 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
} }
return true; return true;
} }
EXPORT_SYMBOL_GPL(tpg_s_fourcc);
void tpg_s_crop_compose(struct tpg_data *tpg, const struct v4l2_rect *crop, void tpg_s_crop_compose(struct tpg_data *tpg, const struct v4l2_rect *crop,
const struct v4l2_rect *compose) const struct v4l2_rect *compose)
...@@ -418,6 +426,7 @@ void tpg_s_crop_compose(struct tpg_data *tpg, const struct v4l2_rect *crop, ...@@ -418,6 +426,7 @@ void tpg_s_crop_compose(struct tpg_data *tpg, const struct v4l2_rect *crop,
tpg->scaled_width = 2; tpg->scaled_width = 2;
tpg->recalc_lines = true; tpg->recalc_lines = true;
} }
EXPORT_SYMBOL_GPL(tpg_s_crop_compose);
void tpg_reset_source(struct tpg_data *tpg, unsigned width, unsigned height, void tpg_reset_source(struct tpg_data *tpg, unsigned width, unsigned height,
u32 field) u32 field)
...@@ -442,6 +451,7 @@ void tpg_reset_source(struct tpg_data *tpg, unsigned width, unsigned height, ...@@ -442,6 +451,7 @@ void tpg_reset_source(struct tpg_data *tpg, unsigned width, unsigned height,
(2 * tpg->hdownsampling[p]); (2 * tpg->hdownsampling[p]);
tpg->recalc_square_border = true; tpg->recalc_square_border = true;
} }
EXPORT_SYMBOL_GPL(tpg_reset_source);
static enum tpg_color tpg_get_textbg_color(struct tpg_data *tpg) static enum tpg_color tpg_get_textbg_color(struct tpg_data *tpg)
{ {
...@@ -1250,6 +1260,7 @@ unsigned tpg_g_interleaved_plane(const struct tpg_data *tpg, unsigned buf_line) ...@@ -1250,6 +1260,7 @@ unsigned tpg_g_interleaved_plane(const struct tpg_data *tpg, unsigned buf_line)
return 0; return 0;
} }
} }
EXPORT_SYMBOL_GPL(tpg_g_interleaved_plane);
/* Return how many pattern lines are used by the current pattern. */ /* Return how many pattern lines are used by the current pattern. */
static unsigned tpg_get_pat_lines(const struct tpg_data *tpg) static unsigned tpg_get_pat_lines(const struct tpg_data *tpg)
...@@ -1725,6 +1736,7 @@ void tpg_gen_text(const struct tpg_data *tpg, u8 *basep[TPG_MAX_PLANES][2], ...@@ -1725,6 +1736,7 @@ void tpg_gen_text(const struct tpg_data *tpg, u8 *basep[TPG_MAX_PLANES][2],
} }
} }
} }
EXPORT_SYMBOL_GPL(tpg_gen_text);
void tpg_update_mv_step(struct tpg_data *tpg) void tpg_update_mv_step(struct tpg_data *tpg)
{ {
...@@ -1773,6 +1785,7 @@ void tpg_update_mv_step(struct tpg_data *tpg) ...@@ -1773,6 +1785,7 @@ void tpg_update_mv_step(struct tpg_data *tpg)
if (factor < 0) if (factor < 0)
tpg->mv_vert_step = tpg->src_height - tpg->mv_vert_step; tpg->mv_vert_step = tpg->src_height - tpg->mv_vert_step;
} }
EXPORT_SYMBOL_GPL(tpg_update_mv_step);
/* Map the line number relative to the crop rectangle to a frame line number */ /* Map the line number relative to the crop rectangle to a frame line number */
static unsigned tpg_calc_frameline(const struct tpg_data *tpg, unsigned src_y, static unsigned tpg_calc_frameline(const struct tpg_data *tpg, unsigned src_y,
...@@ -1862,6 +1875,7 @@ void tpg_calc_text_basep(struct tpg_data *tpg, ...@@ -1862,6 +1875,7 @@ void tpg_calc_text_basep(struct tpg_data *tpg,
if (p == 0 && tpg->interleaved) if (p == 0 && tpg->interleaved)
tpg_calc_text_basep(tpg, basep, 1, vbuf); tpg_calc_text_basep(tpg, basep, 1, vbuf);
} }
EXPORT_SYMBOL_GPL(tpg_calc_text_basep);
static int tpg_pattern_avg(const struct tpg_data *tpg, static int tpg_pattern_avg(const struct tpg_data *tpg,
unsigned pat1, unsigned pat2) unsigned pat1, unsigned pat2)
...@@ -1891,6 +1905,7 @@ void tpg_log_status(struct tpg_data *tpg) ...@@ -1891,6 +1905,7 @@ void tpg_log_status(struct tpg_data *tpg)
pr_info("tpg quantization: %d/%d\n", tpg->quantization, tpg->real_quantization); pr_info("tpg quantization: %d/%d\n", tpg->quantization, tpg->real_quantization);
pr_info("tpg RGB range: %d/%d\n", tpg->rgb_range, tpg->real_rgb_range); pr_info("tpg RGB range: %d/%d\n", tpg->rgb_range, tpg->real_rgb_range);
} }
EXPORT_SYMBOL_GPL(tpg_log_status);
/* /*
* This struct contains common parameters used by both the drawing of the * This struct contains common parameters used by both the drawing of the
...@@ -2296,6 +2311,7 @@ void tpg_fill_plane_buffer(struct tpg_data *tpg, v4l2_std_id std, ...@@ -2296,6 +2311,7 @@ void tpg_fill_plane_buffer(struct tpg_data *tpg, v4l2_std_id std,
vbuf + buf_line * params.stride); vbuf + buf_line * params.stride);
} }
} }
EXPORT_SYMBOL_GPL(tpg_fill_plane_buffer);
void tpg_fillbuffer(struct tpg_data *tpg, v4l2_std_id std, unsigned p, u8 *vbuf) void tpg_fillbuffer(struct tpg_data *tpg, v4l2_std_id std, unsigned p, u8 *vbuf)
{ {
...@@ -2312,3 +2328,8 @@ void tpg_fillbuffer(struct tpg_data *tpg, v4l2_std_id std, unsigned p, u8 *vbuf) ...@@ -2312,3 +2328,8 @@ void tpg_fillbuffer(struct tpg_data *tpg, v4l2_std_id std, unsigned p, u8 *vbuf)
offset += tpg_calc_plane_size(tpg, i); offset += tpg_calc_plane_size(tpg, i);
} }
} }
EXPORT_SYMBOL_GPL(tpg_fillbuffer);
MODULE_DESCRIPTION("V4L2 Test Pattern Generator");
MODULE_AUTHOR("Hans Verkuil");
MODULE_LICENSE("GPL");
...@@ -7,6 +7,7 @@ config VIDEO_VIVID ...@@ -7,6 +7,7 @@ config VIDEO_VIVID
select FB_CFB_COPYAREA select FB_CFB_COPYAREA
select FB_CFB_IMAGEBLIT select FB_CFB_IMAGEBLIT
select VIDEOBUF2_VMALLOC select VIDEOBUF2_VMALLOC
select VIDEO_V4L2_TPG
default n default n
---help--- ---help---
Enables a virtual video driver. This driver emulates a webcam, Enables a virtual video driver. This driver emulates a webcam,
......
...@@ -2,5 +2,5 @@ vivid-objs := vivid-core.o vivid-ctrls.o vivid-vid-common.o vivid-vbi-gen.o \ ...@@ -2,5 +2,5 @@ vivid-objs := vivid-core.o vivid-ctrls.o vivid-vid-common.o vivid-vbi-gen.o \
vivid-vid-cap.o vivid-vid-out.o vivid-kthread-cap.o vivid-kthread-out.o \ vivid-vid-cap.o vivid-vid-out.o vivid-kthread-cap.o vivid-kthread-out.o \
vivid-radio-rx.o vivid-radio-tx.o vivid-radio-common.o \ vivid-radio-rx.o vivid-radio-tx.o vivid-radio-common.o \
vivid-rds-gen.o vivid-sdr-cap.o vivid-vbi-cap.o vivid-vbi-out.o \ vivid-rds-gen.o vivid-sdr-cap.o vivid-vbi-cap.o vivid-vbi-out.o \
vivid-osd.o vivid-tpg.o vivid-tpg-colors.o vivid-osd.o
obj-$(CONFIG_VIDEO_VIVID) += vivid.o obj-$(CONFIG_VIDEO_VIVID) += vivid.o
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#include <media/v4l2-device.h> #include <media/v4l2-device.h>
#include <media/v4l2-dev.h> #include <media/v4l2-dev.h>
#include <media/v4l2-ctrls.h> #include <media/v4l2-ctrls.h>
#include "vivid-tpg.h" #include <media/v4l2-tpg.h>
#include "vivid-rds-gen.h" #include "vivid-rds-gen.h"
#include "vivid-vbi-gen.h" #include "vivid-vbi-gen.h"
......
/* /*
* vivid-color.h - Color definitions for the test pattern generator * v4l2-tpg-colors.h - Color definitions for the test pattern generator
* *
* Copyright 2014 Cisco Systems, Inc. and/or its affiliates. All rights reserved. * Copyright 2014 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
* *
...@@ -17,8 +17,8 @@ ...@@ -17,8 +17,8 @@
* SOFTWARE. * SOFTWARE.
*/ */
#ifndef _VIVID_COLORS_H_ #ifndef _V4L2_TPG_COLORS_H_
#define _VIVID_COLORS_H_ #define _V4L2_TPG_COLORS_H_
struct color { struct color {
unsigned char r, g, b; unsigned char r, g, b;
......
/* /*
* vivid-tpg.h - Test Pattern Generator * v4l2-tpg.h - Test Pattern Generator
* *
* Copyright 2014 Cisco Systems, Inc. and/or its affiliates. All rights reserved. * Copyright 2014 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
* *
...@@ -17,8 +17,8 @@ ...@@ -17,8 +17,8 @@
* SOFTWARE. * SOFTWARE.
*/ */
#ifndef _VIVID_TPG_H_ #ifndef _V4L2_TPG_H_
#define _VIVID_TPG_H_ #define _V4L2_TPG_H_
#include <linux/types.h> #include <linux/types.h>
#include <linux/errno.h> #include <linux/errno.h>
...@@ -26,8 +26,7 @@ ...@@ -26,8 +26,7 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/vmalloc.h> #include <linux/vmalloc.h>
#include <linux/videodev2.h> #include <linux/videodev2.h>
#include <media/v4l2-tpg-colors.h>
#include "vivid-tpg-colors.h"
enum tpg_pattern { enum tpg_pattern {
TPG_PAT_75_COLORBAR, TPG_PAT_75_COLORBAR,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment