summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Makefile.am1
-rw-r--r--src/decoder.cc22
-rw-r--r--src/dv1394.cc31
-rw-r--r--src/dv1394.h9
-rw-r--r--src/dvfile.cc29
-rw-r--r--src/dvfile.h30
-rw-r--r--src/frame_stream.h41
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__*/
+