00001 #include "avc1394transport.h"
00002 #include "bcsignals.h"
00003 #include "keys.h"
00004 #include "language.h"
00005 #include "recordmonitor.h"
00006
00007 #include <unistd.h>
00008
00009 #define POLL_INTERVAL 20000
00010
00011 AVC1394TransportThread::AVC1394TransportThread(BC_Title *label,
00012 AVC1394Control *avc)
00013 : Thread(1, 0, 0)
00014 {
00015 this->label = label;
00016 this->avc = avc;
00017 done = 0;
00018 }
00019
00020 AVC1394TransportThread::~AVC1394TransportThread()
00021 {
00022 done = 1;
00023 end();
00024 join();
00025 }
00026
00027 void AVC1394TransportThread::run()
00028 {
00029 char *text;
00030 sleep(5);
00031 while(!done)
00032 {
00033 Thread::disable_cancel();
00034 text = avc->timecode();
00035 label->lock_window("AVC1394TransportThread::run 1");
00036
00037 if(text == NULL)
00038 label->update("Unknown");
00039 else
00040 label->update(text);
00041 label->unlock_window();
00042 Thread::enable_cancel();
00043 usleep(POLL_INTERVAL);
00044 }
00045 }
00046
00047
00048
00049
00050
00051
00052
00053 AVC1394Transport::AVC1394Transport(MWindow *mwindow,
00054 AVC1394Control *avc,
00055 BC_WindowBase *window,
00056 int x,
00057 int y)
00058 {
00059 this->mwindow = mwindow;
00060 this->avc = avc;
00061 this->window = window;
00062 this->x = x;
00063 this->y = y;
00064 }
00065
00066 AVC1394Transport::~AVC1394Transport()
00067 {
00068
00069 }
00070
00071 int AVC1394Transport::create_objects()
00072 {
00073 int x = this->x, y = this->y;
00074
00075 window->add_subwindow(start_button = new AVC1394GUISeekStart(mwindow, avc, x, y));
00076 x += start_button->get_w();
00077 window->add_subwindow(rewind_button = new AVC1394GUIRewind(mwindow, avc, x, y));
00078 x += rewind_button->get_w();
00079 window->add_subwindow(reverse_button = new AVC1394GUIReverse(mwindow, avc, x, y));
00080 x += reverse_button->get_w();
00081 window->add_subwindow(stop_button = new AVC1394GUIStop(mwindow, avc, x, y));
00082 x += stop_button->get_w();
00083 window->add_subwindow(pause_button = new AVC1394GUIPause(mwindow, avc, x, y));
00084 x += pause_button->get_w();
00085 window->add_subwindow(play_button = new AVC1394GUIPlay(mwindow, avc, x, y));
00086 x += play_button->get_w();
00087 window->add_subwindow(fforward_button = new AVC1394GUIFForward(mwindow, avc, x, y));
00088 x += fforward_button->get_w();
00089 window->add_subwindow(end_button = new AVC1394GUISeekEnd(mwindow, avc, x, y));
00090 x += end_button->get_w();
00091
00092 x_end = x + 10;
00093
00094 return 0;
00095 }
00096
00097 int AVC1394Transport::keypress_event(int keypress)
00098 {
00099 switch(keypress)
00100 {
00101 case ' ':
00102 if(avc->current_command == PAUSE)
00103 {
00104 avc->current_command = NORMAL_FWD;
00105 avc->play();
00106 }
00107 else
00108 {
00109 avc->current_command = PAUSE;
00110 avc->pause();
00111 }
00112 break;
00113 }
00114 return 0;
00115 }
00116
00117 void AVC1394Transport::reposition_window(int x, int y)
00118 {
00119 this->x = x;
00120 this->y = y;
00121
00122 start_button->reposition_window(x, y);
00123 x += start_button->get_w();
00124 rewind_button->reposition_window(x, y);
00125 x += rewind_button->get_w();
00126 reverse_button->reposition_window(x, y);
00127 x += reverse_button->get_w();
00128 stop_button->reposition_window(x, y);
00129 x += stop_button->get_w();
00130 pause_button->reposition_window(x, y);
00131 x += pause_button->get_w();
00132 play_button->reposition_window(x, y);
00133 x += play_button->get_w();
00134 fforward_button->reposition_window(x, y);
00135 x += fforward_button->get_w();
00136 end_button->reposition_window(x, y);
00137
00138 x_end = x + 10;
00139 }
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150 AVC1394GUISeekStart::AVC1394GUISeekStart(MWindow *mwindow, AVC1394Control *avc, int x, int y)
00151 : BC_Button(x, y, mwindow->theme->get_image_set("rewind"))
00152 {
00153 this->avc = avc;
00154 set_tooltip(_("Rewind ( Home )"));
00155 }
00156
00157 AVC1394GUISeekStart::~AVC1394GUISeekStart()
00158 {
00159 }
00160
00161 int AVC1394GUISeekStart::handle_event()
00162 {
00163 avc->current_command = COMMAND_NONE;
00164 avc->seek("00:00:00:00");
00165 return 1;
00166 }
00167
00168 int AVC1394GUISeekStart::keypress_event()
00169 {
00170 if(get_keypress() == HOME) return handle_event();
00171 return 0;
00172 }
00173
00174
00175 AVC1394GUIRewind::AVC1394GUIRewind(MWindow *mwindow, AVC1394Control *avc, int x, int y)
00176 : BC_Button(x, y, mwindow->theme->get_image_set("fastrev"))
00177 {
00178 this->avc = avc;
00179 set_tooltip(_("Fast Reverse ( + )"));
00180 }
00181
00182 AVC1394GUIRewind::~AVC1394GUIRewind()
00183 {
00184 }
00185
00186 int AVC1394GUIRewind::handle_event()
00187 {
00188 avc->current_command = FAST_REWIND;
00189 avc->rewind();
00190 return 1;
00191 }
00192
00193 int AVC1394GUIRewind::keypress_event()
00194 {
00195 if(get_keypress() == KPPLUS) return handle_event();
00196 return 0;
00197 }
00198
00199 AVC1394GUIReverse::AVC1394GUIReverse(MWindow *mwindow, AVC1394Control *avc, int x, int y)
00200 : BC_Button(x, y, mwindow->theme->get_image_set("reverse"))
00201 {
00202 this->avc = avc;
00203 set_tooltip(_("Reverse Play ( 6 )"));
00204 }
00205
00206 AVC1394GUIReverse::~AVC1394GUIReverse()
00207 {
00208 }
00209
00210 int AVC1394GUIReverse::handle_event()
00211 {
00212 if(avc->current_command == NORMAL_REWIND)
00213 {
00214 avc->current_command = PAUSE;
00215 avc->pause();
00216 }
00217 else
00218 {
00219 avc->current_command = NORMAL_REWIND;
00220 avc->reverse();
00221 }
00222 return 1;
00223 }
00224
00225 int AVC1394GUIReverse::keypress_event()
00226 {
00227 if(get_keypress() == KP6) return handle_event();
00228 return 0;
00229 }
00230
00231 AVC1394GUIStop::AVC1394GUIStop(MWindow *mwindow, AVC1394Control *avc, int x, int y)
00232 : BC_Button(x, y, mwindow->theme->get_image_set("stop"))
00233 {
00234 this->avc = avc;
00235 set_tooltip(_("Stop ( 0 )"));
00236 }
00237
00238 AVC1394GUIStop::~AVC1394GUIStop()
00239 {
00240 }
00241
00242 int AVC1394GUIStop::handle_event()
00243 {
00244 avc->current_command = COMMAND_NONE;
00245 avc->stop();
00246 return 1;
00247 }
00248
00249 int AVC1394GUIStop::keypress_event()
00250 {
00251 if(get_keypress() == KPINS) return handle_event();
00252 return 0;
00253 }
00254
00255 AVC1394GUIPlay::AVC1394GUIPlay(MWindow *mwindow, AVC1394Control *avc, int x, int y)
00256 : BC_Button(x, y, mwindow->theme->get_image_set("play"))
00257 {
00258 this->avc = avc;
00259 mode = 0;
00260 set_tooltip(_("Play ( 3 )"));
00261 }
00262
00263 AVC1394GUIPlay::~AVC1394GUIPlay()
00264 {
00265 }
00266
00267 int AVC1394GUIPlay::handle_event()
00268 {
00269 if(avc->current_command == NORMAL_FWD)
00270 {
00271 avc->current_command = PAUSE;
00272 avc->pause();
00273 }
00274 else
00275 {
00276 avc->current_command = NORMAL_FWD;
00277 avc->play();
00278 }
00279 return 1;
00280 }
00281
00282 int AVC1394GUIPlay::keypress_event()
00283 {
00284 if(get_keypress() == KP3) return handle_event();
00285 return 0;
00286 }
00287
00288 AVC1394GUIPause::AVC1394GUIPause(MWindow *mwindow, AVC1394Control *avc, int x,
00289 int y)
00290 : BC_Button(x, y, mwindow->theme->get_image_set("pause"))
00291 {
00292 this->avc = avc;
00293 set_tooltip(_("Pause"));
00294 }
00295
00296 AVC1394GUIPause::~AVC1394GUIPause()
00297 {
00298 }
00299
00300 int AVC1394GUIPause::handle_event()
00301 {
00302 avc->current_command = PAUSE;
00303 avc->pause();
00304 return 1;
00305 }
00306
00307 int AVC1394GUIPause::keypress_event()
00308 {
00309 return 0;
00310 }
00311
00312 AVC1394GUIFForward::AVC1394GUIFForward(MWindow *mwindow, AVC1394Control *avc, int x, int y)
00313 : BC_Button(x, y, mwindow->theme->get_image_set("fastfwd"))
00314 {
00315 this->avc = avc;
00316 set_tooltip(_("Fast Forward ( Enter )"));
00317 }
00318
00319 AVC1394GUIFForward::~AVC1394GUIFForward()
00320 {
00321 }
00322
00323 int AVC1394GUIFForward::handle_event()
00324 {
00325 avc->current_command = FAST_FWD;
00326 avc->fforward();
00327 return 1;
00328 }
00329
00330 int AVC1394GUIFForward::keypress_event()
00331 {
00332 if(get_keypress() == KPENTER) return handle_event();
00333 return 0;
00334 }
00335
00336
00337 AVC1394GUISeekEnd::AVC1394GUISeekEnd(MWindow *mwindow,
00338 AVC1394Control *avc,
00339 int x,
00340 int y)
00341 : BC_Button(x, y, mwindow->theme->get_image_set("end"))
00342 {
00343 this->avc = avc;
00344 set_tooltip(_("Jump to end ( End )"));
00345 }
00346
00347 AVC1394GUISeekEnd::~AVC1394GUISeekEnd()
00348 {
00349 }
00350
00351 int AVC1394GUISeekEnd::handle_event()
00352 {
00353 avc->current_command = COMMAND_NONE;
00354 avc->seek("ff:ff:ff:ff");
00355 return 1;
00356 }
00357
00358 int AVC1394GUISeekEnd::keypress_event()
00359 {
00360 if(get_keypress() == END) return handle_event();
00361 return 0;
00362 }
00363