comparison src/http/modules/ngx_http_image_filter_module.c @ 4981:5889bc5f7a65

Image filter: fixed image_filter rotate inheritance. Configurations like location /i/ { image_filter resize 200 200; image_filter rotate 180; location /i/foo/ { image_filter resize 200 200; } } resulted in rotation incorrectly applied in the location /i/foo, without any way to clear it. Fix is to handle conf->angle/conf->acv consistently with other filter variables and do not try to inherit them if there are transformations defined for current location.
author Maxim Dounin <mdounin@mdounin.ru>
date Fri, 21 Dec 2012 15:07:45 +0000
parents 55ccb9f75668
children af155fc41deb
comparison
equal deleted inserted replaced
4980:f091722acab4 4981:5889bc5f7a65
1167 conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_image_filter_conf_t)); 1167 conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_image_filter_conf_t));
1168 if (conf == NULL) { 1168 if (conf == NULL) {
1169 return NULL; 1169 return NULL;
1170 } 1170 }
1171 1171
1172 /*
1173 * set by ngx_pcalloc():
1174 *
1175 * conf->width = 0;
1176 * conf->height = 0;
1177 * conf->angle = 0;
1178 * conf->wcv = NULL;
1179 * conf->hcv = NULL;
1180 * conf->acv = NULL;
1181 * conf->jqcv = NULL;
1182 * conf->shcv = NULL;
1183 */
1184
1172 conf->filter = NGX_CONF_UNSET_UINT; 1185 conf->filter = NGX_CONF_UNSET_UINT;
1173 conf->jpeg_quality = NGX_CONF_UNSET_UINT; 1186 conf->jpeg_quality = NGX_CONF_UNSET_UINT;
1174 conf->sharpen = NGX_CONF_UNSET_UINT; 1187 conf->sharpen = NGX_CONF_UNSET_UINT;
1175 conf->angle = NGX_CONF_UNSET_UINT;
1176 conf->transparency = NGX_CONF_UNSET; 1188 conf->transparency = NGX_CONF_UNSET;
1177 conf->buffer_size = NGX_CONF_UNSET_SIZE; 1189 conf->buffer_size = NGX_CONF_UNSET_SIZE;
1178 1190
1179 return conf; 1191 return conf;
1180 } 1192 }
1193 1205
1194 } else { 1206 } else {
1195 conf->filter = prev->filter; 1207 conf->filter = prev->filter;
1196 conf->width = prev->width; 1208 conf->width = prev->width;
1197 conf->height = prev->height; 1209 conf->height = prev->height;
1210 conf->angle = prev->angle;
1198 conf->wcv = prev->wcv; 1211 conf->wcv = prev->wcv;
1199 conf->hcv = prev->hcv; 1212 conf->hcv = prev->hcv;
1213 conf->acv = prev->acv;
1200 } 1214 }
1201 } 1215 }
1202 1216
1203 if (conf->jpeg_quality == NGX_CONF_UNSET_UINT) { 1217 if (conf->jpeg_quality == NGX_CONF_UNSET_UINT) {
1204 1218
1213 if (conf->sharpen == NGX_CONF_UNSET_UINT) { 1227 if (conf->sharpen == NGX_CONF_UNSET_UINT) {
1214 ngx_conf_merge_uint_value(conf->sharpen, prev->sharpen, 0); 1228 ngx_conf_merge_uint_value(conf->sharpen, prev->sharpen, 0);
1215 1229
1216 if (conf->shcv == NULL) { 1230 if (conf->shcv == NULL) {
1217 conf->shcv = prev->shcv; 1231 conf->shcv = prev->shcv;
1218 }
1219 }
1220
1221 if (conf->angle == NGX_CONF_UNSET_UINT) {
1222 ngx_conf_merge_uint_value(conf->angle, prev->angle, 0);
1223
1224 if (conf->acv == NULL) {
1225 conf->acv = prev->acv;
1226 } 1232 }
1227 } 1233 }
1228 1234
1229 ngx_conf_merge_value(conf->transparency, prev->transparency, 1); 1235 ngx_conf_merge_value(conf->transparency, prev->transparency, 1);
1230 1236