X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fawindowgui.C;h=4dc1ce2853d26250839170642f34ea931616dd1a;hb=85a4302e7031b0285aeb9559aa6dbc531db6e443;hp=4688e7bc04cead9a205e6a0fd67288640dc10b25;hpb=9303c74f396d12f0fb48639ff6a835824cbc5987;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/cinelerra/awindowgui.C b/cinelerra-5.1/cinelerra/awindowgui.C index 4688e7bc..4dc1ce28 100644 --- a/cinelerra-5.1/cinelerra/awindowgui.C +++ b/cinelerra-5.1/cinelerra/awindowgui.C @@ -29,6 +29,7 @@ #include "awindow.h" #include "awindowgui.h" #include "bccmodels.h" +#include "bcdisplayinfo.h" #include "bchash.h" #include "bcsignals.h" #include "bctimer.h" @@ -127,7 +128,7 @@ VFrame *AssetVIcon::frame() AssetVIconThread *avt = picon->gui->vicon_thread; Indexable *idxbl = picon->indexable; Asset *asset = idxbl && idxbl->is_asset ? (Asset *)idxbl : 0; - if( !asset ) return vframes()>0 ? (VFrame*)*images[0] : 0; + if( !asset ) return vframes()>0 ? images[0]->vfrm : 0; if( !asset->video_data && audio_data && audio_size && length > 0 ) { if( !temp ) temp = new VFrame(0, -1, w, h, BC_RGB888, -1); temp->clear_frame(); @@ -173,15 +174,17 @@ VFrame *AssetVIcon::frame() File *file = mwindow->video_cache->check_out(asset, mwindow->edl, 1); if( !file ) { broken = 1; return 0; } Timer timer; - while( file && seq_no >= images.size() && !avt->interrupted ) { + 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); + if( seq_no < images.size() ) break; mwindow->video_cache->check_in(asset); if( timer.get_difference() > 500 ) return 0; Thread::yield(); + if( avt->interrupted ) return 0; file = mwindow->video_cache->check_out(asset, mwindow->edl, 0); for( int retries=10; !file && --retries>=0; usleep(1000) ) { if( avt->interrupted ) return 0; @@ -192,7 +195,7 @@ VFrame *AssetVIcon::frame() mwindow->video_cache->check_in(asset); } if( seq_no >= images.size() ) return 0; - return *images[seq_no]; + return images[seq_no]->vfrm; } int64_t AssetVIcon::set_seq_no(int64_t no) @@ -945,6 +948,11 @@ void AssetPicon::create_objects() if( asset->video_data ) { if( mwindow->preferences->use_thumbnails ) { gui->unlock_window(); + char string[BCTEXTLEN]; + sprintf(string, _("Reading %s"), name); + mwindow->gui->lock_window("AssetPicon::create_objects"); + mwindow->gui->show_message(string); + mwindow->gui->unlock_window(); File *file = mwindow->video_cache->check_out(asset, mwindow->edl, 1); @@ -968,11 +976,6 @@ void AssetPicon::create_objects() asset->width, asset->height, BC_RGB888, -1); } - { char string[BCTEXTLEN]; - sprintf(string, _("Reading %s"), name); - mwindow->gui->lock_window("AssetPicon::create_objects"); - mwindow->gui->show_message(string); - mwindow->gui->unlock_window(); } file->read_frame(gui->temp_picon); mwindow->video_cache->check_in(asset); @@ -2073,6 +2076,21 @@ void AWindowGUI::update_asset_list() AssetPicon *picon = new AssetPicon(mwindow, this, current); new_assets.append(picon); + if( current->width > ASSET_MAX_WIDTH || current->height > ASSET_MAX_HEIGHT ) { + eprintf(_("Warning: %s\n" + " dimensions %dx%d exceed asset maximum limits %dx%d\n"), + current->path, current->width, current->height, + ASSET_MAX_WIDTH, ASSET_MAX_HEIGHT); + } + else if( mwindow->edl->session->playback_config->vconfig->driver == PLAYBACK_X11_GL ) { + int texture_limit = BC_DisplayInfo::get_gl_max_texture_size(); + if( texture_limit >= 0 && + (current->width >= texture_limit || current->height >= texture_limit) ) { + eprintf(_("Warning: %s\n" + " dimensions %dx%d exceed OpenGL texture limit %d\n"), + current->path, current->width, current->height, texture_limit); + } + } } } @@ -2863,6 +2881,18 @@ int AWindowAssets::selection_changed() deactivate_selection(); } + else if( get_button_down() && get_buttonpress() == LEFT_BUTTON && + get_double_click() ) { + item = (AssetPicon*)get_selection(0, 0); + if( item ) { + switch( folder ) { + case AW_LABEL_FOLDER: + if( !item->label ) break; + mwindow->set_position(item->label->position); + break; + } + } + } else if( get_button_down() && !gui->play_off && mwindow->edl->session->assetlist_format != ASSETS_TEXT ) { item = (AssetPicon*)get_selection(0, 0);