diff options
author | deva <deva> | 2005-03-24 12:14:44 +0000 |
---|---|---|
committer | deva <deva> | 2005-03-24 12:14:44 +0000 |
commit | 9466b3042bc7314915a15f499bd0b087f569654d (patch) | |
tree | 29c41f6ba46b9b92d91b92578720e1beee44fc9d /src/camera.cc | |
parent | b5a6a93dcc7a83f5c4f8fd1894e303ae58804e0b (diff) |
Initial revision
Diffstat (limited to 'src/camera.cc')
-rw-r--r-- | src/camera.cc | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/src/camera.cc b/src/camera.cc new file mode 100644 index 0000000..574caf3 --- /dev/null +++ b/src/camera.cc @@ -0,0 +1,131 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * camera.cc + * + * Fri Oct 29 12:46:38 CEST 2004 + * Copyright 2004 Bent Bisballe + * deva@aasimon.org + ****************************************************************************/ + +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +#include <config.h> +#ifdef USE_GUI + +#include "camera.h" + +Camera::Camera(const char *ip, const int port) +{ + pthread_mutex_init (&mutex, NULL); + //mutex = PTHREAD_MUTEX_INITIALIZER; + + AVFormatContext *ifmtctx; + AVFormatContext *ofmtctx; + + running = 1; + + int channel = 0; + char *device = "/dev/dv1394"; + + av_register_all(); + + encode_queue = new Queue<DVFrame>(); // infinite size + player_queue = new Queue<FFFrame>(1); // fixed size of 1 + + sem_init(&encode_sem, 0, 0); + sem_init(&player_sem, 0, 0); + + decoder = new Decoder(device, + channel, + &encode_sem, + &player_sem, + encode_queue, + player_queue, + &mutex, + &running); + // ifmtctx = decoder->fc; + if(!decoder->fc) return; + + encoder = new Encoder(ip, port, + &encode_sem, + encode_queue, + &mutex, + &running); + ofmtctx = encoder->fc; + + player = new Player(&running, + &player_sem, + player_queue, + &mutex); + + pthread_create (&decodetid, NULL, thread_run, decoder); + pthread_create (&encodetid, NULL, thread_run, encoder); + pthread_create (&playertid, NULL, thread_run, player); +} + +Camera::~Camera() +{ + // Signal to the threads to stop + running = 0; + + pthread_join(decodetid, NULL); + pthread_join(playertid, NULL); + pthread_join(encodetid, NULL); + + delete decoder; + delete encoder; + delete player; + + sem_destroy(&encode_sem); + sem_destroy(&player_sem); + + delete player_queue; + delete encode_queue; +} + +void Camera::setCpr(char *newcpr) +{ + encoder->setCpr(newcpr); +} + + +void Camera::start() +{ + encoder->stop(); +} + +void Camera::stop() +{ + encoder->start(); +} + +void Camera::freeze() +{ + player->stop(); + encoder->freeze(); +} + +void Camera::unfreeze() +{ + player->start(); +} + +void Camera::snapshot() +{ + encoder->shoot(); +} + +#endif/* USE_GUI */ |