X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fguicast%2Fvicon.C;h=c0d9dfa34a0d061a184200edec85a4308b96748c;hp=5ebec4852dd3904d1bf6c18b2e1373f6619a5ea0;hb=c4c898707e3fdbf2979b7bc43ac0e1b0fa779663;hpb=6c5258a9791775f706e55c280da75ed6f6ef1720 diff --git a/cinelerra-5.1/guicast/vicon.C b/cinelerra-5.1/guicast/vicon.C index 5ebec485..c0d9dfa3 100644 --- a/cinelerra-5.1/guicast/vicon.C +++ b/cinelerra-5.1/guicast/vicon.C @@ -35,8 +35,7 @@ void VIcon:: add_image(VFrame *frm, int ww, int hh, int vcmdl) { VIFrame *vifrm = new VIFrame(ww, hh, vcmdl); - VFrame *img = *vifrm; - img->transfer_from(frm); + vifrm->vfrm->transfer_from(frm); images.append(vifrm); } @@ -279,9 +278,10 @@ update_view(int do_audio) { if( viewing ) viewing->stop_audio(); delete view_win; view_win = 0; - if( (viewing=vicon) != 0 ) { + VFrame *vfrm; + if( (viewing=vicon) != 0 && (vfrm=viewing->frame()) != 0 ) { view_win = new_view_window(0); - view_win->draw_vframe(viewing->frame()); + view_win->draw_vframe(vfrm); view_win->flash(0); view_win->show_window(); if( do_audio ) vicon->start_audio(); @@ -292,14 +292,15 @@ update_view(int do_audio) int VIconThread::zoom_scale(int dir) { - if( !viewing || !view_win ) return 0; + VFrame *vfrm; + if( !viewing || !view_win || !(vfrm=viewing->frame()) ) return 0; int view_h = this->view_h; view_h += dir*view_h/10 + dir; bclamp(view_h, 16,512); this->view_h = view_h; this->view_w = view_h * vw/vh; new_view_window(view_win); - view_win->draw_vframe(viewing->frame()); + view_win->draw_vframe(vfrm); view_win->flash(1); return 1; } @@ -328,13 +329,14 @@ draw(VIcon *vicon) int draw_img = visible(vicon, x, y); int draw_win = view_win && viewing == vicon ? 1 : 0; if( !draw_img && !draw_win ) return 0; - if( !vicon->frame() ) return 0; + VFrame *vfrm = vicon->frame(); + if( !vfrm ) return 0; if( draw_img ) { vicon->draw_vframe(this, wdw, x, y); img_dirty = 1; } if( draw_win ) { - view_win->draw_vframe(vicon->frame()); + view_win->draw_vframe(vfrm); win_dirty = 1; } return 1; @@ -384,7 +386,7 @@ run() update_view(1); if( !solo ) { VIcon *next = low_vicon(); - while( next && next->age < draw_flash ) { + while( !interrupted && next && next->age < draw_flash ) { if( show_vicon(next) ) break; add_vicon(next); next = low_vicon(); @@ -434,10 +436,11 @@ void VIcon::dump(const char *dir) { mkdir(dir,0777); for( int i=0; ivfrm; + if( !vfrm ) continue; char fn[1024]; sprintf(fn,"%s/img%05d.png",dir,i); printf("\r%s",fn); - VFrame *img = *images[i]; - img->write_png(fn); + vfrm->write_png(fn); } printf("\n"); }