projects
/
goodguy
/
history.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ffmpeg filter memory leak, cursor hopper fix, added leaker.C, misc fixes
[goodguy/history.git]
/
cinelerra-5.1
/
cinelerra
/
canvas.C
diff --git
a/cinelerra-5.1/cinelerra/canvas.C
b/cinelerra-5.1/cinelerra/canvas.C
index b2bd838ddb01d94c81b535e1e8a6c517cc87766a..72d8a906544c86c63ab63b2f1d94ea5c9e675b93 100644
(file)
--- a/
cinelerra-5.1/cinelerra/canvas.C
+++ b/
cinelerra-5.1/cinelerra/canvas.C
@@
-30,6
+30,8
@@
#include "mwindowgui.h"
#include "mutex.h"
#include "mwindow.h"
#include "mwindowgui.h"
#include "mutex.h"
#include "mwindow.h"
+#include "playback3d.h"
+#include "videodevice.h"
#include "vframe.h"
#include "vframe.h"
@@
-838,17
+840,40
@@
int Canvas::keypress_event(BC_WindowBase *caller)
return 1;
}
return 1;
}
+void Canvas::update_refresh(VideoDevice *device, VFrame *output_frame)
+{
+ int best_color_model = output_frame->get_color_model();
+ int use_opengl =
+ device->out_config->driver == PLAYBACK_X11_GL &&
+ output_frame->get_opengl_state() == VFrame::SCREEN;
+// OpenGL does YUV->RGB in the compositing step
+ if( use_opengl )
+ best_color_model = BC_RGB888;
+ if( refresh_frame &&
+ (refresh_frame->get_w() != device->out_w ||
+ refresh_frame->get_h() != device->out_h ||
+ refresh_frame->get_color_model() != best_color_model) ) {
+ delete refresh_frame; refresh_frame = 0;
+ }
+ if( !refresh_frame ) {
+ refresh_frame =
+ new VFrame(device->out_w, device->out_h, best_color_model);
+ }
+ if( use_opengl ) {
+ get_canvas()->unlock_window();
+ unlock_canvas();
-
-
-
-
-
-
+ mwindow->playback_3d->copy_from(this, refresh_frame, output_frame, 0);
+ lock_canvas(" Canvas::output_refresh");
+ get_canvas()->lock_window(" Canvas::output_refresh");
+ }
+ else
+ refresh_frame->copy_from(output_frame);
+}