Commit 35ccecef authored by Hans de Goede's avatar Hans de Goede Committed by Mauro Carvalho Chehab

[media] [REGRESSION] bt8xx: Fix too large height in cropcap

Since commit a1fd2877:
"[media] bttv-driver: fix two warnings"
cropcap.defrect.height and cropcap.bounds.height for the PAL entry are 32
resp 30 pixels too large, if a userspace app (ie xawtv) actually tries to use
the full advertised height, the resulting image is broken in ways only a
screenshot can describe.
The cause of this is the fix for this warning:
drivers/media/pci/bt8xx/bttv-driver.c:308:3: warning: initialized field overwritten [-Woverride-init]
In this chunk of the commit:
@@ -301,11 +301,10 @@ const struct bttv_tvnorm bttv_tvnorms[] = {
                        /* totalwidth */ 1135,
                        /* sqwidth */ 944,
                        /* vdelay */ 0x20,
-                       /* sheight */ 576,
-                       /* videostart0 */ 23)
                /* bt878 (and bt848?) can capture another
                   line below active video. */
-               .cropcap.bounds.height = (576 + 2) + 0x20 - 2,
+                       /* sheight */ (576 + 2) + 0x20 - 2,
+                       /* videostart0 */ 23)
        },{
                .v4l2_id        = V4L2_STD_NTSC_M | V4L2_STD_NTSC_M_KR,
                .name           = "NTSC",
Which replaces the overriding of cropcap.bounds.height initialization outside
of the CROPCAP macro (which also initializes it), with passing a
different sheight value to the CROPCAP macro.
There are 2 problems with this warning fix:
1) The sheight value is used twice in the CROPCAP macro, and the old code
   only changed one resulting value.
2) The old code increased the .cropcap.bounds.height value (and did not
   touch the .cropcap.defrect.height value at all) by 2, where as the fixed
   code increases it by 32, as the fixed code passes (576 + 2) + 0x20 - 2
   to the CROPCAP macro, but the + 0x20 - 2 is already done by the macro so
   now is done twice for .cropcap.bounds.height, and also is applied to
   .cropcap.defrect.height where it should not be applied at all.
This patch fixes this by adding an extraheight parameter to the CROPCAP entry
and using it for the PAL entry.

