r665: Merged the official release 2.0.
[cinelerra_cv.git] / cinelerra / avc1394transport.C
blob04e8a6607404c7df281c0d6fa586aee807cf6a28
1 #include "avc1394transport.h"
2 #include "bcsignals.h"
3 #include "keys.h"
4 #include "language.h"
5 #include "recordmonitor.h"
7 #include <unistd.h>
9 #define POLL_INTERVAL 20000
11 AVC1394TransportThread::AVC1394TransportThread(BC_Title *label, 
12         AVC1394Control *avc)
13  : Thread(1, 0, 0)
15         this->label = label;
16         this->avc = avc;
17         done = 0;
20 AVC1394TransportThread::~AVC1394TransportThread()
22         done = 1;
23         end();
24         join();
27 void AVC1394TransportThread::run()
29         char *text;
30         while(!done)
31         {
32                 Thread::disable_cancel();
33 SET_TRACE
34                 text = avc->timecode();
35 SET_TRACE
36                 label->lock_window("AVC1394TransportThread::run 1");
37 SET_TRACE
38 // Sometimes text is set to NULL for some reason...
39                 if(text == NULL)
40                         label->update("Unknown");
41                 else
42                         label->update(text);
43 SET_TRACE
44                 label->unlock_window();
45 SET_TRACE
46                 Thread::enable_cancel();
47                 usleep(POLL_INTERVAL);
48         }
57 AVC1394Transport::AVC1394Transport(MWindow *mwindow,
58                 AVC1394Control *avc,
59                 BC_WindowBase *window,
60                 int x,
61                 int y)
63         this->mwindow = mwindow;
64         this->avc = avc;
65         this->window = window;
66         this->x = x;
67         this->y = y;
70 AVC1394Transport::~AVC1394Transport()
75 int AVC1394Transport::create_objects()
77         int x = this->x, y = this->y;
79         window->add_subwindow(start_button = new AVC1394GUISeekStart(mwindow, avc, x, y));
80         x += start_button->get_w();
81         window->add_subwindow(rewind_button = new AVC1394GUIRewind(mwindow, avc, x, y));
82         x += rewind_button->get_w();
83         window->add_subwindow(reverse_button = new  AVC1394GUIReverse(mwindow, avc, x, y));
84         x += reverse_button->get_w();
85         window->add_subwindow(stop_button = new  AVC1394GUIStop(mwindow, avc, x, y));
86     x += stop_button->get_w();
87         window->add_subwindow(pause_button = new AVC1394GUIPause(mwindow, avc, x, y));
88         x += pause_button->get_w();
89         window->add_subwindow(play_button = new  AVC1394GUIPlay(mwindow, avc, x, y));
90     x += play_button->get_w();
91         window->add_subwindow(fforward_button = new  AVC1394GUIFForward(mwindow, avc, x, y));
92         x += fforward_button->get_w();
93         window->add_subwindow(end_button = new AVC1394GUISeekEnd(mwindow, avc, x, y));
94         x += end_button->get_w();
96         x_end = x + 10;
98         return 0;
101 int AVC1394Transport::keypress_event(int keypress)
103         switch(keypress)
104         {
105                 case ' ':
106                         if(avc->current_command == PAUSE)
107                         {
108                                 avc->current_command = NORMAL_FWD;
109                                 avc->play();
110                         }
111                         else
112                         {
113                                 avc->current_command = PAUSE;
114                                 avc->pause();
115                         }
116                         break;
117         }
118         return 0;
121 void AVC1394Transport::reposition_window(int x, int y)
123         this->x = x;
124         this->y = y;
126         start_button->reposition_window(x, y);
127         x += start_button->get_w();
128         rewind_button->reposition_window(x, y);
129    x += rewind_button->get_w();
130         reverse_button->reposition_window(x, y);
131    x += reverse_button->get_w();
132         stop_button->reposition_window(x, y);
133    x += stop_button->get_w();
134         pause_button->reposition_window(x, y);
135         x += pause_button->get_w();
136         play_button->reposition_window(x, y);
137    x += play_button->get_w();
138         fforward_button->reposition_window(x, y);
139         x += fforward_button->get_w();
140         end_button->reposition_window(x, y);
142         x_end = x + 10;
154 AVC1394GUISeekStart::AVC1394GUISeekStart(MWindow *mwindow, AVC1394Control *avc, int x, int y)
155  : BC_Button(x, y, mwindow->theme->get_image_set("rewind"))
157    this->avc = avc;
158    set_tooltip(_("Rewind ( Home )"));
161 AVC1394GUISeekStart::~AVC1394GUISeekStart()
165 int AVC1394GUISeekStart::handle_event()
167         avc->current_command = COMMAND_NONE;
168     avc->seek("00:00:00:00");
169     return 1;
172 int  AVC1394GUISeekStart::keypress_event()
174         if(get_keypress() == HOME) return handle_event();
175         return 0;
179 AVC1394GUIRewind::AVC1394GUIRewind(MWindow *mwindow, AVC1394Control *avc, int x, int y)
180  : BC_Button(x, y, mwindow->theme->get_image_set("fastrev"))
182         this->avc = avc;
183         set_tooltip(_("Fast Reverse ( + )"));
186 AVC1394GUIRewind::~AVC1394GUIRewind()
190 int AVC1394GUIRewind::handle_event()
192         avc->current_command = FAST_REWIND;
193         avc->rewind();
194         return 1;
197 int  AVC1394GUIRewind::keypress_event()
199         if(get_keypress() == KPPLUS) return handle_event();
200         return 0;
203 AVC1394GUIReverse::AVC1394GUIReverse(MWindow *mwindow, AVC1394Control *avc, int x, int y)
204  : BC_Button(x, y, mwindow->theme->get_image_set("reverse"))
206         this->avc = avc;
207         set_tooltip(_("Reverse Play ( 6 )"));
210 AVC1394GUIReverse::~AVC1394GUIReverse()
214 int AVC1394GUIReverse::handle_event()
216         if(avc->current_command == NORMAL_REWIND)
217         {
218                 avc->current_command = PAUSE;
219                 avc->pause();
220         }
221         else
222         {
223                 avc->current_command = NORMAL_REWIND;
224                 avc->reverse();
225         }
226         return 1;
229 int AVC1394GUIReverse::keypress_event()
231         if(get_keypress() == KP6) return handle_event();
232         return 0;
235 AVC1394GUIStop::AVC1394GUIStop(MWindow *mwindow, AVC1394Control *avc, int x, int y)
236  : BC_Button(x, y, mwindow->theme->get_image_set("stop"))
238         this->avc = avc;
239         set_tooltip(_("Stop ( 0 )"));
242 AVC1394GUIStop::~AVC1394GUIStop()
246 int AVC1394GUIStop::handle_event()
248         avc->current_command = COMMAND_NONE;
249         avc->stop();
250         return 1;
253 int AVC1394GUIStop::keypress_event()
255         if(get_keypress() == KPINS) return handle_event();
256         return 0;
259 AVC1394GUIPlay::AVC1394GUIPlay(MWindow *mwindow, AVC1394Control *avc, int x, int y)
260  : BC_Button(x, y, mwindow->theme->get_image_set("play"))
262         this->avc = avc;
263         mode = 0;
264         set_tooltip(_("Play ( 3 )"));
267 AVC1394GUIPlay::~AVC1394GUIPlay()
271 int AVC1394GUIPlay::handle_event()
273         if(avc->current_command == NORMAL_FWD)
274         {
275                 avc->current_command = PAUSE;
276                 avc->pause();
277         }
278         else
279         {
280                 avc->current_command = NORMAL_FWD;
281                 avc->play();
282         }
283         return 1;
286 int AVC1394GUIPlay::keypress_event()
288         if(get_keypress() == KP3) return handle_event();
289         return 0;
292 AVC1394GUIPause::AVC1394GUIPause(MWindow *mwindow, AVC1394Control *avc, int x,
293 int y)
294  : BC_Button(x, y, mwindow->theme->get_image_set("pause"))
296         this->avc = avc;
297         set_tooltip(_("Pause"));
300 AVC1394GUIPause::~AVC1394GUIPause()
304 int AVC1394GUIPause::handle_event()
306         avc->current_command = PAUSE;
307     avc->pause();
308     return 1;
311 int AVC1394GUIPause::keypress_event()
313     return 0;
316 AVC1394GUIFForward::AVC1394GUIFForward(MWindow *mwindow, AVC1394Control *avc, int x, int y)
317  : BC_Button(x, y, mwindow->theme->get_image_set("fastfwd"))
319    this->avc = avc;
320    set_tooltip(_("Fast Forward ( Enter )"));
323 AVC1394GUIFForward::~AVC1394GUIFForward()
327 int AVC1394GUIFForward::handle_event()
329         avc->current_command = FAST_FWD;
330     avc->fforward();
331     return 1;
334 int AVC1394GUIFForward::keypress_event()
336         if(get_keypress() == KPENTER) return handle_event();
337     return 0;
341 AVC1394GUISeekEnd::AVC1394GUISeekEnd(MWindow *mwindow, 
342         AVC1394Control *avc, 
343         int x, 
344         int y)
345  : BC_Button(x, y, mwindow->theme->get_image_set("end"))
347    this->avc = avc;
348    set_tooltip(_("Jump to end ( End )"));
351 AVC1394GUISeekEnd::~AVC1394GUISeekEnd()
355 int AVC1394GUISeekEnd::handle_event()
357    avc->current_command = COMMAND_NONE;
358    avc->seek("ff:ff:ff:ff");
359    return 1;
362 int AVC1394GUISeekEnd::keypress_event()
364         if(get_keypress() == END) return handle_event();
365      return 0;