summaryrefslogtreecommitdiffstats
path: root/patches/gst-plugins-bad-0.10.8/generic/bayer2rgb_fix_24bpp.diff
blob: 0c7ee9f155561ae94d37697f56843b64a5902caf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Subject: gst-plugins-bad bayer2rgb: Fix 24bpp rgb
From: Sascha Hauer <s.hauer@pengutronix.de>

The code calculates the wrong color offsets for 24bpp packed
pixel formats. Fix it. While at it, rename int offset to the
more  name 'mask'

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>

---
 gst/bayer/gstbayer2rgb.c |   26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)

Index: gst-plugins-bad-0.10.8/gst/bayer/gstbayer2rgb.c
===================================================================
--- gst-plugins-bad-0.10.8.orig/gst/bayer/gstbayer2rgb.c
+++ gst-plugins-bad-0.10.8/gst/bayer/gstbayer2rgb.c
@@ -231,19 +231,21 @@ gst_bayer2rgb_get_property (GObject * ob
 
 /* Routine to convert colormask value into relative byte offset */
 static int
-get_pix_offset (int offset)
+get_pix_offset (int mask, int bpp)
 {
-  switch (offset) {
+  int bpp32 = (bpp / 8) - 3;
+
+  switch (mask) {
     case 255:
-      return 3;
+      return 2 + bpp32;
     case 65280:
-      return 2;
+      return 1 + bpp32;
     case 16711680:
-      return 1;
+      return 0 + bpp32;
     case -16777216:
       return 0;
     default:
-      GST_ERROR ("Invalid color mask 0x%08x", offset);
+      GST_ERROR ("Invalid color mask 0x%08x", mask);
       return -1;
   }
 }
@@ -254,7 +256,7 @@ gst_bayer2rgb_set_caps (GstBaseTransform
 {
   GstBayer2RGB *filter = GST_BAYER2RGB (base);
   GstStructure *structure;
-  int val;
+  int val, bpp;
 
   GST_DEBUG ("in caps %" GST_PTR_FORMAT " out caps %" GST_PTR_FORMAT, incaps,
       outcaps);
@@ -267,14 +269,14 @@ gst_bayer2rgb_set_caps (GstBaseTransform
 
   /* To cater for different RGB formats, we need to set params for later */
   structure = gst_caps_get_structure (outcaps, 0);
-  gst_structure_get_int (structure, "bpp", &val);
-  filter->pixsize = val / 8;
+  gst_structure_get_int (structure, "bpp", &bpp);
+  filter->pixsize = bpp / 8;
   gst_structure_get_int (structure, "red_mask", &val);
-  filter->r_off = get_pix_offset (val);
+  filter->r_off = get_pix_offset (val, bpp);
   gst_structure_get_int (structure, "green_mask", &val);
-  filter->g_off = get_pix_offset (val);
+  filter->g_off = get_pix_offset (val, bpp);
   gst_structure_get_int (structure, "blue_mask", &val);
-  filter->b_off = get_pix_offset (val);
+  filter->b_off = get_pix_offset (val, bpp);
 
   return TRUE;
 }