diff options
| author | deva <deva> | 2005-07-28 15:31:18 +0000 | 
|---|---|---|
| committer | deva <deva> | 2005-07-28 15:31:18 +0000 | 
| commit | 9111e70794105f984df5b66bba81adc769bd5001 (patch) | |
| tree | 7901a79eff5b948185374472fa72220bfd172b64 | |
| parent | c1e99b4951bd5e376cfab14cb6870869e60b91a2 (diff) | |
*** empty log message ***
| -rw-r--r-- | src/Makefile.am | 1 | ||||
| -rw-r--r-- | src/decoder.cc | 22 | ||||
| -rw-r--r-- | src/dv1394.cc | 31 | ||||
| -rw-r--r-- | src/dv1394.h | 9 | ||||
| -rw-r--r-- | src/dvfile.cc | 29 | ||||
| -rw-r--r-- | src/dvfile.h | 30 | ||||
| -rw-r--r-- | src/frame_stream.h | 41 | 
7 files changed, 141 insertions, 22 deletions
| diff --git a/src/Makefile.am b/src/Makefile.am index f27b1dc..cff93b1 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -52,6 +52,7 @@ EXTRA_DIST = \  	encoder.h \  	file.h \  	frame.h \ +	frame_stream.h \  	historywidget.h \  	img_encoder.h \  	info.h \ diff --git a/src/decoder.cc b/src/decoder.cc index 26351fe..0655f61 100644 --- a/src/decoder.cc +++ b/src/decoder.cc @@ -34,12 +34,8 @@   */  #include <config.h>  #ifdef USE_GUI -/* -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <errno.h> -*/ + +#include "frame_stream.h"  #include "miav_config.h" @@ -89,6 +85,8 @@ Decoder::~Decoder()  void Decoder::decode()  { +  frame_stream *stream; +    bool local_shoot;    int local_freeze;    bool local_record = false; @@ -96,14 +94,22 @@ void Decoder::decode()    bool skip_frames = config->readInt("player_skip_frames"); -  dv1394 dv_stream = dv1394(info); // Use default port and channel. +  dv1394 dv1394_stream = dv1394(info); // Use default port and channel. +  dvfile dvfile_stream = dvfile(info); +  if(dv_stream.connect()) {  +    // Use the dv1394 stream for input. +    stream = &dv1394_stream; +  } else { +    // Use the fallback dv filereader for input. +    stream = &dvfile_stream; +  }    while(*running) {      uint8_t *ptr;      SDL_Event user_event;      // Read a dvframe -    ptr = dv_stream.readFrame(); +    ptr = stream->readFrame();      if(!ptr) return; // No frame read. (Due to firewire error)      old_record = local_record; diff --git a/src/dv1394.cc b/src/dv1394.cc index 4a2d4f7..270da2e 100644 --- a/src/dv1394.cc +++ b/src/dv1394.cc @@ -107,9 +107,21 @@ static int raw_reader( raw1394handle_t handle, int channel, size_t length, quadl  	return 0;  } -dv1394::dv1394(Info *ginfo, int port, int channel) +dv1394::dv1394(Info *i, int p, int c) +{ +  info = i; +  port = p; +  channel = c; +} + +dv1394::~dv1394() +{ +  // Close firewire connection. +  if(handle) raw1394_destroy_handle(handle); +} + +bool dv1394::connect()  { -  info = ginfo;  	int n_ports;  	struct raw1394_portinfo pinf[ 16 ]; @@ -117,7 +129,7 @@ dv1394::dv1394(Info *ginfo, int port, int channel)  	handle = raw1394_new_handle();  	if(!handle) {      info->error("raw1394 - failed to get handle: %s.", strerror( errno ) ); -    return; +    return false;  	}    // how many adapters are hooked in? @@ -125,7 +137,7 @@ dv1394::dv1394(Info *ginfo, int port, int channel)      info->error("raw1394 - failed to get port info: %s.", strerror( errno ) );      raw1394_destroy_handle(handle);      handle = NULL; -    return; +    return false;  	}  	// Tell raw1394 which host adapter to use @@ -133,19 +145,14 @@ dv1394::dv1394(Info *ginfo, int port, int channel)      info->error("raw1394 - failed to set port: %s.", strerror( errno ) );      raw1394_destroy_handle(handle);      handle = NULL; -    return; +    return false;  	}  	raw1394_set_iso_handler( handle, channel, raw_reader);  	raw1394_set_userdata( handle, ( void* ) NULL);    raw1394_start_iso_rcv( handle, channel); - -} - -dv1394::~dv1394() -{ -  // Close firewire connection. -  if(handle) raw1394_destroy_handle(handle); +   +  return true;  }  unsigned char *dv1394::readFrame() diff --git a/src/dv1394.h b/src/dv1394.h index c63899e..7cea9d0 100644 --- a/src/dv1394.h +++ b/src/dv1394.h @@ -30,20 +30,25 @@  #ifdef USE_GUI +#include "frame_stream.h"  #include <libraw1394/raw1394.h>  #include "info.h" -class dv1394 { +class dv1394 : public frame_stream {  public: -  dv1394(Info* ginfo, int port = 0, int channel = 63); // 63 is default channel... sucks. +  dv1394(Info* info, int port = 0, int channel = 63); // 63 is default channel... sucks.    ~dv1394(); +  bool connect(); +    unsigned char *readFrame();  private:    raw1394handle_t handle;    Info *info; +  int port; +  int channel;  };  #endif/*__MIAV_DV1394_H__*/ diff --git a/src/dvfile.cc b/src/dvfile.cc new file mode 100644 index 0000000..ef1db71 --- /dev/null +++ b/src/dvfile.cc @@ -0,0 +1,29 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + *            dvfile.cc + * + *  Thu Jul 28 17:30:48 CEST 2005 + *  Copyright  2005 Bent Bisballe + *  deva@aasimon.org + ****************************************************************************/ + +/* + *  This file is part of MIaV. + * + *  MIaV 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. + * + *  MIaV 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 General Public License for more details. + * + *  You should have received a copy of the GNU General Public License + *  along with MIaV; if not, write to the Free Software + *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA. + */ +#include "config.h" +#include "dvfile.h" + diff --git a/src/dvfile.h b/src/dvfile.h new file mode 100644 index 0000000..3a4d600 --- /dev/null +++ b/src/dvfile.h @@ -0,0 +1,30 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + *            dvfile.h + * + *  Thu Jul 28 17:30:48 CEST 2005 + *  Copyright  2005 Bent Bisballe + *  deva@aasimon.org + ****************************************************************************/ + +/* + *  This file is part of MIaV. + * + *  MIaV 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. + * + *  MIaV 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 General Public License for more details. + * + *  You should have received a copy of the GNU General Public License + *  along with MIaV; if not, write to the Free Software + *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA. + */ +#include "config.h" +#ifndef __MIAV_DVFILE_H__ +#define __MIAV_DVFILE_H__ +#endif/*__MIAV_DVFILE_H__*/ diff --git a/src/frame_stream.h b/src/frame_stream.h new file mode 100644 index 0000000..bc0b9a2 --- /dev/null +++ b/src/frame_stream.h @@ -0,0 +1,41 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + *            frame_stream.h + * + *  Thu Jul 28 17:15:27 CEST 2005 + *  Copyright  2005 Bent Bisballe + *  deva@aasimon.org + ****************************************************************************/ + +/* + *  This file is part of MIaV. + * + *  MIaV 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. + * + *  MIaV 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 General Public License for more details. + * + *  You should have received a copy of the GNU General Public License + *  along with MIaV; if not, write to the Free Software + *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA. + */ +#include "config.h" +#ifndef __MIAV_FRAME_STREAM_H__ +#define __MIAV_FRAME_STREAM_H__ + +class frame_stream { +public: +  frame_stream() {} +  virtual ~frame_stream() {} + +  virtual unsigned char *readFrame() = 0; +}; + + +#endif/*__MIAV_FRAME_STREAM_H__*/ +   | 
