v4l2-ctl: upgrade to the latest version of the test pattern generator
authorHans Verkuil <hans.verkuil@cisco.com>
Wed, 23 Jul 2014 15:27:37 +0000 (17:27 +0200)
committerHans Verkuil <hans.verkuil@cisco.com>
Wed, 23 Jul 2014 15:27:37 +0000 (17:27 +0200)
Very minor changes only, mostly a file rename, but this makes it easier
to keep things synchronized.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
utils/v4l2-ctl/Android.mk
utils/v4l2-ctl/Makefile.am
utils/v4l2-ctl/v4l2-ctl-streaming.cpp
utils/v4l2-ctl/vivi-colors.h [deleted file]
utils/v4l2-ctl/vivid-tpg-colors.c [moved from utils/v4l2-ctl/vivi-colors.c with 84% similarity]
utils/v4l2-ctl/vivid-tpg-colors.h [new file with mode: 0644]
utils/v4l2-ctl/vivid-tpg.c [moved from utils/v4l2-ctl/vivi-tpg.c with 95% similarity]
utils/v4l2-ctl/vivid-tpg.h [moved from utils/v4l2-ctl/vivi-tpg.h with 87% similarity]

index 7cb4867..bbd151a 100644 (file)
@@ -20,6 +20,6 @@ LOCAL_SRC_FILES := \
     v4l2-ctl-io.cpp v4l2-ctl-stds.cpp v4l2-ctl-vidcap.cpp v4l2-ctl-vidout.cpp \
     v4l2-ctl-overlay.cpp v4l2-ctl-vbi.cpp v4l2-ctl-selection.cpp v4l2-ctl-misc.cpp \
     v4l2-ctl-streaming.cpp v4l2-ctl-test-patterns.cpp v4l2-ctl-sdr.cpp \
-    v4l2-ctl-edid.cpp
+    v4l2-ctl-edid.cpp vivid-tpg-colors.c vivid-tpg.c
 
 include $(BUILD_EXECUTABLE)
index 060f418..d1da429 100644 (file)
@@ -8,7 +8,7 @@ ivtv_ctl_LDFLAGS = -lm
 v4l2_ctl_SOURCES = v4l2-ctl.cpp v4l2-ctl.h v4l2-ctl-common.cpp v4l2-ctl-tuner.cpp \
        v4l2-ctl-io.cpp v4l2-ctl-stds.cpp v4l2-ctl-vidcap.cpp v4l2-ctl-vidout.cpp \
        v4l2-ctl-overlay.cpp v4l2-ctl-vbi.cpp v4l2-ctl-selection.cpp v4l2-ctl-misc.cpp \
-       v4l2-ctl-streaming.cpp v4l2-ctl-sdr.cpp v4l2-ctl-edid.cpp vivi-colors.c vivi-tpg.c
+       v4l2-ctl-streaming.cpp v4l2-ctl-sdr.cpp v4l2-ctl-edid.cpp vivid-tpg-colors.c vivid-tpg.c
 v4l2_ctl_LDADD = ../../lib/libv4l2/libv4l2.la ../../lib/libv4lconvert/libv4lconvert.la
 
 EXTRA_DIST = Android.mk
index 24559e9..7523deb 100644 (file)
@@ -18,7 +18,7 @@
 #include "v4l2-ctl.h"
 
 extern "C" {
-#include "vivi-tpg.h"
+#include "vivid-tpg.h"
 }
 
 static unsigned stream_count;
@@ -725,7 +725,7 @@ static int do_setup_out_buffers(int fd, buffers &b, FILE *fin, bool qbuf)
                                        planes[j].m.userptr = (unsigned long)b.bufs[i][j];
                                }
                                if (can_fill)
-                                       tpg_fillbuffer(&tpg, NULL, stream_out_std, j, (u8 *)b.bufs[i][j]);
+                                       tpg_fillbuffer(&tpg, stream_out_std, j, (u8 *)b.bufs[i][j]);
                        }
                        if (fin)
                                fill_buffer_from_file(b, buf.index, fin);
@@ -757,7 +757,7 @@ static int do_setup_out_buffers(int fd, buffers &b, FILE *fin, bool qbuf)
                        }
                        if (!fin || !fill_buffer_from_file(b, buf.index, fin))
                                if (can_fill)
