[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [43400] trunk/blender: Color channels now can be disabled for the whole frame in clip editor
Sergey Sharybin
sergey.vfx at gmail.com
Sun Jan 15 14:31:59 CET 2012
Revision: 43400
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43400
Author: nazgul
Date: 2012-01-15 13:31:58 +0000 (Sun, 15 Jan 2012)
Log Message:
-----------
Color channels now can be disabled for the whole frame in clip editor
Modified Paths:
--------------
trunk/blender/release/scripts/startup/bl_ui/space_clip.py
trunk/blender/source/blender/blenkernel/BKE_movieclip.h
trunk/blender/source/blender/blenkernel/BKE_tracking.h
trunk/blender/source/blender/blenkernel/intern/movieclip.c
trunk/blender/source/blender/blenkernel/intern/tracking.c
trunk/blender/source/blender/editors/space_clip/clip_editor.c
trunk/blender/source/blender/makesdna/DNA_space_types.h
trunk/blender/source/blender/makesrna/intern/rna_space.c
Modified: trunk/blender/release/scripts/startup/bl_ui/space_clip.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_clip.py 2012-01-15 13:31:40 UTC (rev 43399)
+++ trunk/blender/release/scripts/startup/bl_ui/space_clip.py 2012-01-15 13:31:58 UTC (rev 43400)
@@ -515,6 +515,17 @@
layout = self.layout
sc = context.space_data
+ row = layout.row(align=True)
+ sub = row.row()
+ sub.prop(sc, "show_red_channel", text="R", toggle=True)
+ sub.prop(sc, "show_green_channel", text="G", toggle=True)
+ sub.prop(sc, "show_blue_channel", text="B", toggle=True)
+
+ row.separator()
+
+ sub = row.row()
+ sub.prop(sc, "use_grayscale_preview", text="B/W", toggle=True)
+
col = layout.column(align=True)
col.prop(sc, "show_marker_pattern", text="Pattern")
Modified: trunk/blender/source/blender/blenkernel/BKE_movieclip.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_movieclip.h 2012-01-15 13:31:40 UTC (rev 43399)
+++ trunk/blender/source/blender/blenkernel/BKE_movieclip.h 2012-01-15 13:31:58 UTC (rev 43400)
@@ -47,7 +47,8 @@
void BKE_movieclip_reload(struct MovieClip *clip);
struct ImBuf *BKE_movieclip_get_ibuf(struct MovieClip *clip, struct MovieClipUser *user);
-struct ImBuf *BKE_movieclip_get_stable_ibuf(struct MovieClip *clip, struct MovieClipUser *user, float loc[2], float *scale, float *angle);
+struct ImBuf *BKE_movieclip_get_postprocessed_ibuf(struct MovieClip *clip, struct MovieClipUser *user, int postprocess_flag);
+struct ImBuf *BKE_movieclip_get_stable_ibuf(struct MovieClip *clip, struct MovieClipUser *user, float loc[2], float *scale, float *angle, int postprocess_flag);
struct ImBuf *BKE_movieclip_get_ibuf_flag(struct MovieClip *clip, struct MovieClipUser *user, int flag);
void BKE_movieclip_get_size(struct MovieClip *clip, struct MovieClipUser *user, int *width, int *height);
void BKE_movieclip_aspect(struct MovieClip *clip, float *aspx, float *aspy);
@@ -63,8 +64,10 @@
void BKE_movieclip_build_proxy_frame(struct MovieClip *clip, int clip_flag, struct MovieDistortion *distortion,
int cfra, int *build_sizes, int build_count, int undistorted);
-#define TRACK_CLEAR_UPTO 0
-#define TRACK_CLEAR_REMAINED 1
-#define TRACK_CLEAR_ALL 2
+/* postprocessing flags */
+#define MOVIECLIP_DISABLE_RED (1<<0)
+#define MOVIECLIP_DISABLE_GREEN (1<<1)
+#define MOVIECLIP_DISABLE_BLUE (1<<2)
+#define MOVIECLIP_PREVIEW_GRAYSCALE (1<<3)
#endif
Modified: trunk/blender/source/blender/blenkernel/BKE_tracking.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_tracking.h 2012-01-15 13:31:40 UTC (rev 43399)
+++ trunk/blender/source/blender/blenkernel/BKE_tracking.h 2012-01-15 13:31:58 UTC (rev 43400)
@@ -97,6 +97,8 @@
struct MovieTrackingReconstruction *BKE_tracking_object_reconstruction(struct MovieTracking *tracking,
struct MovieTrackingObject *object);
+void BKE_tracking_disable_imbuf_channels(struct ImBuf *ibuf, int disable_red, int disable_green, int disable_blue, int grayscale);
+
/* clipboard */
void BKE_tracking_free_clipboard(void);
void BKE_tracking_clipboard_copy_tracks(struct MovieTracking *tracking, struct MovieTrackingObject *object);
@@ -166,6 +168,10 @@
#define MARKER_VISIBLE(sc, marker) (((marker)->flag&MARKER_DISABLED)==0 || ((sc)->flag&SC_HIDE_DISABLED)==0)
+#define TRACK_CLEAR_UPTO 0
+#define TRACK_CLEAR_REMAINED 1
+#define TRACK_CLEAR_ALL 2
+
#define CLAMP_PAT_DIM 1
#define CLAMP_PAT_POS 2
#define CLAMP_SEARCH_DIM 3
Modified: trunk/blender/source/blender/blenkernel/intern/movieclip.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/movieclip.c 2012-01-15 13:31:40 UTC (rev 43399)
+++ trunk/blender/source/blender/blenkernel/intern/movieclip.c 2012-01-15 13:31:58 UTC (rev 43400)
@@ -261,10 +261,12 @@
struct {
ImBuf *ibuf;
int framenr;
+ int flag;
/* cache for undistorted shot */
float principal[2];
float k1, k2, k3;
+ short undistoriton_used;
int proxy;
short render_flag;
@@ -511,9 +513,9 @@
return result;
}
-static int need_postprocessed_frame(MovieClipUser *user, int flag)
+static int need_postprocessed_frame(MovieClipUser *user, int flag, int postprocess_flag)
{
- int result = 0;
+ int result = postprocess_flag;
result |= need_undistortion_postprocess(user, flag);
@@ -535,7 +537,7 @@
return 1;
}
-static ImBuf *get_postprocessed_cached_frame(MovieClip *clip, MovieClipUser *user, int flag)
+static ImBuf *get_postprocessed_cached_frame(MovieClip *clip, MovieClipUser *user, int flag, int postprocess_flag)
{
MovieClipCache *cache= clip->cache;
int framenr= user->framenr;
@@ -556,29 +558,35 @@
return NULL;
/* cached ibuf used different proxy settings */
- if(cache->postprocessed.render_flag!=render_flag || cache->postprocessed.proxy!=proxy)
+ if(cache->postprocessed.render_flag != render_flag || cache->postprocessed.proxy != proxy)
return NULL;
+ if(cache->postprocessed.flag != postprocess_flag)
+ return NULL;
+
if(need_undistortion_postprocess(user, flag)) {
if(!check_undistortion_cache_flags(clip))
return NULL;
}
+ else if(cache->postprocessed.undistoriton_used)
+ return NULL;
IMB_refImBuf(cache->postprocessed.ibuf);
return cache->postprocessed.ibuf;
}
-static ImBuf *put_postprocessed_frame_to_cache(MovieClip *clip, MovieClipUser *user, ImBuf *ibuf, int flag)
+static ImBuf *put_postprocessed_frame_to_cache(MovieClip *clip, MovieClipUser *user, ImBuf *ibuf, int flag, int postprocess_flag)
{
MovieClipCache *cache= clip->cache;
MovieTrackingCamera *camera= &clip->tracking.camera;
- ImBuf *postproc_ibuf;
+ ImBuf *postproc_ibuf = NULL;
if(cache->postprocessed.ibuf)
IMB_freeImBuf(cache->postprocessed.ibuf);
cache->postprocessed.framenr= user->framenr;
+ cache->postprocessed.flag = postprocess_flag;
if(flag&MCLIP_USE_PROXY) {
cache->postprocessed.proxy= rendersize_to_proxy(user, flag);
@@ -592,18 +600,38 @@
if(need_undistortion_postprocess(user, flag)) {
copy_v2_v2(cache->postprocessed.principal, camera->principal);
copy_v3_v3(&cache->postprocessed.k1, &camera->k1);
+ cache->postprocessed.undistoriton_used = 1;
+ postproc_ibuf= get_undistorted_ibuf(clip, NULL, ibuf);
}
+ else cache->postprocessed.undistoriton_used = 0;
- postproc_ibuf= get_undistorted_ibuf(clip, NULL, ibuf);
+ if(postprocess_flag) {
+ int disable_red = postprocess_flag & MOVIECLIP_DISABLE_RED,
+ disable_green = postprocess_flag & MOVIECLIP_DISABLE_GREEN,
+ disable_blue = postprocess_flag & MOVIECLIP_DISABLE_BLUE,
+ grayscale = postprocess_flag & MOVIECLIP_PREVIEW_GRAYSCALE;
+ if(!postproc_ibuf)
+ postproc_ibuf = IMB_dupImBuf(ibuf);
+
+ if(disable_red || disable_green || disable_blue || grayscale)
+ BKE_tracking_disable_imbuf_channels(postproc_ibuf, disable_red, disable_green, disable_blue, 1);
+ }
+
IMB_refImBuf(postproc_ibuf);
cache->postprocessed.ibuf= postproc_ibuf;
+ if(cache->stabilized.ibuf) {
+ /* force stable buffer be re-calculated */
+ IMB_freeImBuf(cache->stabilized.ibuf);
+ cache->stabilized.ibuf= NULL;
+ }
+
return postproc_ibuf;
}
-static ImBuf *movieclip_get_postprocessed_ibuf(MovieClip *clip, MovieClipUser *user, int flag)
+static ImBuf *movieclip_get_postprocessed_ibuf(MovieClip *clip, MovieClipUser *user, int flag, int postprocess_flag)
{
ImBuf *ibuf= NULL;
int framenr= user->framenr, need_postprocess= 0;
@@ -613,8 +641,8 @@
BLI_lock_thread(LOCK_MOVIECLIP);
/* try to obtain cached postprocessed frame first */
- if(need_postprocessed_frame(user, flag)) {
- ibuf= get_postprocessed_cached_frame(clip, user, flag);
+ if(need_postprocessed_frame(user, flag, postprocess_flag)) {
+ ibuf= get_postprocessed_cached_frame(clip, user, flag, postprocess_flag);
if(!ibuf)
need_postprocess= 1;
@@ -647,7 +675,7 @@
/* postprocess frame and put to cache */
if(need_postprocess) {
ImBuf *tmpibuf= ibuf;
- ibuf= put_postprocessed_frame_to_cache(clip, user, tmpibuf, flag);
+ ibuf= put_postprocessed_frame_to_cache(clip, user, tmpibuf, flag, postprocess_flag);
IMB_freeImBuf(tmpibuf);
}
}
@@ -664,9 +692,14 @@
ImBuf *BKE_movieclip_get_ibuf_flag(MovieClip *clip, MovieClipUser *user, int flag)
{
- return movieclip_get_postprocessed_ibuf(clip, user, flag);
+ return movieclip_get_postprocessed_ibuf(clip, user, flag, 0);
}
+ImBuf *BKE_movieclip_get_postprocessed_ibuf(MovieClip *clip, MovieClipUser *user, int postprocess_flag)
+{
+ return movieclip_get_postprocessed_ibuf(clip, user, clip->flag, postprocess_flag);
+}
+
static ImBuf *get_stable_cached_frame(MovieClip *clip, MovieClipUser *user, int framenr)
{
MovieClipCache *cache = clip->cache;
@@ -738,12 +771,12 @@
return stableibuf;
}
-ImBuf *BKE_movieclip_get_stable_ibuf(MovieClip *clip, MovieClipUser *user, float loc[2], float *scale, float *angle)
+ImBuf *BKE_movieclip_get_stable_ibuf(MovieClip *clip, MovieClipUser *user, float loc[2], float *scale, float *angle, int postprocess_flag)
{
ImBuf *ibuf, *stableibuf= NULL;
int framenr= user->framenr;
- ibuf= BKE_movieclip_get_ibuf(clip, user);
+ ibuf= BKE_movieclip_get_postprocessed_ibuf(clip, user, postprocess_flag);
if(!ibuf)
return NULL;
Modified: trunk/blender/source/blender/blenkernel/intern/tracking.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/tracking.c 2012-01-15 13:31:40 UTC (rev 43399)
+++ trunk/blender/source/blender/blenkernel/intern/tracking.c 2012-01-15 13:31:58 UTC (rev 43400)
@@ -1010,19 +1010,19 @@
/* 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, int grayscale)
+void BKE_tracking_disable_imbuf_channels(ImBuf *ibuf, int disable_red, int disable_green, int disable_blue, int grayscale)
{
int x, y;
float scale;
- if((track->flag&(TRACK_DISABLE_RED|TRACK_DISABLE_GREEN|TRACK_DISABLE_BLUE))==0 && !grayscale)
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list