fix affine+interp, add dump_stack to dmp (duh, really)
authorGood Guy <good1.2guy@gmail.com>
Tue, 21 Jul 2020 16:32:20 +0000 (10:32 -0600)
committerGood Guy <good1.2guy@gmail.com>
Tue, 21 Jul 2020 16:32:20 +0000 (10:32 -0600)
cinelerra-5.1/cinelerra/affine.C
cinelerra-5.1/cinelerra/interp.h
cinelerra-5.1/guicast/bcsignals.C

index 25af1c983a7d0493f429b8a5ee98bfa9d6411c04..2842e062c1c991906f9ea0bfde745ae7e183e3e1 100644 (file)
@@ -242,8 +242,8 @@ void AffineUnit::process_package(LoadPackage *package)
        AffinePackage *pkg = (AffinePackage*)package;
        int min_in_x = server->in_x;
        int min_in_y = server->in_y;
-       int max_in_x = server->in_x + server->in_w - 1;
-       int max_in_y = server->in_y + server->in_h - 1;
+       int max_in_x = server->in_x + server->in_w;
+       int max_in_y = server->in_y + server->in_h;
 
 
 // printf("AffineUnit::process_package %d %d %d %d %d\n",
@@ -690,7 +690,7 @@ AffineEngine::AffineEngine(int total_clients, int total_packages)
 
 void AffineEngine::init_packages()
 {
-       int y1 = 0, npkgs = get_total_packages();
+       int y1 = out_y, npkgs = get_total_packages();
        for( int i=0; i<npkgs; ) {
                AffinePackage *package = (AffinePackage*)get_package(i);
                int y2 = out_y + (out_h * ++i / npkgs);
index ee183476925482bb6fd97237b1db5149af66ccb8..6cbcffbe9eeb45a9da086133afabce1c183a0977 100644 (file)
@@ -64,11 +64,11 @@ static inline float interp_cubic(float dx, float p0, float p1, float p2, float p
 
 
 #define bi_linear_SETUP(typ, components, tx, ty) \
-       float dx = (tx)-0.5, dy = (ty)-0.5; \
-       int itx = dx, ity = dy, in_comps = (components); \
-       if( (dx -= itx) < 0 ) dx += 1; \
-       if( (dy -= ity) < 0 ) dy += 1; \
-       int c0 = itx+0, c1 = itx+1, r0 = ity+0, r1 = ity+1; \
+       const int in_comps = components; \
+       float fx = (tx), fy = (ty); \
+       int c0 = floorf(fx), r0 = floorf(fy); \
+       float dx = fx-c0, dy = fy-r0; \
+       int c1 = c0+1, r1 = r0+1; \
        typ *r0p = r0>=in_min_y && r0<in_max_y ? ((typ**)interp_rows)[r0] : 0; \
        typ *r1p = r1>=in_min_y && r1<in_max_y ? ((typ**)interp_rows)[r1] : 0
 
@@ -83,12 +83,12 @@ static inline float interp_cubic(float dx, float p0, float p1, float p2, float p
 
 
 #define bi_cubic_SETUP(typ, components, tx, ty) \
-       float dx = (tx)-0.5, dy = (ty)-0.5; \
-       int itx = dx, ity = dy, in_comps = (components); \
-       if( (dx -= itx) < 0 ) dx += 1; \
-       if( (dy -= ity) < 0 ) dy += 1; \
-       int cp = itx-1, c0 = itx+0, c1 = itx+1, c2 = itx+2; \
-       int rp = ity-1, r0 = ity+0, r1 = ity+1, r2 = ity+2; \
+       const int in_comps = components; \
+       float fx = (tx), fy = (ty); \
+       int c0 = floorf(fx), r0 = floorf(fy); \
+       float dx = fx-c0, dy = fy-r0; \
+       int cp = c0-1, c1 = c0+1, c2 = c0+2; \
+       int rp = r0-1, r1 = r0+1, r2 = r0+2; \
        typ *rpp = rp>=in_min_y && rp<in_max_y ? ((typ**)interp_rows)[rp] : 0; \
        typ *r0p = r0>=in_min_y && r0<in_max_y ? ((typ**)interp_rows)[r0] : 0; \
        typ *r1p = r1>=in_min_y && r1<in_max_y ? ((typ**)interp_rows)[r1] : 0; \
index 779d7e40922ff8919bc2e190ce2dea1fee967f20..858ba409b097a80231adf41f5404e2b5d53cd583 100644 (file)
@@ -569,6 +569,7 @@ static void handle_dump(int n, siginfo_t * info, void *sc)
                fprintf(fp,"err opening: %s, %m\n", proc_mem);
        reg_dump(fp, c);
 #endif
+       BC_Signals::dump_stack(fp);
        fprintf(fp,"\n\n");
        if( fp != stdout ) fclose(fp);
 #ifndef NO_GDB