X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fawindowgui.C;h=b74a0a7cadefa42cc258d79629b33897fc1f0a1c;hp=7f7300a8a0797c5d2ec90527a8189b14ccd895fc;hb=1da768016a2ecba0296b03d75c02879f99a0f582;hpb=a6e4ede4b9a11b56b3aece044ff2a1546630ca38 diff --git a/cinelerra-5.1/cinelerra/awindowgui.C b/cinelerra-5.1/cinelerra/awindowgui.C index 7f7300a8..b74a0a7c 100644 --- a/cinelerra-5.1/cinelerra/awindowgui.C +++ b/cinelerra-5.1/cinelerra/awindowgui.C @@ -164,27 +164,25 @@ VFrame *AssetVIcon::frame() } if( seq_no >= images.size() ) { MWindow *mwindow = picon->mwindow; - File *file = mwindow->video_cache->check_out(asset, mwindow->edl, 1); - if( !file ) { - broken = 1; - return 0; - } if( temp && (temp->get_w() != asset->width || temp->get_h() != asset->height) ) { delete temp; temp = 0; } if( !temp ) temp = new VFrame(0, -1, asset->width, asset->height, BC_RGB888, -1); - while( seq_no >= images.size() ) { - mwindow->video_cache->check_in(asset); - Thread::yield(); - file = mwindow->video_cache->check_out(asset, mwindow->edl, 0); - if( !file ) { usleep(1000); continue; } - file->set_layer(0); + File *file = mwindow->video_cache->check_out(asset, mwindow->edl, 1); + while( file && seq_no >= images.size() ) { int64_t pos = images.size() / picon->gui->vicon_thread->refresh_rate * frame_rate; file->set_video_position(pos,0); + file->set_layer(0); if( file->read_frame(temp) ) temp->clear_frame(); add_image(temp, vw, vh, vicon_cmodel); + mwindow->video_cache->check_in(asset); + Thread::yield(); + file = 0; + for( int retries=1000; !file && --retries>=0; usleep(10000) ) + file = mwindow->video_cache->check_out(asset, mwindow->edl, 0); } + if( !file ) { broken = 1; return 0; } mwindow->video_cache->check_in(asset); } return *images[seq_no];