annotate libmpcodecs/vf_eq2.c @ 8001:f02197bd1409

some docs about video filter api
author arpi
date Thu, 31 Oct 2002 14:25:41 +0000
parents b667328dc62e
children 610976c39408
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7517
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
1 /*
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
2 * vf_eq2.c
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
3 *
7595
b667328dc62e renamed to LUT-based sw. eq.
alex
parents: 7517
diff changeset
4 * LUT-based software equalizer (brightness, contrast, gamma)
7517
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
5 *
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
6 * Hampa Hug <hhug@student.ethz.ch>
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
7 *
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
8 */
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
9
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
10 #include <stdio.h>
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
11 #include <stdlib.h>
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
12 #include <string.h>
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
13 #include <math.h>
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
14
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
15 #include "../config.h"
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
16 #include "../mp_msg.h"
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
17
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
18 #include "img_format.h"
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
19 #include "mp_image.h"
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
20 #include "vf.h"
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
21
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
22
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
23 typedef struct vf_priv_s {
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
24 unsigned char *buf;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
25 int buf_w;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
26 int buf_h;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
27
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
28 double contrast;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
29 double bright;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
30 double gamma;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
31
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
32 unsigned char lut[256];
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
33 } vf_eq2_t;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
34
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
35
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
36 static
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
37 void create_lut (vf_eq2_t *eq2)
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
38 {
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
39 unsigned i;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
40 double c, b, g;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
41 double v;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
42
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
43 c = eq2->contrast;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
44 b = eq2->bright;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
45 g = eq2->gamma;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
46
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
47 if ((g < 0.001) || (g > 1000.0)) {
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
48 g = 1.0;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
49 }
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
50
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
51 fprintf (stderr, "vf_eq2: c=%.2f b=%.2f g=%.4f\n", c, b, g);
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
52
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
53 g = 1.0 / g;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
54
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
55 for (i = 0; i < 256; i++) {
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
56 v = (double) i / 255.0;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
57 v = c * (v - 0.5) + 0.5 + b;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
58
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
59 if (v <= 0.0) {
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
60 eq2->lut[i] = 0;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
61 }
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
62 else {
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
63 v = pow (v, g);
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
64
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
65 if (v >= 1.0) {
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
66 eq2->lut[i] = 255;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
67 }
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
68 else {
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
69 eq2->lut[i] = (unsigned char) (256.0 * v);
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
70 }
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
71 }
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
72 }
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
73 }
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
74
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
75 /* could inline this */
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
76 static
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
77 void process (unsigned char *dst, int dstride, unsigned char *src, int sstride,
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
78 int w, int h, unsigned char lut[256])
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
79 {
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
80 int i, j;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
81
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
82 for (j = 0; j < h; j++) {
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
83 for (i = 0; i < w; i++) {
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
84 *(dst++) = lut[*(src++)];
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
85 }
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
86
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
87 src += sstride - w;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
88 dst += dstride - w;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
89 }
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
90 }
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
91
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
92 static
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
93 int put_image (vf_instance_t *vf, mp_image_t *src)
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
94 {
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
95 mp_image_t *dst;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
96 vf_eq2_t *eq2;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
97
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
98 eq2 = vf->priv;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
99
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
100 if ((eq2->buf == NULL) || (eq2->buf_w != src->stride[0]) || (eq2->buf_h != src->h)) {
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
101 eq2->buf = (unsigned char *) realloc (eq2->buf, src->stride[0] * src->h);
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
102 eq2->buf_w = src->stride[0];
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
103 eq2->buf_h = src->h;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
104 }
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
105
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
106 dst = vf_get_image (vf->next, src->imgfmt, MP_IMGTYPE_EXPORT, 0, src->w, src->h);
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
107
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
108 dst->stride[0] = src->stride[0];
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
109 dst->stride[1] = src->stride[1];
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
110 dst->stride[2] = src->stride[2];
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
111 dst->planes[0] = vf->priv->buf;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
112 dst->planes[1] = src->planes[1];
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
113 dst->planes[2] = src->planes[2];
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
114
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
115 process (
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
116 dst->planes[0], dst->stride[0], src->planes[0], src->stride[0],
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
117 src->w, src->h, eq2->lut
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
118 );
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
119
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
120 return vf_next_put_image (vf, dst);
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
121 }
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
122
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
123 static
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
124 int control (vf_instance_t *vf, int request, void *data)
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
125 {
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
126 vf_equalizer_t *eq;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
127
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
128 switch (request) {
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
129 case VFCTRL_SET_EQUALIZER:
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
130 eq = (vf_equalizer_t *) data;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
131
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
132 if (strcmp (eq->item, "gamma") == 0) {
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
133 vf->priv->gamma = exp (log (8.0) * eq->value / 100.0);
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
134 create_lut (vf->priv);
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
135 return CONTROL_TRUE;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
136 }
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
137 else if (strcmp (eq->item, "contrast") == 0) {
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
138 vf->priv->contrast = (1.0 / 100.0) * (eq->value + 100);
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
139 create_lut (vf->priv);
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
140 return CONTROL_TRUE;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
141 }
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
142 else if (strcmp (eq->item, "brightness") == 0) {
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
143 vf->priv->bright = (1.0 / 100.0) * eq->value;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
144 create_lut (vf->priv);
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
145 return CONTROL_TRUE;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
146 }
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
147 break;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
148
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
149 case VFCTRL_GET_EQUALIZER:
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
150 eq = (vf_equalizer_t *) data;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
151 if (strcmp (eq->item, "gamma") == 0) {
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
152 eq->value = (int) (100.0 * log (vf->priv->gamma) / log (8.0));
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
153 return CONTROL_TRUE;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
154 }
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
155 else if (strcmp (eq->item, "contrast") == 0) {
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
156 eq->value = (int) (100.0 * vf->priv->contrast) - 100;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
157 return CONTROL_TRUE;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
158 }
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
159 else if (strcmp (eq->item, "brightness") == 0) {
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
160 eq->value = (int) (100.0 * vf->priv->bright);
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
161 return CONTROL_TRUE;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
162 }
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
163 break;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
164 }
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
165
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
166 return vf_next_control (vf, request, data);
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
167 }
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
168
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
169 static
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
170 int query_format (vf_instance_t *vf, unsigned fmt)
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
171 {
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
172 switch (fmt) {
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
173 case IMGFMT_YVU9:
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
174 case IMGFMT_IF09:
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
175 case IMGFMT_YV12:
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
176 case IMGFMT_I420:
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
177 case IMGFMT_IYUV:
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
178 case IMGFMT_CLPL:
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
179 case IMGFMT_Y800:
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
180 case IMGFMT_Y8:
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
181 case IMGFMT_NV12:
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
182 case IMGFMT_444P:
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
183 case IMGFMT_422P:
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
184 case IMGFMT_411P:
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
185 return vf_next_query_format (vf, fmt);
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
186 }
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
187
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
188 return 0;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
189 }
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
190
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
191 static
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
192 void uninit (vf_instance_t *vf)
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
193 {
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
194 if (vf->priv != NULL) {
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
195 free (vf->priv->buf);
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
196 free (vf->priv);
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
197 }
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
198 }
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
199
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
200 static
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
201 int open (vf_instance_t *vf, char *args)
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
202 {
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
203 vf_eq2_t *eq2;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
204
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
205 vf->control = control;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
206 vf->query_format = query_format;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
207 vf->put_image = put_image;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
208 vf->uninit = uninit;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
209
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
210 vf->priv = (vf_eq2_t *) malloc (sizeof (vf_eq2_t));
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
211 eq2 = vf->priv;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
212
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
213 eq2->buf = NULL;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
214 eq2->buf_w = 0;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
215 eq2->buf_h = 0;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
216
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
217 eq2->gamma = 1.0;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
218 eq2->contrast = 1.0;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
219 eq2->bright = 0.0;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
220
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
221 if (args != NULL) {
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
222 sscanf (args, "%lf:%lf:%lf", &eq2->gamma, &eq2->contrast, &eq2->bright);
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
223 }
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
224
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
225 create_lut (eq2);
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
226
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
227 return 1;
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
228 }
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
229
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
230 vf_info_t vf_info_eq2 = {
7595
b667328dc62e renamed to LUT-based sw. eq.
alex
parents: 7517
diff changeset
231 "LUT-based software equalizer",
7517
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
232 "eq2",
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
233 "Hampa Hug",
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
234 "",
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
235 &open
9d433771b6d0 -vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
diff changeset
236 };