Cc: stable@kernel.org	# For Kernel 3.8
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 532ee00c
...@@ -250,17 +250,19 @@ static u8 SRAM_Table[][60] = ...@@ -250,17 +250,19 @@ static u8 SRAM_Table[][60] =
vdelay start of active video in 2 * field lines relative to vdelay start of active video in 2 * field lines relative to
trailing edge of /VRESET pulse (VDELAY register). trailing edge of /VRESET pulse (VDELAY register).
sheight height of active video in 2 * field lines. sheight height of active video in 2 * field lines.
extraheight Added to sheight for cropcap.bounds.height only
videostart0 ITU-R frame line number of the line corresponding videostart0 ITU-R frame line number of the line corresponding
to vdelay in the first field. */ to vdelay in the first field. */
#define CROPCAP(minhdelayx1, hdelayx1, swidth, totalwidth, sqwidth, \ #define CROPCAP(minhdelayx1, hdelayx1, swidth, totalwidth, sqwidth, \
vdelay, sheight, videostart0) \ vdelay, sheight, extraheight, videostart0) \
.cropcap.bounds.left = minhdelayx1, \ .cropcap.bounds.left = minhdelayx1, \
/* * 2 because vertically we count field lines times two, */ \ /* * 2 because vertically we count field lines times two, */ \
/* e.g. 23 * 2 to 23 * 2 + 576 in PAL-BGHI defrect. */ \ /* e.g. 23 * 2 to 23 * 2 + 576 in PAL-BGHI defrect. */ \
.cropcap.bounds.top = (videostart0) * 2 - (vdelay) + MIN_VDELAY, \ .cropcap.bounds.top = (videostart0) * 2 - (vdelay) + MIN_VDELAY, \
/* 4 is a safety margin at the end of the line. */ \ /* 4 is a safety margin at the end of the line. */ \
.cropcap.bounds.width = (totalwidth) - (minhdelayx1) - 4, \ .cropcap.bounds.width = (totalwidth) - (minhdelayx1) - 4, \
.cropcap.bounds.height = (sheight) + (vdelay) - MIN_VDELAY, \ .cropcap.bounds.height = (sheight) + (extraheight) + (vdelay) - \
MIN_VDELAY, \
.cropcap.defrect.left = hdelayx1, \ .cropcap.defrect.left = hdelayx1, \
.cropcap.defrect.top = (videostart0) * 2, \ .cropcap.defrect.top = (videostart0) * 2, \
.cropcap.defrect.width = swidth, \ .cropcap.defrect.width = swidth, \
...@@ -301,9 +303,10 @@ const struct bttv_tvnorm bttv_tvnorms[] = { ...@@ -301,9 +303,10 @@ const struct bttv_tvnorm bttv_tvnorms[] = {
/* totalwidth */ 1135, /* totalwidth */ 1135,
/* sqwidth */ 944, /* sqwidth */ 944,
/* vdelay */ 0x20, /* vdelay */ 0x20,
/* sheight */ 576,
/* bt878 (and bt848?) can capture another /* bt878 (and bt848?) can capture another
line below active video. */ line below active video. */
/* sheight */ (576 + 2) + 0x20 - 2, /* extraheight */ 2,
/* videostart0 */ 23) /* videostart0 */ 23)
},{ },{
.v4l2_id = V4L2_STD_NTSC_M | V4L2_STD_NTSC_M_KR, .v4l2_id = V4L2_STD_NTSC_M | V4L2_STD_NTSC_M_KR,
...@@ -330,6 +333,7 @@ const struct bttv_tvnorm bttv_tvnorms[] = { ...@@ -330,6 +333,7 @@ const struct bttv_tvnorm bttv_tvnorms[] = {
/* sqwidth */ 780, /* sqwidth */ 780,
/* vdelay */ 0x1a, /* vdelay */ 0x1a,
/* sheight */ 480, /* sheight */ 480,
/* extraheight */ 0,
/* videostart0 */ 23) /* videostart0 */ 23)
},{ },{
.v4l2_id = V4L2_STD_SECAM, .v4l2_id = V4L2_STD_SECAM,
...@@ -355,6 +359,7 @@ const struct bttv_tvnorm bttv_tvnorms[] = { ...@@ -355,6 +359,7 @@ const struct bttv_tvnorm bttv_tvnorms[] = {
/* sqwidth */ 944, /* sqwidth */ 944,
/* vdelay */ 0x20, /* vdelay */ 0x20,
/* sheight */ 576, /* sheight */ 576,
/* extraheight */ 0,
/* videostart0 */ 23) /* videostart0 */ 23)
},{ },{
.v4l2_id = V4L2_STD_PAL_Nc, .v4l2_id = V4L2_STD_PAL_Nc,
...@@ -380,6 +385,7 @@ const struct bttv_tvnorm bttv_tvnorms[] = { ...@@ -380,6 +385,7 @@ const struct bttv_tvnorm bttv_tvnorms[] = {
/* sqwidth */ 780, /* sqwidth */ 780,
/* vdelay */ 0x1a, /* vdelay */ 0x1a,
/* sheight */ 576, /* sheight */ 576,
/* extraheight */ 0,
/* videostart0 */ 23) /* videostart0 */ 23)
},{ },{
.v4l2_id = V4L2_STD_PAL_M, .v4l2_id = V4L2_STD_PAL_M,
...@@ -405,6 +411,7 @@ const struct bttv_tvnorm bttv_tvnorms[] = { ...@@ -405,6 +411,7 @@ const struct bttv_tvnorm bttv_tvnorms[] = {
/* sqwidth */ 780, /* sqwidth */ 780,
/* vdelay */ 0x1a, /* vdelay */ 0x1a,
/* sheight */ 480, /* sheight */ 480,
/* extraheight */ 0,
/* videostart0 */ 23) /* videostart0 */ 23)
},{ },{
.v4l2_id = V4L2_STD_PAL_N, .v4l2_id = V4L2_STD_PAL_N,
...@@ -430,6 +437,7 @@ const struct bttv_tvnorm bttv_tvnorms[] = { ...@@ -430,6 +437,7 @@ const struct bttv_tvnorm bttv_tvnorms[] = {
/* sqwidth */ 944, /* sqwidth */ 944,
/* vdelay */ 0x20, /* vdelay */ 0x20,
/* sheight */ 576, /* sheight */ 576,
/* extraheight */ 0,
/* videostart0 */ 23) /* videostart0 */ 23)
},{ },{
.v4l2_id = V4L2_STD_NTSC_M_JP, .v4l2_id = V4L2_STD_NTSC_M_JP,
...@@ -455,6 +463,7 @@ const struct bttv_tvnorm bttv_tvnorms[] = { ...@@ -455,6 +463,7 @@ const struct bttv_tvnorm bttv_tvnorms[] = {
/* sqwidth */ 780, /* sqwidth */ 780,
/* vdelay */ 0x16, /* vdelay */ 0x16,
/* sheight */ 480, /* sheight */ 480,
/* extraheight */ 0,
/* videostart0 */ 23) /* videostart0 */ 23)
},{ },{
/* that one hopefully works with the strange timing /* that one hopefully works with the strange timing
...@@ -484,6 +493,7 @@ const struct bttv_tvnorm bttv_tvnorms[] = { ...@@ -484,6 +493,7 @@ const struct bttv_tvnorm bttv_tvnorms[] = {
/* sqwidth */ 944, /* sqwidth */ 944,
/* vdelay */ 0x1a, /* vdelay */ 0x1a,
/* sheight */ 480, /* sheight */ 480,
/* extraheight */ 0,
/* videostart0 */ 23) /* videostart0 */ 23)
} }
}; };
......
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