projects
/
goodguy
/
history.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
last push faux paux, update shortcuts doc, period/comma alt shortcuts, popup deactiva...
[goodguy/history.git]
/
cinelerra-5.1
/
guicast
/
vicon.C
diff --git
a/cinelerra-5.1/guicast/vicon.C
b/cinelerra-5.1/guicast/vicon.C
index 906fb6e938556377af762768e82dd8cd9428a823..031e9530c2b9c0bb5c22481efed7811e41b9bbe9 100644
(file)
--- a/
cinelerra-5.1/guicast/vicon.C
+++ b/
cinelerra-5.1/guicast/vicon.C
@@
-2,7
+2,7
@@
#include "bctimer.h"
#include "bcwindow.h"
#include "bctimer.h"
#include "bcwindow.h"
-#include "colors.h"
+#include "
bc
colors.h"
#include "keys.h"
#include "mutex.h"
#include "condition.h"
#include "keys.h"
#include "mutex.h"
#include "condition.h"
@@
-13,16
+13,22
@@
VIcon(int vw, int vh, double rate)
this->vw = vw;
this->vh = vh;
this->frame_rate = rate;
this->vw = vw;
this->vh = vh;
this->frame_rate = rate;
- this->cycle_start = 0;
- this->age = 0;
- this->seq_no = 0;
- this->in_use = 1;
+
+ cycle_start = 0;
+ age = 0;
+ seq_no = 0;
+ in_use = 1;
+ hidden = 0;
+ audio_data = 0;
+ audio_size = 0;
+ playing_audio = 0;
}
VIcon::
~VIcon()
{
clear_images();
}
VIcon::
~VIcon()
{
clear_images();
+ delete [] audio_data;
}
void VIcon::
}
void VIcon::
@@
-76,7
+82,7
@@
VIconThread(BC_WindowBase *wdw, int vw, int vh)
timer = new Timer();
this->refresh_rate = VICON_RATE;
done = 0;
timer = new Timer();
this->refresh_rate = VICON_RATE;
done = 0;
- interrupted = 1;
+ interrupted =
-
1;
}
VIconThread::
}
VIconThread::
@@
-87,8
+93,8
@@
VIconThread::
draw_lock->unlock();
if( Thread::running() ) {
Thread::cancel();
draw_lock->unlock();
if( Thread::running() ) {
Thread::cancel();
- Thread::join();
}
}
+ Thread::join();
t_heap.remove_all_objects();
delete timer;
delete draw_lock;
t_heap.remove_all_objects();
delete timer;
delete draw_lock;
@@
-100,8
+106,9
@@
start_drawing()
wdw->lock_window("VIconThread::start_drawing");
if( view_win )
wdw->set_active_subwindow(view_win);
wdw->lock_window("VIconThread::start_drawing");
if( view_win )
wdw->set_active_subwindow(view_win);
- if( interrupted )
+ if( interrupted
< 0
)
draw_lock->unlock();
draw_lock->unlock();
+ interrupted = 0;
wdw->unlock_window();
}
wdw->unlock_window();
}
@@
-110,7
+117,8
@@
stop_drawing()
{
wdw->lock_window("VIconThread::stop_drawing");
set_view_popup(0);
{
wdw->lock_window("VIconThread::stop_drawing");
set_view_popup(0);
- interrupted = 1;
+ if( !interrupted )
+ interrupted = 1;
wdw->unlock_window();
}
wdw->unlock_window();
}
@@
-130,6
+138,7
@@
int ViewPopup::button_press_event()
bool VIconThread::
visible(VIcon *vicon, int x, int y)
{
bool VIconThread::
visible(VIcon *vicon, int x, int y)
{
+ if( vicon->hidden ) return false;
int y0 = 0;
int my = y + vicon->vh;
if( my <= y0 ) return false;
int y0 = 0;
int my = y + vicon->vh;
if( my <= y0 ) return false;
@@
-203,6
+212,8
@@
int VIconThread::del_vicon(VIcon *&vicon)
void VIconThread::set_view_popup(VIcon *vicon)
{
void VIconThread::set_view_popup(VIcon *vicon)
{
+ if( !vicon && this->vicon )
+ this->vicon->stop_audio();
this->vicon = vicon;
}
this->vicon = vicon;
}
@@
-214,6
+225,7
@@
update_view()
VFrame *frame = viewing->frame();
view_win = new_view_window(frame);
view_win->show_window();
VFrame *frame = viewing->frame();
view_win = new_view_window(frame);
view_win->show_window();
+ vicon->start_audio();
}
wdw->set_active_subwindow(view_win);
return 1;
}
wdw->set_active_subwindow(view_win);
return 1;
@@
-260,9
+272,8
@@
run()
{
while(!done) {
draw_lock->lock("VIconThread::run 0");
{
while(!done) {
draw_lock->lock("VIconThread::run 0");
- if( done ) break;
;
+ if( done ) break;
wdw->lock_window("BC_WindowBase::run 1");
wdw->lock_window("BC_WindowBase::run 1");
- interrupted = 0;
drawing_started();
reset_images();
int64_t seq_no = 0, now = 0;
drawing_started();
reset_images();
int64_t seq_no = 0, now = 0;
@@
-275,7
+286,11
@@
run()
now = timer->get_difference();
if( now >= draw_flash ) break;
draw(next);
now = timer->get_difference();
if( now >= draw_flash ) break;
draw(next);
- if( !next->seq_no ) next->cycle_start = now;
+ if( !next->seq_no ) {
+ next->cycle_start = now;
+ if( next->playing_audio )
+ next->start_audio();
+ }
int64_t ref_no = (now - next->cycle_start) / 1000. * refresh_rate;
int count = ref_no - next->seq_no;
if( count < 1 ) count = 1;
int64_t ref_no = (now - next->cycle_start) / 1000. * refresh_rate;
int count = ref_no - next->seq_no;
if( count < 1 ) count = 1;
@@
-316,6
+331,14
@@
run()
}
}
}
}
+
+void VIcon::init_audio(int audio_size)
+{
+ this->audio_size = audio_size;
+ audio_data = new uint8_t[audio_size];
+ memset(audio_data, 0, audio_size);
+}
+
void VIcon::dump(const char *dir)
{
mkdir(dir,0777);
void VIcon::dump(const char *dir)
{
mkdir(dir,0777);