-                                       tpg_fillbuffer(&tpg, NULL, stream_out_std, 0, (u8 *)b.bufs[i][0]);
+                                       tpg_fillbuffer(&tpg, stream_out_std, 0, (u8 *)b.bufs[i][0]);
                }
                if (qbuf) {
                        if (V4L2_TYPE_IS_OUTPUT(buf.type))
@@ -966,9 +966,9 @@ static int do_handle_out(int fd, buffers &b, FILE *fin, struct v4l2_buffer *cap,
        if (!fin && stream_out_refresh) {
                if (b.is_mplane) {
                        for (unsigned j = 0; j < b.num_planes; j++)
-                               tpg_fillbuffer(&tpg, NULL, stream_out_std, j, (u8 *)b.bufs[buf.index][j]);
+                               tpg_fillbuffer(&tpg, stream_out_std, j, (u8 *)b.bufs[buf.index][j]);
                } else {
-                       tpg_fillbuffer(&tpg, NULL, stream_out_std, 0, (u8 *)b.bufs[buf.index][0]);
+                       tpg_fillbuffer(&tpg, stream_out_std, 0, (u8 *)b.bufs[buf.index][0]);
                }
        }
 
diff --git a/utils/v4l2-ctl/vivi-colors.h b/utils/v4l2-ctl/vivi-colors.h
deleted file mode 100644 (file)
index d9c21bd..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-#ifndef _VIVI_COLORS_H_
-#define _VIVI_COLORS_H_
-
-struct color {
-       unsigned char r, g, b;
-};
-
-struct color16 {
-       int r, g, b;
-};
-
-enum tpg_color {
-       TPG_COLOR_CSC_WHITE,
-       TPG_COLOR_CSC_YELLOW,
-       TPG_COLOR_CSC_CYAN,
-       TPG_COLOR_CSC_GREEN,
-       TPG_COLOR_CSC_MAGENTA,
-       TPG_COLOR_CSC_RED,
-       TPG_COLOR_CSC_BLUE,
-       TPG_COLOR_CSC_BLACK,
-       TPG_COLOR_75_YELLOW,
-       TPG_COLOR_75_CYAN,
-       TPG_COLOR_75_GREEN,
-       TPG_COLOR_75_MAGENTA,
-       TPG_COLOR_75_RED,
-       TPG_COLOR_75_BLUE,
-       TPG_COLOR_100_WHITE,
-       TPG_COLOR_100_YELLOW,
-       TPG_COLOR_100_CYAN,
-       TPG_COLOR_100_GREEN,
-       TPG_COLOR_100_MAGENTA,
-       TPG_COLOR_100_RED,
-       TPG_COLOR_100_BLUE,
-       TPG_COLOR_100_BLACK,
-       TPG_COLOR_TEXTFG,
-       TPG_COLOR_TEXTBG,
-       TPG_COLOR_RANDOM,
-       TPG_COLOR_RAMP,
-       TPG_COLOR_MAX = TPG_COLOR_RAMP + 256
-};
-
-extern const struct color tpg_colors[TPG_COLOR_MAX];
-extern const struct color16 tpg_csc_colors[V4L2_COLORSPACE_SRGB + 1][TPG_COLOR_CSC_BLACK + 1];
-
-#endif
similarity index 84%
rename from utils/v4l2-ctl/vivi-colors.c
rename to utils/v4l2-ctl/vivid-tpg-colors.c
index 984ccea..2adddc0 100644 (file)
@@ -1,6 +1,43 @@
+/*
+ * vivid-color.c - A table that converts colors to various colorspaces
+ *
+ * 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
+ * converted to their equivalent in the target colorspace.
+ *
+ * The tpg_csc_colors[] table is the result of that conversion and since
+ * it is precalculated the colorspace conversion is just a simple table
+ * lookup.
+ *
+ * This source also contains the code used to generate the tpg_csc_colors
+ * table. Run the following command to compile it:
+ *
+ *     gcc vivid-colors.c -DCOMPILE_APP -o gen-colors -lm
+ *
+ * and run the utility.
+ *
+ * Note that the converted colors are in the range 0x000-0xff0 (so times 16)
+ * in order to preserve precision.
+ *
+ * Copyright 2014 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
+ *
+ * This program is free software; you may redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
 #include <linux/videodev2.h>
 
-#include "vivi-colors.h"
+#include "vivid-tpg-colors.h"
 
 /* sRGB colors with range [0-255] */
 const struct color tpg_colors[TPG_COLOR_MAX] = {
diff --git a/utils/v4l2-ctl/vivid-tpg-colors.h b/utils/v4l2-ctl/vivid-tpg-colors.h
new file mode 100644 (file)
index 0000000..a2678fb
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * vivid-color.h - Color definitions for the test pattern generator
+ *
+ * Copyright 2014 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
+ *
+ * This program is free software; you may redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef _VIVID_COLORS_H_
+#define _VIVID_COLORS_H_
+
+struct color {
+       unsigned char r, g, b;
+};
+
+struct color16 {
+       int r, g, b;
+};
+
+enum tpg_color {
+       TPG_COLOR_CSC_WHITE,
+       TPG_COLOR_CSC_YELLOW,
+       TPG_COLOR_CSC_CYAN,
+       TPG_COLOR_CSC_GREEN,
+       TPG_COLOR_CSC_MAGENTA,
+       TPG_COLOR_CSC_RED,
+       TPG_COLOR_CSC_BLUE,
+       TPG_COLOR_CSC_BLACK,
+       TPG_COLOR_75_YELLOW,
+       TPG_COLOR_75_CYAN,
+       TPG_COLOR_75_GREEN,
+       TPG_COLOR_75_MAGENTA,
+       TPG_COLOR_75_RED,
+       TPG_COLOR_75_BLUE,
+       TPG_COLOR_100_WHITE,
+       TPG_COLOR_100_YELLOW,
+       TPG_COLOR_100_CYAN,
+       TPG_COLOR_100_GREEN,
+       TPG_COLOR_100_MAGENTA,
+       TPG_COLOR_100_RED,
+       TPG_COLOR_100_BLUE,
+       TPG_COLOR_100_BLACK,
+       TPG_COLOR_TEXTFG,
+       TPG_COLOR_TEXTBG,
+       TPG_COLOR_RANDOM,
+       TPG_COLOR_RAMP,
+       TPG_COLOR_MAX = TPG_COLOR_RAMP + 256
+};
+
+extern const struct color tpg_colors[TPG_COLOR_MAX];
+extern const struct color16 tpg_csc_colors[V4L2_COLORSPACE_SRGB + 1][TPG_COLOR_CSC_BLACK + 1];
+
+#endif
similarity index 95%
rename from utils/v4l2-ctl/vivi-tpg.c
rename to utils/v4l2-ctl/vivid-tpg.c
index fbf0eb9..41fc196 100644 (file)
@@ -1,4 +1,26 @@
-#include "vivi-tpg.h"
+/*
+ * vivid-tpg.c - Test Pattern Generator
+ *
+ * Note: gen_twopix and tpg_gen_text are based on code from vivi.c. See the
+ * vivid-core.c source for the copyright information of those functions.
+ *
+ * Copyright 2014 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
+ *
+ * This program is free software; you may redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#include "vivid-tpg.h"
 
 /* Must remain in sync with enum tpg_pattern */
 const char * const tpg_pattern_strings[] = {
@@ -231,8 +253,11 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
        return true;
 }
 
-void tpg_s_crop_compose(struct tpg_data *tpg)
+void tpg_s_crop_compose(struct tpg_data *tpg, const struct v4l2_rect *crop,
+               const struct v4l2_rect *compose)
 {
+       tpg->crop = *crop;
+       tpg->compose = *compose;
        tpg->scaled_width = (tpg->src_width * tpg->compose.width +
                                 tpg->crop.width - 1) / tpg->crop.width;
        tpg->scaled_width &= ~1;
@@ -538,6 +563,8 @@ static void precalculate_color(struct tpg_data *tpg, int k)
                        b >>= 7;
                        break;
                case V4L2_PIX_FMT_RGB555:
+               case V4L2_PIX_FMT_XRGB555:
+               case V4L2_PIX_FMT_ARGB555:
                case V4L2_PIX_FMT_RGB555X:
                        r >>= 7;
                        g >>= 7;
@@ -616,14 +643,13 @@ static void gen_twopix(struct tpg_data *tpg,
                buf[0][offset] = (r_y << 3) | (g_u >> 3);
                buf[0][offset + 1] = (g_u << 5) | b_v;
                break;
-       case V4L2_PIX_FMT_ARGB555:
-               buf[0][offset] = (g_u << 5) | b_v;
-               buf[0][offset + 1] = (alpha & 0x80) | (r_y << 2) | (g_u >> 3);
-               break;
        case V4L2_PIX_FMT_RGB555:
        case V4L2_PIX_FMT_XRGB555:
+               alpha = 0;
+               /* fall through */
+       case V4L2_PIX_FMT_ARGB555:
                buf[0][offset] = (g_u << 5) | b_v;
-               buf[0][offset + 1] = (r_y << 2) | (g_u >> 3);
+               buf[0][offset + 1] = (alpha & 0x80) | (r_y << 2) | (g_u >> 3);
                break;
        case V4L2_PIX_FMT_RGB555X:
                buf[0][offset] = (alpha & 0x80) | (r_y << 2) | (g_u >> 3);
@@ -639,31 +665,25 @@ static void gen_twopix(struct tpg_data *tpg,
                buf[0][offset + 1] = g_u;
                buf[0][offset + 2] = r_y;
                break;
-       case V4L2_PIX_FMT_ARGB32:
-               buf[0][offset] = alpha;
-               buf[0][offset + 1] = r_y;
-               buf[0][offset + 2] = g_u;
-               buf[0][offset + 3] = b_v;
-               break;
        case V4L2_PIX_FMT_RGB32:
        case V4L2_PIX_FMT_XRGB32:
-               buf[0][offset] = 0;
+               alpha = 0;
+               /* fall through */
+       case V4L2_PIX_FMT_ARGB32:
+               buf[0][offset] = alpha;
                buf[0][offset + 1] = r_y;
                buf[0][offset + 2] = g_u;
                buf[0][offset + 3] = b_v;
                break;
-       case V4L2_PIX_FMT_ABGR32:
-               buf[0][offset] = b_v;
-               buf[0][offset + 1] = g_u;
-               buf[0][offset + 2] = r_y;
-               buf[0][offset + 3] = alpha;
-               break;
        case V4L2_PIX_FMT_BGR32:
        case V4L2_PIX_FMT_XBGR32:
+               alpha = 0;
+               /* fall through */
+       case V4L2_PIX_FMT_ABGR32:
                buf[0][offset] = b_v;
                buf[0][offset + 1] = g_u;
                buf[0][offset + 2] = r_y;
-               buf[0][offset + 3] = 0;
+               buf[0][offset + 3] = alpha;
                break;
        }
 }
@@ -1118,8 +1138,20 @@ static unsigned tpg_calc_buffer_line(struct tpg_data *tpg, unsigned y,
        }
 }
 
-void tpg_fillbuffer(struct tpg_data *tpg, u8 *basep[TPG_MAX_PLANES][2],
-               v4l2_std_id std, unsigned p, u8 *vbuf)
+void tpg_calc_text_basep(const struct tpg_data *tpg,
+               u8 *basep[TPG_MAX_PLANES][2], unsigned p, u8 *vbuf)
+{
+       unsigned stride = tpg->bytesperline[p];
+
+       basep[p][0] = vbuf;
+       basep[p][1] = vbuf;
+       if (tpg->field == V4L2_FIELD_SEQ_TB)
+               basep[p][1] += tpg->buf_height * stride / 2;
+       else if (tpg->field == V4L2_FIELD_SEQ_BT)
+               basep[p][0] += tpg->buf_height * stride / 2;
+}
+
+void tpg_fillbuffer(struct tpg_data *tpg, v4l2_std_id std, unsigned p, u8 *vbuf)
 {
        bool is_tv = std;
        bool is_60hz = is_tv && (std & V4L2_STD_525_60);
@@ -1168,15 +1200,6 @@ void tpg_fillbuffer(struct tpg_data *tpg, u8 *basep[TPG_MAX_PLANES][2],
                wss_width = tpg->crop.width;
        wss_width = wss_width * tpg->scaled_width / tpg->src_width;
 
-       if (basep) {
-               basep[p][0] = vbuf;
-               basep[p][1] = vbuf;
-               if (tpg->field == V4L2_FIELD_SEQ_TB)
-                       basep[p][1] += tpg->buf_height * stride / 2;
-               else if (tpg->field == V4L2_FIELD_SEQ_BT)
-                       basep[p][0] += tpg->buf_height * stride / 2;
-       }
-
        vbuf += tpg->compose.left * twopixsize / 2;
        line_offset = tpg->crop.left * tpg->scaled_width / tpg->src_width;
        line_offset = (line_offset & ~1) * twopixsize / 2;
similarity index 87%
rename from utils/v4l2-ctl/vivi-tpg.h
rename to utils/v4l2-ctl/vivid-tpg.h
index b90b656..b105bbd 100644 (file)
@@ -1,5 +1,24 @@
-#ifndef _VIVI_TPG_H_
-#define _VIVI_TPG_H_
+/*
+ * vivid-tpg.h - Test Pattern Generator
+ *
+ * Copyright 2014 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
+ *
+ * This program is free software; you may redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef _VIVID_TPG_H_
+#define _VIVID_TPG_H_
 
 #include <linux/types.h>
 #include <linux/videodev2.h>
@@ -36,7 +55,7 @@ static inline void *vzalloc(unsigned long size)
        __val = __val < __min ? __min: __val;   \
        __val > __max ? __max: __val; })
 
-#include "vivi-colors.h"
+#include "vivid-tpg-colors.h"
 
 enum tpg_pattern {
        TPG_PAT_75_COLORBAR,
@@ -176,12 +195,14 @@ void tpg_reset_source(struct tpg_data *tpg, unsigned width, unsigned height,
                       u32 field);
 
 void tpg_set_font(const u8 *f);
-void tpg_gen_text(struct tpg_data *tpg, u8 *basep[TPG_MAX_PLANES][2],
-               int y, int x, char *text);
-void tpg_fillbuffer(struct tpg_data *tpg, u8 *basep[TPG_MAX_PLANES][2],
-               v4l2_std_id std, unsigned p, u8 *vbuf);
+void tpg_gen_text(struct tpg_data *tpg,
+               u8 *basep[TPG_MAX_PLANES][2], int y, int x, char *text);
+void tpg_calc_text_basep(const struct tpg_data *tpg,
+               u8 *basep[TPG_MAX_PLANES][2], unsigned p, u8 *vbuf);
+void tpg_fillbuffer(struct tpg_data *tpg, v4l2_std_id std, unsigned p, u8 *vbuf);
 bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc);
-void tpg_s_crop_compose(struct tpg_data *tpg);
+void tpg_s_crop_compose(struct tpg_data *tpg, const struct v4l2_rect *crop,
+               const struct v4l2_rect *compose);
 
 static inline void tpg_s_pattern(struct tpg_data *tpg, enum tpg_pattern pattern)
 {
@@ -316,16 +337,6 @@ static inline void tpg_s_buf_height(struct tpg_data *tpg, unsigned h)
        tpg->buf_height = h;
 }
 
-static inline struct v4l2_rect *tpg_g_crop(struct tpg_data *tpg)
-{
-       return &tpg->crop;
-}
-
-static inline struct v4l2_rect *tpg_g_compose(struct tpg_data *tpg)
-{
-       return &tpg->compose;
-}
-
 static inline void tpg_s_field(struct tpg_data *tpg, unsigned field)
 {
        tpg->field = field;
@@ -357,6 +368,11 @@ static inline void tpg_s_video_aspect(struct tpg_data *tpg,
        tpg->recalc_square_border = true;
 }
 
+static inline enum tpg_video_aspect tpg_g_video_aspect(const struct tpg_data *tpg)
+{
+       return tpg->vid_aspect;
+}
+
 static inline void tpg_s_pixel_aspect(struct tpg_data *tpg,
                                        enum tpg_pixel_aspect pix_aspect)
 {