int use_brender = 0;
int result = 0;
int use_cache = renderengine->command->single_frame();
- int use_asynchronous =
- renderengine->command->realtime &&
- renderengine->get_edl()->session->video_every_frame &&
- renderengine->get_edl()->session->video_asynchronous;
+// int use_asynchronous =
+// renderengine->command->realtime &&
+// renderengine->get_edl()->session->video_every_frame &&
+// renderengine->get_edl()->session->video_asynchronous;
const int debug = 0;
// Determine the rendering strategy for this frame.
// Get output buffer from device
if(renderengine->command->realtime && !renderengine->is_nested)
{
- renderengine->video->new_output_buffer(&video_out, colormodel);
+ renderengine->video->new_output_buffer(&video_out,
+ colormodel,
+ renderengine->get_edl());
}
if(debug) printf("VRender::process_buffer %d video_out=%p\n", __LINE__, video_out);
corrected_position--;
// Cache single frames only
- if(use_asynchronous)
- file->start_video_decode_thread();
- else
+// if(use_asynchronous)
+// file->start_video_decode_thread();
+// else
file->stop_video_thread();
if(use_cache) file->set_cache_frames(1);
int64_t normalized_position = (int64_t)(corrected_position *
renderengine->get_vcache(),
1,
use_cache,
- use_asynchronous);
+ 0);
+// use_asynchronous);
if(debug) printf("VRender::process_buffer %d\n", __LINE__);
}
}
-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());
- }
-// ffmpeg files are side effected by color_model, affects colorspace,color_range
- if( asset && asset->format != FILE_FFMPEG )
- {
- file = renderengine->get_vcache()->check_out(asset,
- renderengine->get_edl());
-
- if(file)
- {
- colormodel = file->get_best_colormodel(driver);
+ 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);
}
}
}
-
-
-
-
-
void VRender::run()
{
int reconfigure;
__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));
}