X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fvrender.C;h=42f83ef87e7d86e57a2c84a8bf7b4781fad41984;hb=5621db270ccbeabc106e0f438941dba6f930652b;hp=f46a4096b95f8b3750725b7411b04467f9954946;hpb=9d832a1fff11b11aaa1108c460690ed05e2bdc05;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/vrender.C b/cinelerra-5.1/cinelerra/vrender.C index f46a4096..42f83ef8 100644 --- a/cinelerra-5.1/cinelerra/vrender.C +++ b/cinelerra-5.1/cinelerra/vrender.C @@ -247,43 +247,37 @@ int VRender::get_use_vconsole(VEdit **playable_edit, } -int VRender::get_colormodel(VEdit *playable_edit, - int use_vconsole, int use_brender) +int VRender::get_colormodel(VEdit *playable_edit, int use_vconsole, int use_brender) { + EDL *edl = renderengine->get_edl(); int colormodel = renderengine->get_edl()->session->color_model; - - if(!use_vconsole && !renderengine->command->single_frame()) - { + VideoOutConfig *vconfig = renderengine->config->vconfig; +// check for playback: no plugins, not single frame + if( !use_vconsole && !renderengine->command->single_frame() ) { // Get best colormodel supported by the file - int driver = renderengine->config->vconfig->driver; - File *file; - Asset *asset; - - if(use_brender) - { - asset = renderengine->preferences->brender_asset; - } - else - { - int64_t source_position = 0; - asset = playable_edit->get_nested_asset(&source_position, - current_position, +// colormodel yuv/rgb affects mpeg/jpeg color range, +// dont mix them or loose color acccuracy + int64_t source_position = 0; + Asset *asset = use_brender ? + renderengine->preferences->brender_asset : + playable_edit->get_nested_asset(&source_position, current_position, renderengine->command->get_direction()); - } - if( asset ) - { - file = renderengine->get_vcache()->check_out(asset, - renderengine->get_edl()); - - if(file) - { - colormodel = file->get_best_colormodel(driver); -//printf("VRender::get_colormodel %d driver=%d colormodel=%d\n", __LINE__, driver, colormodel); + if( asset ) { + File *file = renderengine->get_vcache()->check_out(asset, edl); + if( file ) { +// damn the color range, full speed ahead + if( vconfig->driver == PLAYBACK_X11 && vconfig->use_direct_x11 && + file->colormodel_supported(BC_BGR8888) == BC_BGR8888 ) + colormodel = BC_BGR8888; + else { +// file favorite colormodel may mismatch rgb/yuv + int vstream = playable_edit ? playable_edit->channel : -1; + int best_colormodel = file->get_best_colormodel(vconfig->driver, vstream); + if( BC_CModels::is_yuv(best_colormodel) == BC_CModels::is_yuv(colormodel) ) + colormodel = best_colormodel; + } renderengine->get_vcache()->check_in(asset); } -// ffmpeg files are side effected by color_model, affects colorspace,color_range -// if( asset->format == FILE_FFMPEG && !BC_CModels::is_yuv(colormodel) ) -// colormodel = BC_BGR8888; } } @@ -291,11 +285,6 @@ int VRender::get_colormodel(VEdit *playable_edit, } - - - - - void VRender::run() { int reconfigure; @@ -473,9 +462,9 @@ void VRender::run() __LINE__, current_position, done); // Update tracking. - if(renderengine->command->realtime && - renderengine->playback_engine && - renderengine->command->command != CURRENT_FRAME) + if(renderengine->command->realtime && renderengine->playback_engine && + renderengine->command->command != CURRENT_FRAME && + renderengine->command->command != LAST_FRAME) { renderengine->playback_engine->update_tracking(fromunits(current_position)); }