diff options
author | Keir Mierle <mierle@gmail.com> | 2011-12-04 16:58:31 +0400 |
---|---|---|
committer | Keir Mierle <mierle@gmail.com> | 2011-12-04 16:58:31 +0400 |
commit | d00bb6dd56e3e729426eceedf252ceddc4882a0d (patch) | |
tree | b338b5c352c1227da5578b00e96f60d5fe6b196c /source/blender/blenkernel/intern/tracking.c | |
parent | 4e0b4de0bf15c73a37950a16e232687f8649198a (diff) |
Add a toggle button to display motion tracker previews in grayscale.
Diffstat (limited to 'source/blender/blenkernel/intern/tracking.c')
-rw-r--r-- | source/blender/blenkernel/intern/tracking.c | 62 |
1 files changed, 27 insertions, 35 deletions
diff --git a/source/blender/blenkernel/intern/tracking.c b/source/blender/blenkernel/intern/tracking.c index 361a6d50961..80cd95d8a64 100644 --- a/source/blender/blenkernel/intern/tracking.c +++ b/source/blender/blenkernel/intern/tracking.c @@ -865,12 +865,12 @@ void BKE_tracking_context_free(MovieTrackingContext *context) /* zap channels from the imbuf that are disabled by the user. this can lead to * better tracks sometimes. however, instead of simply zeroing the channels * out, do a partial grayscale conversion so the display is better. */ -static void disable_imbuf_channels(ImBuf *ibuf, MovieTrackingTrack *track) +static void disable_imbuf_channels(ImBuf *ibuf, MovieTrackingTrack *track, int grayscale) { int x, y; float scale; - if((track->flag&(TRACK_DISABLE_RED|TRACK_DISABLE_GREEN|TRACK_DISABLE_BLUE))==0) + if((track->flag&(TRACK_DISABLE_RED|TRACK_DISABLE_GREEN|TRACK_DISABLE_BLUE))==0 && !grayscale) return; /* If only some components are selected, it's important to rescale the result @@ -888,15 +888,27 @@ static void disable_imbuf_channels(ImBuf *ibuf, MovieTrackingTrack *track) float r = (track->flag&TRACK_DISABLE_RED) ? 0.0f : rrgbf[0]; float g = (track->flag&TRACK_DISABLE_GREEN) ? 0.0f : rrgbf[1]; float b = (track->flag&TRACK_DISABLE_BLUE) ? 0.0f : rrgbf[2]; - float gray = (0.2126f*r + 0.7152f*g + 0.0722f*b) / scale; - rrgbf[0] = rrgbf[1] = rrgbf[2] = gray; + if (grayscale) { + float gray = (0.2126f*r + 0.7152f*g + 0.0722f*b) / scale; + rrgbf[0] = rrgbf[1] = rrgbf[2] = gray; + } else { + rrgbf[0] = r; + rrgbf[1] = g; + rrgbf[2] = b; + } } else { char *rrgb= (char*)ibuf->rect + pixel*4; char r = (track->flag&TRACK_DISABLE_RED) ? 0 : rrgb[0]; char g = (track->flag&TRACK_DISABLE_GREEN) ? 0 : rrgb[1]; char b = (track->flag&TRACK_DISABLE_BLUE) ? 0 : rrgb[2]; - float gray = (0.2126f*r + 0.7152f*g + 0.0722f*b) / scale; - rrgb[0] = rrgb[1] = rrgb[2] = gray; + if (grayscale) { + float gray = (0.2126f*r + 0.7152f*g + 0.0722f*b) / scale; + rrgb[0] = rrgb[1] = rrgb[2] = gray; + } else { + rrgb[0] = r; + rrgb[1] = g; + rrgb[2] = b; + } } } } @@ -938,7 +950,9 @@ static ImBuf *get_area_imbuf(ImBuf *ibuf, MovieTrackingTrack *track, MovieTracki origin[1]= y1-margin; } - disable_imbuf_channels(tmpibuf, track); + if (track->flag & TRACK_PREVIEW_GRAYSCALE) { + disable_imbuf_channels(tmpibuf, track, 1 /* grayscale */); + } return tmpibuf; } @@ -967,7 +981,7 @@ static float *get_search_floatbuf(ImBuf *ibuf, MovieTrackingTrack *track, MovieT height= (track->search_max[1]-track->search_min[1])*ibuf->y; tmpibuf= BKE_tracking_get_search_imbuf(ibuf, track, marker, 0, 0, pos, origin); - disable_imbuf_channels(tmpibuf, track); + disable_imbuf_channels(tmpibuf, track, 0 /* don't grayscale */); *width_r= width; *height_r= height; @@ -979,22 +993,11 @@ static float *get_search_floatbuf(ImBuf *ibuf, MovieTrackingTrack *track, MovieT if(tmpibuf->rect_float) { float *rrgbf= tmpibuf->rect_float + pixel*4; - - if ((track->flag&(TRACK_DISABLE_RED|TRACK_DISABLE_GREEN|TRACK_DISABLE_BLUE))==0) - *fp= 0.2126*rrgbf[0] + 0.7152*rrgbf[1] + 0.0722*rrgbf[2]; - else - /* disable_imbuf_channels already did the grayscale conversion */ - *fp= *rrgbf; + *fp= 0.2126*rrgbf[0] + 0.7152*rrgbf[1] + 0.0722*rrgbf[2]; } else { unsigned char *rrgb= (unsigned char*)tmpibuf->rect + pixel*4; - - if ((track->flag&(TRACK_DISABLE_RED|TRACK_DISABLE_GREEN|TRACK_DISABLE_BLUE))==0) - *fp= (0.2126*rrgb[0] + 0.7152*rrgb[1] + 0.0722*rrgb[2])/255.0f; - else - /* disable_imbuf_channels already did the grayscale conversion */ - *fp= *rrgb / 255.0; + *fp= (0.2126*rrgb[0] + 0.7152*rrgb[1] + 0.0722*rrgb[2])/255.0f; } - fp++; } } @@ -1016,22 +1019,11 @@ static unsigned char *get_ucharbuf(ImBuf *ibuf, int flags) if(ibuf->rect_float) { float *rrgbf= ibuf->rect_float + pixel*4; - - if ((flags&(TRACK_DISABLE_RED|TRACK_DISABLE_GREEN|TRACK_DISABLE_BLUE))==0) - *cp= FTOCHAR(0.2126f*rrgbf[0] + 0.7152f*rrgbf[1] + 0.0722f*rrgbf[2]); - else - /* disable_imbuf_channels already did the grayscale conversion */ - *cp= FTOCHAR(*rrgbf); + *cp= FTOCHAR(0.2126f*rrgbf[0] + 0.7152f*rrgbf[1] + 0.0722f*rrgbf[2]); } else { unsigned char *rrgb= (unsigned char*)ibuf->rect + pixel*4; - - if ((flags&(TRACK_DISABLE_RED|TRACK_DISABLE_GREEN|TRACK_DISABLE_BLUE))==0) - *cp= 0.2126f*rrgb[0] + 0.7152f*rrgb[1] + 0.0722f*rrgb[2]; - else - /* disable_imbuf_channels already did the grayscale conversion */ - *cp= *rrgb; + *cp= 0.2126f*rrgb[0] + 0.7152f*rrgb[1] + 0.0722f*rrgb[2]; } - cp++; } } @@ -1046,7 +1038,7 @@ static unsigned char *get_search_bytebuf(ImBuf *ibuf, MovieTrackingTrack *track, unsigned char *pixels; tmpibuf= BKE_tracking_get_search_imbuf(ibuf, track, marker, 0, 0, pos, origin); - disable_imbuf_channels(tmpibuf, track); + disable_imbuf_channels(tmpibuf, track, 0 /* don't grayscale */); *width_r= tmpibuf->x; *height_r= tmpibuf->y; |