// create overlay
device->mwindow->gui->lock_window("VDeviceX11::close_all");
- screencap_border[0] = new BC_Popup(device->mwindow->gui,
+ screencap_border[0] = new BC_Popup(device->mwindow->gui,
device->input_x - SCREENCAP_PIXELS, device->input_y - SCREENCAP_PIXELS,
device->in_config->w + SCREENCAP_PIXELS * 2, SCREENCAP_PIXELS,
SCREENCAP_COLOR, 1);
- screencap_border[1] = new BC_Popup(device->mwindow->gui,
+ screencap_border[1] = new BC_Popup(device->mwindow->gui,
device->input_x - SCREENCAP_PIXELS, device->input_y,
SCREENCAP_PIXELS, device->in_config->h,
SCREENCAP_COLOR, 1);
- screencap_border[2] = new BC_Popup(device->mwindow->gui,
+ screencap_border[2] = new BC_Popup(device->mwindow->gui,
device->input_x - SCREENCAP_PIXELS, device->input_y + device->in_config->h,
device->in_config->w + SCREENCAP_PIXELS * 2, SCREENCAP_PIXELS,
SCREENCAP_COLOR, 1);
- screencap_border[3] = new BC_Popup(device->mwindow->gui,
+ screencap_border[3] = new BC_Popup(device->mwindow->gui,
device->input_x + device->in_config->w, device->input_y,
SCREENCAP_PIXELS, device->in_config->h,
SCREENCAP_COLOR, 1);
+usleep(500000); // avoids a bug in gnome-shell 2017/10/19
- for( int i=0; i<SCREENCAP_BORDERS; ++i ) {
- BC_Popup *box = screencap_border[i];
- box->set_bg_color(SCREENCAP_COLOR);
- box->clear_box(0, 0, box->get_w(), box->get_h());
- box->flash(0);
- box->show_window();
- }
+ for( int i=0; i<SCREENCAP_BORDERS; ++i )
+ screencap_border[i]->show_window(0);
+ device->mwindow->gui->flush();
device->mwindow->gui->unlock_window();
return 0;
if( output ) {
output->lock_canvas("VDeviceX11::close_all 1");
output->get_canvas()->lock_window("VDeviceX11::close_all 1");
- }
-
- if( output && output_frame ) {
- output->update_refresh(device, output_frame);
- if( device->single_frame )
- output->draw_refresh();
- }
-
- delete bitmap; bitmap = 0;
- delete output_frame; output_frame = 0;
- delete capture_bitmap; capture_bitmap = 0;
-
- if( output ) {
+ int video_on = output->get_canvas()->get_video_on();
// Update the status bug
if( !device->single_frame ) {
output->stop_video();
else {
output->stop_single();
}
+ if( output_frame ) {
+ output->update_refresh(device, output_frame);
+// if the last frame is good, don't draw over it
+ if( !video_on || output->need_overlays() )
+ output->draw_refresh(1);
+ }
+ }
+
+ delete bitmap; bitmap = 0;
+ delete output_frame; output_frame = 0;
+ delete capture_bitmap; capture_bitmap = 0;
+ if( output ) {
output->get_canvas()->unlock_window();
output->unlock_canvas();
}
if( device->out_config->driver == PLAYBACK_X11_GL ) {
if( file_colormodel == BC_RGB888 ||
- file_colormodel == BC_RGBA8888 ||
- file_colormodel == BC_YUV888 ||
- file_colormodel == BC_YUVA8888 ||
- file_colormodel == BC_RGB_FLOAT ||
- file_colormodel == BC_RGBA_FLOAT ) {
+ file_colormodel == BC_RGBA8888 ||
+ file_colormodel == BC_YUV888 ||
+ file_colormodel == BC_YUVA8888 ||
+ file_colormodel == BC_RGB_FLOAT ||
+ file_colormodel == BC_RGBA_FLOAT ) {
return file_colormodel;
}
}
}
-// 2 more colormodels are supported by OpenGL
- if( device->out_config->driver == PLAYBACK_X11_GL ) {
- if( file_colormodel == BC_RGB_FLOAT ||
- file_colormodel == BC_RGBA_FLOAT )
- result = file_colormodel;
- }
-
if( result < 0 ) {
switch( file_colormodel ) {
case BC_RGB888:
output->get_canvas()->lock_window("VDeviceX11::write_buffer 2");
}
}
- else
- if( bitmap->hardware_scaling() ) {
- output->get_canvas()->draw_bitmap(bitmap, !device->single_frame,
- (int)canvas_x1, (int)canvas_y1,
- (int)(canvas_x2 - canvas_x1), (int)(canvas_y2 - canvas_y1),
- (int)output_x1, (int)output_y1,
- (int)(output_x2 - output_x1), (int)(output_y2 - output_y1),
- 0);
- }
else {
+ if( bitmap->hardware_scaling() ) {
+ output->get_canvas()->draw_bitmap(bitmap, !device->single_frame,
+ (int)canvas_x1, (int)canvas_y1,
+ (int)(canvas_x2 - canvas_x1), (int)(canvas_y2 - canvas_y1),
+ (int)output_x1, (int)output_y1,
+ (int)(output_x2 - output_x1), (int)(output_y2 - output_y1),
+ 0);
+ }
+ else {
//printf("VDeviceX11::write_buffer %d x=%d y=%d w=%d h=%d\n",
// __LINE__, (int)canvas_x1, (int)canvas_y1,
// output->get_canvas()->get_w(), output->get_canvas()->get_h());
-
- output->get_canvas()->draw_bitmap(bitmap, !device->single_frame,
- (int)canvas_x1, (int)canvas_y1,
- (int)(canvas_x2 - canvas_x1), (int)(canvas_y2 - canvas_y1),
- 0, 0,
- (int)(canvas_x2 - canvas_x1), (int)(canvas_y2 - canvas_y1),
- 0);
+ output->get_canvas()->draw_bitmap(bitmap, !device->single_frame,
+ (int)canvas_x1, (int)canvas_y1,
+ (int)(canvas_x2 - canvas_x1), (int)(canvas_y2 - canvas_y1),
+ 0, 0,
+ (int)(canvas_x2 - canvas_x1), (int)(canvas_y2 - canvas_y1),
+ 0);
//printf("VDeviceX11::write_buffer %d bitmap=%p\n", __LINE__, bitmap);
+ }
+ if( !output->get_canvas()->get_video_on() )
+ output->get_canvas()->flash(0);
}
output->get_canvas()->unlock_window();