forked from bartvdbraak/blender
svn merge ^/trunk/blender -r42182:42194
This commit is contained in:
commit
3bccd1ffed
@ -58,6 +58,8 @@ WITH_BF_PNG = True
|
||||
BF_PNG_LIB = 'libpng'
|
||||
BF_PNG_LIBPATH = '/home/sources/staticlibs/lib32'
|
||||
|
||||
WITH_BF_STATICLIBSAMPLERATE = True
|
||||
|
||||
WITH_BF_ZLIB = True
|
||||
WITH_BF_STATICZLIB = True
|
||||
BF_ZLIB_LIB_STATIC = '${BF_ZLIB}/lib/libz.a'
|
||||
@ -114,5 +116,5 @@ WITH_BF_OCEANSIM = True
|
||||
|
||||
# Compilation and optimization
|
||||
BF_DEBUG = False
|
||||
REL_CCFLAGS = ['-O2', '-msse', '-msse2'] # C & C++
|
||||
REL_CCFLAGS = ['-O2'] # C & C++
|
||||
PLATFORM_LINKFLAGS = ['-L/home/sources/staticlibs/lib32']
|
||||
|
@ -52,6 +52,8 @@ WITH_BF_PNG = True
|
||||
BF_PNG_LIB = 'libpng'
|
||||
BF_PNG_LIBPATH = '/home/sources/staticlibs/lib32'
|
||||
|
||||
WITH_BF_STATICLIBSAMPLERATE = True
|
||||
|
||||
WITH_BF_ZLIB = True
|
||||
WITH_BF_STATICZLIB = True
|
||||
BF_ZLIB_LIB_STATIC = '${BF_ZLIB}/lib/libz.a'
|
||||
@ -93,5 +95,5 @@ WITH_BF_OCEANSIM = True
|
||||
|
||||
# Compilation and optimization
|
||||
BF_DEBUG = False
|
||||
REL_CCFLAGS = ['-O2', '-msse', '-msse2'] # C & C++
|
||||
REL_CCFLAGS = ['-O2'] # C & C++
|
||||
PLATFORM_LINKFLAGS = ['-L/home/sources/staticlibs/lib32']
|
||||
|
@ -48,6 +48,8 @@ WITH_BF_JPEG = True
|
||||
BF_JPEG_LIB = 'libjpeg'
|
||||
BF_JPEG_LIBPATH = '/home/sources/staticlibs/lib64'
|
||||
|
||||
WITH_BF_STATICLIBSAMPLERATE = True
|
||||
|
||||
WITH_BF_PNG = True
|
||||
BF_PNG_LIB = 'libpng'
|
||||
BF_PNG_LIBPATH = '/home/sources/staticlibs/lib64'
|
||||
@ -93,5 +95,5 @@ WITH_BF_OCEANSIM = True
|
||||
|
||||
# Compilation and optimization
|
||||
BF_DEBUG = False
|
||||
REL_CCFLAGS = ['-O2', '-msse', '-msse2'] # C & C++
|
||||
REL_CCFLAGS = ['-O2'] # C & C++
|
||||
PLATFORM_LINKFLAGS = ['-L/home/sources/staticlibs/lib64']
|
||||
|
@ -58,6 +58,8 @@ WITH_BF_PNG = True
|
||||
BF_PNG_LIB = 'libpng'
|
||||
BF_PNG_LIBPATH = '/home/sources/staticlibs/lib64'
|
||||
|
||||
WITH_BF_STATICLIBSAMPLERATE = True
|
||||
|
||||
WITH_BF_ZLIB = True
|
||||
WITH_BF_STATICZLIB = True
|
||||
BF_ZLIB_LIB_STATIC = '${BF_ZLIB}/lib/libz.a'
|
||||
@ -114,5 +116,5 @@ WITH_BF_OCEANSIM = True
|
||||
|
||||
# Compilation and optimization
|
||||
BF_DEBUG = False
|
||||
REL_CCFLAGS = ['-O2', '-msse', '-msse2'] # C & C++
|
||||
REL_CCFLAGS = ['-O2'] # C & C++
|
||||
PLATFORM_LINKFLAGS = ['-L/home/sources/staticlibs/lib64']
|
||||
|
@ -33,12 +33,7 @@ bl_info = {
|
||||
"category": "Render"}
|
||||
|
||||
import bpy
|
||||
|
||||
from cycles import ui
|
||||
from cycles import properties
|
||||
from cycles import xml
|
||||
from cycles import engine
|
||||
from cycles import presets
|
||||
from . import ui, properties, xml, engine, presets
|
||||
|
||||
|
||||
class CyclesRender(bpy.types.RenderEngine):
|
||||
|
@ -56,7 +56,7 @@ def free(engine):
|
||||
|
||||
def render(engine):
|
||||
import bcycles
|
||||
if "session" in dir(engine):
|
||||
if hasattr(engine, "session"):
|
||||
bcycles.render(engine.session)
|
||||
|
||||
|
||||
|
@ -18,7 +18,7 @@
|
||||
|
||||
# <pep8 compliant>
|
||||
|
||||
from cycles import engine
|
||||
from . import engine
|
||||
|
||||
|
||||
def get_gpu_device():
|
||||
|
@ -27,7 +27,7 @@ from bpy.props import (BoolProperty,
|
||||
|
||||
import math
|
||||
|
||||
from cycles import enums
|
||||
from . import enums
|
||||
|
||||
|
||||
class CyclesRenderSettings(bpy.types.PropertyGroup):
|
||||
|
@ -22,8 +22,7 @@ import bpy
|
||||
|
||||
from bpy.types import Panel, Menu
|
||||
|
||||
from cycles import enums
|
||||
from cycles import engine
|
||||
from . import enums, engine
|
||||
|
||||
|
||||
class CYCLES_MT_integrator_presets(Menu):
|
||||
@ -324,7 +323,7 @@ class CyclesObject_PT_ray_visibility(CyclesButtonsPanel, Panel):
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
ob = context.object
|
||||
return CyclesButtonsPanel.poll(context) and ob and ob.type in ('MESH', 'CURVE', 'CURVE', 'SURFACE', 'FONT', 'META') # todo: 'LAMP'
|
||||
return CyclesButtonsPanel.poll(context) and ob and ob.type in {'MESH', 'CURVE', 'CURVE', 'SURFACE', 'FONT', 'META'} # todo: 'LAMP'
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
@ -399,7 +398,7 @@ class CyclesLamp_PT_lamp(CyclesButtonsPanel, Panel):
|
||||
split = layout.split()
|
||||
col = split.column(align=True)
|
||||
|
||||
if lamp.type in ('POINT', 'SUN', 'SPOT'):
|
||||
if lamp.type in {'POINT', 'SUN', 'SPOT'}:
|
||||
col.prop(lamp, "shadow_soft_size", text="Size")
|
||||
elif lamp.type == 'AREA':
|
||||
col.prop(lamp, "shape", text="")
|
||||
@ -460,7 +459,8 @@ class CyclesWorld_PT_volume(CyclesButtonsPanel, Panel):
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
# world = context.world
|
||||
return False # world and world.node_tree and CyclesButtonsPanel.poll(context)
|
||||
# world and world.node_tree and CyclesButtonsPanel.poll(context)
|
||||
return False
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
@ -494,7 +494,8 @@ class CyclesMaterial_PT_volume(CyclesButtonsPanel, Panel):
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
# mat = context.material
|
||||
return False # mat and mat.node_tree and CyclesButtonsPanel.poll(context)
|
||||
# mat and mat.node_tree and CyclesButtonsPanel.poll(context)
|
||||
return False
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
@ -730,7 +731,7 @@ def draw_pause(self, context):
|
||||
|
||||
|
||||
def get_panels():
|
||||
return [
|
||||
return (
|
||||
bpy.types.RENDER_PT_render,
|
||||
bpy.types.RENDER_PT_output,
|
||||
bpy.types.RENDER_PT_encoding,
|
||||
@ -782,7 +783,8 @@ def get_panels():
|
||||
bpy.types.PARTICLE_PT_field_weights,
|
||||
bpy.types.PARTICLE_PT_force_fields,
|
||||
bpy.types.PARTICLE_PT_vertexgroups,
|
||||
bpy.types.PARTICLE_PT_custom_props]
|
||||
bpy.types.PARTICLE_PT_custom_props,
|
||||
)
|
||||
|
||||
|
||||
def register():
|
||||
|
@ -58,7 +58,6 @@ struct MovieTrackingMarker *BKE_tracking_exact_marker(struct MovieTrackingTrack
|
||||
int BKE_tracking_has_marker(struct MovieTrackingTrack *track, int framenr);
|
||||
|
||||
void BKE_tracking_free_track(struct MovieTrackingTrack *track);
|
||||
struct MovieTrackingTrack *BKE_tracking_copy_track(struct MovieTrackingTrack *track);
|
||||
|
||||
void BKE_tracking_clear_path(struct MovieTrackingTrack *track, int ref_frame, int action);
|
||||
|
||||
|
@ -360,18 +360,6 @@ void BKE_tracking_free_track(MovieTrackingTrack *track)
|
||||
if(track->markers) MEM_freeN(track->markers);
|
||||
}
|
||||
|
||||
MovieTrackingTrack *BKE_tracking_copy_track(MovieTrackingTrack *track)
|
||||
{
|
||||
MovieTrackingTrack *new_track= MEM_dupallocN(track);
|
||||
|
||||
new_track->next= new_track->prev= NULL;
|
||||
|
||||
if(new_track->markers)
|
||||
new_track->markers= MEM_dupallocN(new_track->markers);
|
||||
|
||||
return new_track;
|
||||
}
|
||||
|
||||
static void put_disabled_marker(MovieTrackingTrack *track, MovieTrackingMarker *ref_marker, int before, int overwrite)
|
||||
{
|
||||
MovieTrackingMarker marker_new;
|
||||
@ -528,11 +516,173 @@ void BKE_tracking_free(MovieTracking *tracking)
|
||||
BKE_tracking_distortion_destroy(tracking->camera.intrinsics);
|
||||
}
|
||||
|
||||
/*********************** tracks map *************************/
|
||||
|
||||
typedef struct TracksMap {
|
||||
int num_tracks;
|
||||
int customdata_size;
|
||||
|
||||
char *customdata;
|
||||
MovieTrackingTrack *tracks;
|
||||
|
||||
GHash *hash;
|
||||
|
||||
int ptr;
|
||||
} TracksMap;
|
||||
|
||||
static TracksMap *tracks_map_new(int num_tracks, int customdata_size)
|
||||
{
|
||||
TracksMap *map= MEM_callocN(sizeof(TracksMap), "TrackingsMap");
|
||||
|
||||
map->num_tracks= num_tracks;
|
||||
map->customdata_size= customdata_size;
|
||||
|
||||
map->tracks= MEM_callocN(sizeof(MovieTrackingTrack)*num_tracks, "TrackingsMap tracks");
|
||||
|
||||
if(customdata_size)
|
||||
map->customdata= MEM_callocN(customdata_size*num_tracks, "TracksMap customdata");
|
||||
|
||||
map->hash= BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "TracksMap hash");
|
||||
|
||||
return map;
|
||||
}
|
||||
|
||||
static int tracks_map_size(TracksMap *map)
|
||||
{
|
||||
return map->num_tracks;
|
||||
}
|
||||
|
||||
static void tracks_map_get(TracksMap *map, int index, MovieTrackingTrack **track, void **customdata)
|
||||
{
|
||||
*track= &map->tracks[index];
|
||||
|
||||
if(map->customdata)
|
||||
*customdata= &map->customdata[index*map->customdata_size];
|
||||
}
|
||||
|
||||
static void tracks_map_insert(TracksMap *map, MovieTrackingTrack *track, void *customdata)
|
||||
{
|
||||
MovieTrackingTrack new_track= *track;
|
||||
|
||||
new_track.markers= MEM_dupallocN(new_track.markers);
|
||||
|
||||
map->tracks[map->ptr]= new_track;
|
||||
|
||||
if(customdata)
|
||||
memcpy(&map->customdata[map->ptr*map->customdata_size], customdata, map->customdata_size);
|
||||
|
||||
BLI_ghash_insert(map->hash, &map->tracks[map->ptr], track);
|
||||
|
||||
map->ptr++;
|
||||
}
|
||||
|
||||
static void tracks_map_merge(TracksMap *map, MovieTracking *tracking)
|
||||
{
|
||||
MovieTrackingTrack *track;
|
||||
ListBase tracks= {NULL, NULL}, new_tracks= {NULL, NULL};
|
||||
ListBase *old_tracks= &tracking->tracks;
|
||||
int a;
|
||||
|
||||
/* duplicate currently operating tracks to temporary list.
|
||||
this is needed to keep names in unique state and it's faster to change names
|
||||
of currently operating tracks (if needed) */
|
||||
for(a= 0; a<map->num_tracks; a++) {
|
||||
int replace_sel= 0;
|
||||
MovieTrackingTrack *new_track, *old;
|
||||
|
||||
track= &map->tracks[a];
|
||||
|
||||
/* find original of operating track in list of previously displayed tracks */
|
||||
old= BLI_ghash_lookup(map->hash, track);
|
||||
if(old) {
|
||||
MovieTrackingTrack *cur= old_tracks->first;
|
||||
|
||||
while(cur) {
|
||||
if(cur==old)
|
||||
break;
|
||||
|
||||
cur= cur->next;
|
||||
}
|
||||
|
||||
/* original track was found, re-use flags and remove this track */
|
||||
if(cur) {
|
||||
if(cur==tracking->act_track)
|
||||
replace_sel= 1;
|
||||
|
||||
track->flag= cur->flag;
|
||||
track->pat_flag= cur->pat_flag;
|
||||
track->search_flag= cur->search_flag;
|
||||
|
||||
BKE_tracking_free_track(cur);
|
||||
BLI_freelinkN(old_tracks, cur);
|
||||
}
|
||||
}
|
||||
|
||||
new_track= MEM_callocN(sizeof(MovieTrackingTrack), "tracksMapMerge new_track");
|
||||
*new_track= *track;
|
||||
new_track->markers= MEM_dupallocN(new_track->markers);
|
||||
|
||||
BLI_ghash_remove(map->hash, track, NULL, NULL); /* XXX: are we actually need this */
|
||||
BLI_ghash_insert(map->hash, track, new_track);
|
||||
|
||||
if(replace_sel) /* update current selection in clip */
|
||||
tracking->act_track= new_track;
|
||||
|
||||
BLI_addtail(&tracks, new_track);
|
||||
}
|
||||
|
||||
/* move all tracks, which aren't operating */
|
||||
track= old_tracks->first;
|
||||
while(track) {
|
||||
MovieTrackingTrack *next= track->next;
|
||||
|
||||
track->next= track->prev= NULL;
|
||||
BLI_addtail(&new_tracks, track);
|
||||
|
||||
track= next;
|
||||
}
|
||||
|
||||
/* now move all tracks which are currently operating and keep their names unique */
|
||||
track= tracks.first;
|
||||
while(track) {
|
||||
MovieTrackingTrack *next= track->next;
|
||||
|
||||
BLI_remlink(&tracks, track);
|
||||
|
||||
track->next= track->prev= NULL;
|
||||
BLI_addtail(&new_tracks, track);
|
||||
|
||||
BLI_uniquename(&new_tracks, track, "Track", '.', offsetof(MovieTrackingTrack, name), sizeof(track->name));
|
||||
|
||||
track= next;
|
||||
}
|
||||
|
||||
tracking->tracks= new_tracks;
|
||||
}
|
||||
|
||||
static void tracks_map_free(TracksMap *map, void (*customdata_free) (void *customdata))
|
||||
{
|
||||
int i= 0;
|
||||
|
||||
BLI_ghash_free(map->hash, NULL, NULL);
|
||||
|
||||
for(i= 0; i<map->num_tracks; i++) {
|
||||
if(map->customdata && customdata_free)
|
||||
customdata_free(&map->customdata[i*map->customdata_size]);
|
||||
|
||||
BKE_tracking_free_track(&map->tracks[i]);
|
||||
}
|
||||
|
||||
if(map->customdata)
|
||||
MEM_freeN(map->customdata);
|
||||
|
||||
MEM_freeN(map->tracks);
|
||||
MEM_freeN(map);
|
||||
}
|
||||
|
||||
/*********************** tracking *************************/
|
||||
|
||||
typedef struct TrackContext {
|
||||
MovieTrackingTrack *track;
|
||||
|
||||
#ifdef WITH_LIBMV
|
||||
float keyframed_pos[2];
|
||||
|
||||
@ -544,6 +694,8 @@ typedef struct TrackContext {
|
||||
int patsize; /* size of pattern (currently only 16x16 due to libmv side) */
|
||||
unsigned char *pattern; /* keyframed pattern */
|
||||
unsigned char *warped; /* warped version of reference */
|
||||
#else
|
||||
int pad;
|
||||
#endif
|
||||
} TrackContext;
|
||||
|
||||
@ -553,11 +705,8 @@ typedef struct MovieTrackingContext {
|
||||
|
||||
int first_time, frames;
|
||||
|
||||
TrackContext *track_context;
|
||||
int num_tracks;
|
||||
|
||||
GHash *hash;
|
||||
MovieTrackingSettings settings;
|
||||
TracksMap *tracks_map;
|
||||
|
||||
short backwards, disable_failed;
|
||||
int sync_frame;
|
||||
@ -569,12 +718,11 @@ MovieTrackingContext *BKE_tracking_context_new(MovieClip *clip, MovieClipUser *u
|
||||
MovieTracking *tracking= &clip->tracking;
|
||||
MovieTrackingSettings *settings= &tracking->settings;
|
||||
MovieTrackingTrack *track;
|
||||
TrackContext *track_context;
|
||||
int num_tracks= 0;
|
||||
|
||||
context->settings= *settings;
|
||||
context->backwards= backwards;
|
||||
context->disable_failed= disable_failed;
|
||||
context->hash= BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "tracking trackHash");
|
||||
context->sync_frame= user->framenr;
|
||||
context->first_time= 1;
|
||||
|
||||
@ -585,33 +733,33 @@ MovieTrackingContext *BKE_tracking_context_new(MovieClip *clip, MovieClipUser *u
|
||||
MovieTrackingMarker *marker= BKE_tracking_get_marker(track, user->framenr);
|
||||
|
||||
if((marker->flag&MARKER_DISABLED)==0)
|
||||
context->num_tracks++;
|
||||
num_tracks++;
|
||||
}
|
||||
|
||||
track= track->next;
|
||||
}
|
||||
|
||||
if(context->num_tracks) {
|
||||
if(num_tracks) {
|
||||
int width, height;
|
||||
|
||||
context->tracks_map= tracks_map_new(num_tracks, sizeof(TrackContext));
|
||||
|
||||
BKE_movieclip_get_size(clip, user, &width, &height);
|
||||
|
||||
/* create tracking data */
|
||||
context->track_context= MEM_callocN(sizeof(TrackContext)*context->num_tracks, "tracking track_context");
|
||||
|
||||
track_context= context->track_context;
|
||||
track= tracking->tracks.first;
|
||||
while(track) {
|
||||
if(TRACK_SELECTED(track) && (track->flag&TRACK_LOCKED)==0) {
|
||||
MovieTrackingMarker *marker= BKE_tracking_get_marker(track, user->framenr);
|
||||
|
||||
if((marker->flag&MARKER_DISABLED)==0) {
|
||||
MovieTrackingTrack *new_track= BKE_tracking_copy_track(track);
|
||||
TrackContext track_context;
|
||||
|
||||
memset(&track_context, 0, sizeof(TrackContext));
|
||||
|
||||
track_context->track= new_track;
|
||||
#ifdef WITH_LIBMV
|
||||
{
|
||||
if(track_context->track->tracker==TRACKER_KLT) {
|
||||
if(track->tracker==TRACKER_KLT) {
|
||||
float search_size_x= (track->search_max[0]-track->search_min[0])*width;
|
||||
float search_size_y= (track->search_max[1]-track->search_min[1])*height;
|
||||
float pattern_size_x= (track->pat_max[0]-track->pat_min[0])*width;
|
||||
@ -627,22 +775,20 @@ MovieTrackingContext *BKE_tracking_context_new(MovieClip *clip, MovieClipUser *u
|
||||
/* try to accomodate the user's choice of pyramid level in a way
|
||||
* that doesn't cause the coarsest pyramid pattern to be larger
|
||||
* than the search size */
|
||||
int level= MIN2(track_context->track->pyramid_levels, max_pyramid_levels);
|
||||
int level= MIN2(track->pyramid_levels, max_pyramid_levels);
|
||||
|
||||
wndx= (int)((track->pat_max[0]-track->pat_min[0])*width)/2;
|
||||
wndy= (int)((track->pat_max[1]-track->pat_min[1])*height)/2;
|
||||
|
||||
track_context->region_tracker= libmv_regionTrackerNew(100, level, MAX2(wndx, wndy));
|
||||
track_context.region_tracker= libmv_regionTrackerNew(100, level, MAX2(wndx, wndy));
|
||||
}
|
||||
else if(track_context->track->tracker==TRACKER_SAD) {
|
||||
else if(track->tracker==TRACKER_SAD) {
|
||||
/* nothing to initialize */
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
BLI_ghash_insert(context->hash, new_track, track);
|
||||
|
||||
track_context++;
|
||||
tracks_map_insert(context->tracks_map, track, &track_context);
|
||||
}
|
||||
}
|
||||
|
||||
@ -656,35 +802,30 @@ MovieTrackingContext *BKE_tracking_context_new(MovieClip *clip, MovieClipUser *u
|
||||
return context;
|
||||
}
|
||||
|
||||
void BKE_tracking_context_free(MovieTrackingContext *context)
|
||||
static void track_context_free(void *customdata)
|
||||
{
|
||||
int a;
|
||||
TrackContext *track_context;
|
||||
|
||||
for(a= 0, track_context= context->track_context; a<context->num_tracks; a++, track_context++) {
|
||||
BKE_tracking_free_track(context->track_context[a].track);
|
||||
TrackContext *track_context= (TrackContext *)customdata;
|
||||
|
||||
#if WITH_LIBMV
|
||||
if(track_context->region_tracker)
|
||||
libmv_regionTrackerDestroy(track_context->region_tracker);
|
||||
if(track_context->region_tracker)
|
||||
libmv_regionTrackerDestroy(track_context->region_tracker);
|
||||
|
||||
if(track_context->patch)
|
||||
MEM_freeN(track_context->patch);
|
||||
if(track_context->patch)
|
||||
MEM_freeN(track_context->patch);
|
||||
|
||||
if(track_context->pattern)
|
||||
MEM_freeN(track_context->pattern);
|
||||
if(track_context->pattern)
|
||||
MEM_freeN(track_context->pattern);
|
||||
|
||||
if(track_context->warped)
|
||||
MEM_freeN(track_context->warped);
|
||||
if(track_context->warped)
|
||||
MEM_freeN(track_context->warped);
|
||||
#else
|
||||
(void) track_context;
|
||||
#endif
|
||||
}
|
||||
|
||||
MEM_freeN(track_context->track);
|
||||
}
|
||||
|
||||
if(context->track_context)
|
||||
MEM_freeN(context->track_context);
|
||||
|
||||
BLI_ghash_free(context->hash, NULL, NULL);
|
||||
void BKE_tracking_context_free(MovieTrackingContext *context)
|
||||
{
|
||||
tracks_map_free(context->tracks_map, track_context_free);
|
||||
|
||||
MEM_freeN(context);
|
||||
}
|
||||
@ -937,86 +1078,10 @@ static void get_warped(TrackContext *track_context, int x, int y, int width, uns
|
||||
|
||||
void BKE_tracking_sync(MovieTrackingContext *context)
|
||||
{
|
||||
TrackContext *track_context;
|
||||
MovieTracking *tracking= &context->clip->tracking;
|
||||
MovieTrackingTrack *track;
|
||||
ListBase tracks= {NULL, NULL}, new_tracks= {NULL, NULL};
|
||||
ListBase *old_tracks= &context->clip->tracking.tracks;
|
||||
int a, newframe;
|
||||
int newframe;
|
||||
|
||||
/* duplicate currently tracking tracks to temporary list.
|
||||
this is needed to keep names in unique state and it's faster to change names
|
||||
of currently tracking tracks (if needed) */
|
||||
for(a= 0, track_context= context->track_context; a<context->num_tracks; a++, track_context++) {
|
||||
int replace_sel= 0;
|
||||
MovieTrackingTrack *new_track, *old;
|
||||
|
||||
track= track_context->track;
|
||||
|
||||
/* find original of tracking track in list of previously displayed tracks */
|
||||
old= BLI_ghash_lookup(context->hash, track);
|
||||
if(old) {
|
||||
MovieTrackingTrack *cur= old_tracks->first;
|
||||
|
||||
while(cur) {
|
||||
if(cur==old)
|
||||
break;
|
||||
|
||||
cur= cur->next;
|
||||
}
|
||||
|
||||
/* original track was found, re-use flags and remove this track */
|
||||
if(cur) {
|
||||
if(cur==tracking->act_track)
|
||||
replace_sel= 1;
|
||||
|
||||
track->flag= cur->flag;
|
||||
track->pat_flag= cur->pat_flag;
|
||||
track->search_flag= cur->search_flag;
|
||||
|
||||
BKE_tracking_free_track(cur);
|
||||
BLI_freelinkN(old_tracks, cur);
|
||||
}
|
||||
}
|
||||
|
||||
new_track= BKE_tracking_copy_track(track);
|
||||
|
||||
BLI_ghash_remove(context->hash, track, NULL, NULL); /* XXX: are we actually need this */
|
||||
BLI_ghash_insert(context->hash, track, new_track);
|
||||
|
||||
if(replace_sel) /* update current selection in clip */
|
||||
tracking->act_track= new_track;
|
||||
|
||||
BLI_addtail(&tracks, new_track);
|
||||
}
|
||||
|
||||
/* move all tracks, which aren't tracking */
|
||||
track= old_tracks->first;
|
||||
while(track) {
|
||||
MovieTrackingTrack *next= track->next;
|
||||
|
||||
track->next= track->prev= NULL;
|
||||
BLI_addtail(&new_tracks, track);
|
||||
|
||||
track= next;
|
||||
}
|
||||
|
||||
/* now move all tracks which are currently tracking and keep their names unique */
|
||||
track= tracks.first;
|
||||
while(track) {
|
||||
MovieTrackingTrack *next= track->next;
|
||||
|
||||
BLI_remlink(&tracks, track);
|
||||
|
||||
track->next= track->prev= NULL;
|
||||
BLI_addtail(&new_tracks, track);
|
||||
|
||||
BLI_uniquename(&new_tracks, track, "Track", '.', offsetof(MovieTrackingTrack, name), sizeof(track->name));
|
||||
|
||||
track= next;
|
||||
}
|
||||
|
||||
context->clip->tracking.tracks= new_tracks;
|
||||
tracks_map_merge(context->tracks_map, tracking);
|
||||
|
||||
if(context->backwards) newframe= context->user.framenr+1;
|
||||
else newframe= context->user.framenr-1;
|
||||
@ -1033,10 +1098,12 @@ int BKE_tracking_next(MovieTrackingContext *context)
|
||||
{
|
||||
ImBuf *ibuf_new;
|
||||
int curfra= context->user.framenr;
|
||||
int a, ok= 0;
|
||||
int a, ok= 0, map_size;
|
||||
|
||||
map_size= tracks_map_size(context->tracks_map);
|
||||
|
||||
/* nothing to track, avoid unneeded frames reading to save time and memory */
|
||||
if(!context->num_tracks)
|
||||
if(!map_size)
|
||||
return 0;
|
||||
|
||||
if(context->backwards) context->user.framenr--;
|
||||
@ -1046,11 +1113,15 @@ int BKE_tracking_next(MovieTrackingContext *context)
|
||||
if(!ibuf_new)
|
||||
return 0;
|
||||
|
||||
#pragma omp parallel for private(a) shared(ibuf_new, ok) if(context->num_tracks>1)
|
||||
for(a= 0; a<context->num_tracks; a++) {
|
||||
TrackContext *track_context= &context->track_context[a];
|
||||
MovieTrackingTrack *track= track_context->track;
|
||||
MovieTrackingMarker *marker= BKE_tracking_exact_marker(track, curfra);
|
||||
#pragma omp parallel for private(a) shared(ibuf_new, ok) if(map_size>1)
|
||||
for(a= 0; a<map_size; a++) {
|
||||
TrackContext *track_context;
|
||||
MovieTrackingTrack *track;
|
||||
MovieTrackingMarker *marker;
|
||||
|
||||
tracks_map_get(context->tracks_map, a, &track, (void**)&track_context);
|
||||
|
||||
marker= BKE_tracking_exact_marker(track, curfra);
|
||||
|
||||
if(marker && (marker->flag&MARKER_DISABLED)==0) {
|
||||
#ifdef WITH_LIBMV
|
||||
@ -1079,7 +1150,7 @@ int BKE_tracking_next(MovieTrackingContext *context)
|
||||
marker->pos[1]<margin[1] || marker->pos[1]>1.0f-margin[1]) {
|
||||
onbound= 1;
|
||||
}
|
||||
else if(track_context->track->tracker==TRACKER_KLT) {
|
||||
else if(track->tracker==TRACKER_KLT) {
|
||||
float *patch_new;
|
||||
|
||||
if(need_readjust) {
|
||||
@ -1107,7 +1178,7 @@ int BKE_tracking_next(MovieTrackingContext *context)
|
||||
|
||||
MEM_freeN(patch_new);
|
||||
}
|
||||
else if(track_context->track->tracker==TRACKER_SAD) {
|
||||
else if(track->tracker==TRACKER_SAD) {
|
||||
unsigned char *image_new;
|
||||
float correlation;
|
||||
float warp[3][2]={{0}};
|
||||
@ -1165,7 +1236,7 @@ int BKE_tracking_next(MovieTrackingContext *context)
|
||||
x2= warp[2][0];
|
||||
y2= warp[2][1];
|
||||
|
||||
tracked= track_context->track->minimum_correlation < correlation;
|
||||
tracked= track->minimum_correlation < correlation;
|
||||
|
||||
if(tracked)
|
||||
get_warped(track_context, x2, y2, width, image_new);
|
||||
|
@ -55,7 +55,7 @@ void *BLI_mempool_calloc(BLI_mempool *pool);
|
||||
void BLI_mempool_free(BLI_mempool *pool, void *addr);
|
||||
void BLI_mempool_destroy(BLI_mempool *pool);
|
||||
int BLI_mempool_count(BLI_mempool *pool);
|
||||
void *BLI_mempool_findelem(BLI_mempool *pool, const int index);
|
||||
void *BLI_mempool_findelem(BLI_mempool *pool, int index);
|
||||
|
||||
/** iteration stuff. note: this may easy to produce bugs with **/
|
||||
/*private structure*/
|
||||
|
@ -241,18 +241,19 @@ void BLI_mempool_free(BLI_mempool *pool, void *addr)
|
||||
}
|
||||
}
|
||||
|
||||
void *BLI_mempool_findelem(BLI_mempool *pool, const int index)
|
||||
void *BLI_mempool_findelem(BLI_mempool *pool, int index)
|
||||
{
|
||||
if ((index >= 0) && (index < pool->totused)) {
|
||||
BLI_mempool_chunk *mpchunk;
|
||||
int i= 0;
|
||||
|
||||
for (mpchunk = pool->chunks.first; mpchunk; mpchunk = mpchunk->next) {
|
||||
if (index < i + pool->pchunk) {
|
||||
return ((char *)mpchunk->data) + (pool->esize * (index - i));
|
||||
}
|
||||
i += pool->pchunk;
|
||||
}
|
||||
if (!pool->allow_iter) {
|
||||
fprintf(stderr, "%s: Error! you can't iterate over this mempool!\n", __func__);
|
||||
return NULL;
|
||||
}
|
||||
else if ((index >= 0) && (index < pool->totused)) {
|
||||
/* we could have some faster mem chunk stepping code inline */
|
||||
BLI_mempool_iter iter;
|
||||
void *elem;
|
||||
BLI_mempool_iternew(pool, &iter);
|
||||
for (elem= BLI_mempool_iterstep(&iter); index-- != 0; elem= BLI_mempool_iterstep(&iter)) { };
|
||||
return elem;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
@ -494,7 +494,7 @@ void ui_draw_aligned_panel(uiStyle *style, uiBlock *block, rcti *rect)
|
||||
/* calculate header rect */
|
||||
/* + 0.001f to prevent flicker due to float inaccuracy */
|
||||
headrect= *rect;
|
||||
headrect.ymin= headrect.ymax - 2.0f/block->aspect;
|
||||
headrect.ymin= headrect.ymax;
|
||||
headrect.ymax= headrect.ymin + floor(PNL_HEADER/block->aspect + 0.001f);
|
||||
|
||||
{
|
||||
@ -508,7 +508,7 @@ void ui_draw_aligned_panel(uiStyle *style, uiBlock *block, rcti *rect)
|
||||
/* draw with background color */
|
||||
glEnable(GL_BLEND);
|
||||
glColor4ubv((unsigned char*)btheme->tui.panel.header);
|
||||
glRectf(minx, headrect.ymin, maxx, y);
|
||||
glRectf(minx, headrect.ymin+1, maxx, y);
|
||||
|
||||
fdrawline(minx, y, maxx, y);
|
||||
fdrawline(minx, y, maxx, y);
|
||||
|
@ -262,12 +262,12 @@ static void region_draw_azone_tab_plus(AZone *az)
|
||||
break;
|
||||
}
|
||||
|
||||
glColor4f(0.05f, 0.05f, 0.05f, 0.5f);
|
||||
glColor4f(0.05f, 0.05f, 0.05f, 0.4f);
|
||||
uiRoundBox((float)az->x1, (float)az->y1, (float)az->x2, (float)az->y2, 4.0f);
|
||||
|
||||
glEnable(GL_BLEND);
|
||||
|
||||
glColor4f(0.8f, 0.8f, 0.8f, 0.5f);
|
||||
glColor4f(0.8f, 0.8f, 0.8f, 0.4f);
|
||||
draw_azone_plus((float)az->x1, (float)az->y1, (float)az->x2, (float)az->y2);
|
||||
|
||||
glDisable(GL_BLEND);
|
||||
@ -711,8 +711,8 @@ static void region_azone_icon(ScrArea *sa, AZone *az, ARegion *ar)
|
||||
}
|
||||
}
|
||||
|
||||
#define AZONEPAD_TAB_PLUSW 16
|
||||
#define AZONEPAD_TAB_PLUSH 16
|
||||
#define AZONEPAD_TAB_PLUSW 14
|
||||
#define AZONEPAD_TAB_PLUSH 14
|
||||
|
||||
/* region already made zero sized, in shape of edge */
|
||||
static void region_azone_tab_plus(ScrArea *sa, AZone *az, ARegion *ar)
|
||||
@ -739,9 +739,9 @@ static void region_azone_tab_plus(ScrArea *sa, AZone *az, ARegion *ar)
|
||||
az->y2= ar->winrct.ymin;
|
||||
break;
|
||||
case AE_LEFT_TO_TOPRIGHT:
|
||||
az->x1= ar->winrct.xmin + 1 - AZONEPAD_TAB_PLUSH;
|
||||
az->x1= ar->winrct.xmin - AZONEPAD_TAB_PLUSH;
|
||||
az->y1= ar->winrct.ymax - 2.5*AZONEPAD_TAB_PLUSW;
|
||||
az->x2= ar->winrct.xmin + 1;
|
||||
az->x2= ar->winrct.xmin;
|
||||
az->y2= ar->winrct.ymax - 1.5*AZONEPAD_TAB_PLUSW;
|
||||
break;
|
||||
case AE_RIGHT_TO_TOPLEFT:
|
||||
|
@ -741,7 +741,7 @@ static MovieTrackingTrack *find_nearest_track(SpaceClip *sc, MovieClip *clip, fl
|
||||
d2= dist_to_rect(co, marker->pos, cur->pat_min, cur->pat_max);
|
||||
|
||||
/* distance to search boundbox */
|
||||
if(sc->flag&SC_SHOW_MARKER_SEARCH)
|
||||
if(sc->flag&SC_SHOW_MARKER_SEARCH && TRACK_VIEW_SELECTED(sc, cur))
|
||||
d3= dist_to_rect(co, marker->pos, cur->search_min, cur->search_max);
|
||||
|
||||
/* choose minimal distance. useful for cases of overlapped markers. */
|
||||
|
@ -746,7 +746,7 @@ static int rna_StringProperty_max_length_get(PointerRNA *ptr)
|
||||
return ((StringPropertyRNA*)prop)->maxlength;
|
||||
}
|
||||
|
||||
static EnumPropertyItem *rna_EnumProperty_default_itemf(bContext *C, PointerRNA *ptr, PropertyRNA *UNUSED(prop), int *free)
|
||||
static EnumPropertyItem *rna_EnumProperty_default_itemf(bContext *C, PointerRNA *ptr, PropertyRNA *prop_parent, int *free)
|
||||
{
|
||||
PropertyRNA *prop= (PropertyRNA*)ptr->data;
|
||||
EnumPropertyRNA *eprop;
|
||||
@ -754,6 +754,11 @@ static EnumPropertyItem *rna_EnumProperty_default_itemf(bContext *C, PointerRNA
|
||||
rna_idproperty_check(&prop, ptr);
|
||||
eprop= (EnumPropertyRNA*)prop;
|
||||
|
||||
/* incompatible default attributes */
|
||||
if ((prop_parent->flag & PROP_ENUM_FLAG) != (prop->flag & PROP_ENUM_FLAG)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if( (eprop->itemf == NULL) ||
|
||||
(eprop->itemf == rna_EnumProperty_default_itemf) ||
|
||||
(ptr->type == &RNA_EnumProperty) ||
|
||||
|
Loading…
Reference in New Issue
Block a user