{
this->picon = picon;
this->length = length;
+ temp = 0;
}
AssetVIcon::~AssetVIcon()
{
+ delete temp;
}
VFrame *AssetVIcon::frame()
MWindow *mwindow = picon->mwindow;
Asset *asset = (Asset *)picon->indexable;
File *file = mwindow->video_cache->check_out(asset, mwindow->edl, 1);
- if( !file ) return 0;
- VFrame frame(asset->width, asset->height, BC_RGB888);
- file->set_layer(0);
- file->set_video_position(images.size(),0);
+ if( !file ) return 0;
+ if( temp && (temp->get_w() != asset->width || temp->get_h() != asset->height) ) {
+ delete temp; temp = 0;
+ }
+ if( !temp )
+ temp = new VFrame(asset->width, asset->height, BC_RGB888);
int ww = picon->gui->vicon_thread->view_w;
int hh = picon->gui->vicon_thread->view_h;
while( seq_no >= images.size() ) {
- file->read_frame(&frame);
- add_image(&frame, ww, hh, BC_RGB8);
+ file->set_layer(0);
+ int64_t pos = images.size() / picon->gui->vicon_thread->refresh_rate * frame_rate;
+ file->set_video_position(pos,0);
+ file->read_frame(temp);
+ add_image(temp, ww, hh, BC_RGB8);
}
mwindow->video_cache->check_in(asset);
}
- return images[seq_no];
+ return *images[seq_no];
}
-int64_t AssetVIcon::next_frame(int n)
+int64_t AssetVIcon::set_seq_no(int64_t no)
{
- age += n * period;
- if( (seq_no+=n) >= length ) seq_no = 0;
- return seq_no;
+ if( no >= length ) no = 0;
+ return seq_no = no;
}
int AssetVIcon::get_vx()
int pixmap_w, pixmap_h;
const int debug = 0;
- pixmap_h = 50;
+ pixmap_h = 50 * BC_WindowBase::get_resources()->icon_scale;
if(debug) printf("AssetPicon::create_objects %d\n", __LINE__);
if(indexable)
icon_vframe->transfer_from(gui->temp_picon);
// vicon images
double framerate = asset->get_frame_rate();
- if( !framerate ) framerate = 24;
- int64_t length = framerate * 5;
- int64_t vframes = asset->get_video_frames();
- if( length > vframes ) length = vframes;
+ if( !framerate ) framerate = VICON_RATE;
+ int64_t frames = asset->get_video_frames();
+ double secs = frames / framerate;
+ if( secs > 5 ) secs = 5;
+ int64_t length = secs * gui->vicon_thread->refresh_rate;
vicon = new AssetVIcon(this, pixmap_w, pixmap_h, framerate, length);
gui->vicon_thread->add_vicon(vicon);
if(debug) printf("AssetPicon::create_objects %d\n", __LINE__);
vtransition_icon = new BC_Pixmap(this, vtransition_vframe, PIXMAP_ALPHA);
aeffect_vframe = mwindow->theme->get_image("aeffect_icon");
aeffect_icon = new BC_Pixmap(this, aeffect_vframe, PIXMAP_ALPHA);
- ladspa_vframe = new VFrame(lad_picon_png);
+ ladspa_vframe = new VFramePng(lad_picon_png);
ladspa_icon = new BC_Pixmap(this, ladspa_vframe, PIXMAP_ALPHA);
- ff_aud_vframe = new VFrame(ff_audio_png);
+ ff_aud_vframe = new VFramePng(ff_audio_png);
ff_aud_icon = new BC_Pixmap(this, ff_aud_vframe, PIXMAP_ALPHA);
- ff_vid_vframe = new VFrame(ff_video_png);
+ ff_vid_vframe = new VFramePng(ff_video_png);
ff_vid_icon = new BC_Pixmap(this, ff_vid_vframe, PIXMAP_ALPHA);
veffect_vframe = mwindow->theme->get_image("veffect_icon");
veffect_icon = new BC_Pixmap(this, veffect_vframe, PIXMAP_ALPHA);