X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fguicast%2Fbcxfer.C;h=8eb6533baa68b7cc8b3fe1d763f03d65a3d28b4e;hb=f5725c7e12def18fec49a295dad688652edaa4b3;hp=4b98f1188c76efd4b660e6dafbfcf12c1d42b270;hpb=8fd64d1d3770c95e2a7cba1049e909cadb4e1fbf;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/guicast/bcxfer.C b/cinelerra-5.1/guicast/bcxfer.C index 4b98f118..8eb6533b 100644 --- a/cinelerra-5.1/guicast/bcxfer.C +++ b/cinelerra-5.1/guicast/bcxfer.C @@ -176,11 +176,17 @@ void BC_CModels::transfer(unsigned char **output_rows, unsigned char **input_row int in_colormodel, int out_colormodel, int bg_color, int in_rowspan, int out_rowspan) { - BC_Xfer xfer(output_rows, input_rows, - out_yp, out_up, out_vp, in_yp, in_up, in_vp, - in_x, in_y, in_w, in_h, out_x, out_y, out_w, out_h, - in_colormodel, out_colormodel, bg_color,0xff, in_rowspan, out_rowspan); - xfer.xfer(); + int ret = 1; + if( in_w > 0 && in_h > 0 && out_w > 0 && out_h > 0 ) { + BC_Xfer xfer(output_rows, input_rows, + out_yp, out_up, out_vp, in_yp, in_up, in_vp, + in_x, in_y, in_w, in_h, out_x, out_y, out_w, out_h, + in_colormodel, out_colormodel, bg_color,0xff, in_rowspan, out_rowspan); + ret = xfer.xfer(); + } + if( ret ) + printf("BC_CModels::transfer failed:%d %d(%dx%d) to %d(%dx%d)\n", __LINE__, + in_colormodel, in_w, in_h, out_colormodel, out_w, out_h); } void BC_CModels::transfer( @@ -190,23 +196,36 @@ void BC_CModels::transfer( int in_x, int in_y, int in_w, int in_h, int in_rowspan, int bg_color) { - BC_Xfer xfer( - output_ptrs, out_colormodel, out_x, out_y, out_w, out_h, out_rowspan, - input_ptrs, in_colormodel, in_x, in_y, in_w, in_h, in_rowspan, - bg_color,0xff); - xfer.xfer(); + int ret = 1; + if( in_w > 0 && in_h > 0 && out_w > 0 && out_h > 0 ) { + BC_Xfer xfer( + output_ptrs, out_colormodel, out_x, out_y, out_w, out_h, out_rowspan, + input_ptrs, in_colormodel, in_x, in_y, in_w, in_h, in_rowspan, + bg_color,0xff); + ret = xfer.xfer(); + } + if( ret ) + printf("BC_CModels::transfer failed:%d %d(%dx%d) to %d(%dx%d)\n", __LINE__, + in_colormodel, in_w, in_h, out_colormodel, out_w, out_h); } // color is rgb -void BC_CModels::init_color(int color, int alpha, +int BC_CModels::init_color(int color, int alpha, unsigned char **output_rows, int out_colormodel, unsigned char *out_yp, unsigned char *out_up, unsigned char *out_vp, int out_x, int out_y, int out_w, int out_h, int out_rowspan) { - BC_Xfer xfer(output_rows, 0, out_yp,out_up,out_vp, 0,0,0, - 0,0,0,0, out_x,out_y,out_w,out_h, BC_TRANSPARENCY, - out_colormodel, color,alpha, 0, out_rowspan); - xfer.xfer(); + int ret = 1; + if( out_w > 0 && out_h > 0 ) { + BC_Xfer xfer(output_rows, 0, out_yp,out_up,out_vp, 0,0,0, + 0,0,0,0, out_x,out_y,out_w,out_h, BC_TRANSPARENCY, + out_colormodel, color,alpha, 0, out_rowspan); + ret = xfer.xfer(); + } + if( ret ) + printf("BC_CModels::init_color failed:%d(%dx%d)\n", + out_colormodel, out_w, out_h); + return ret; } // specialized functions @@ -262,9 +281,9 @@ BC_Xfer::Slicer *BC_Xfer::SlicerList::get_slicer(BC_Xfer *xp) return slicer; } -void BC_Xfer::xfer_slices(int slices) +int BC_Xfer::xfer_slices(int slices) { - if( !xfn ) return; + if( !xfn ) return 1; int max_slices = BC_Resources::machine_cpus/2; if( slices > max_slices ) slices = max_slices; if( slices < 1 ) slices = 1; @@ -291,6 +310,7 @@ void BC_Xfer::xfer_slices(int slices) slicers.append(active[i]); slicers.unlock(); } + return 0; } BC_Xfer::Slicer::Slicer(BC_Xfer *xp)