[mythtv] [patch] firewire broadcast connection
Jim Westfall
jwestfall at surrealistic.net
Wed Feb 16 02:38:59 UTC 2005
Hi
With the help of ddennedy over at linux1394 it was determined that not all
STB's are stable or dont even work when making a peer to peer connection.
This patch adds a new option that lets you pick the connection type to
make with the STB, p2p or broadcast. Its been tested with a couple
problematic DCT-6200 boxes.
jim
-------------- next part --------------
diff -ur mythtv.orig/libs/libmythtv/dbcheck.cpp mythtv/libs/libmythtv/dbcheck.cpp
--- mythtv.orig/libs/libmythtv/dbcheck.cpp 2005-02-12 10:33:43.000000000 -0800
+++ mythtv/libs/libmythtv/dbcheck.cpp 2005-02-12 10:36:54.000000000 -0800
@@ -9,7 +9,7 @@
#include "mythcontext.h"
#include "mythdbcon.h"
-const QString currentDatabaseVersion = "1071";
+const QString currentDatabaseVersion = "1072";
static bool UpdateDBVersionNumber(const QString &newnumber);
static bool performActualUpdate(const QString updates[], QString version,
@@ -1399,6 +1399,16 @@
return false;
}
+ if (dbver == "1071")
+ {
+ const QString updates[] = {
+"ALTER TABLE capturecard ADD COLUMN firewire_connection INT UNSIGNED NOT NULL DEFAULT 0;",
+""
+};
+ if (!performActualUpdate(updates, "1072", dbver))
+ return false;
+ }
+
return true;
}
diff -ur mythtv.orig/libs/libmythtv/firewirerecorder.cpp mythtv/libs/libmythtv/firewirerecorder.cpp
--- mythtv.orig/libs/libmythtv/firewirerecorder.cpp 2005-02-12 10:33:43.000000000 -0800
+++ mythtv/libs/libmythtv/firewirerecorder.cpp 2005-02-12 11:47:31.515478918 -0800
@@ -21,7 +21,7 @@
if(!fw) return 0;
if(dropped) {
- VERBOSE(VB_GENERAL,QString("FireWire: %1 packet(s) dropped.").arg(dropped));
+ VERBOSE(VB_GENERAL,QString("Firewire: %1 packet(s) dropped.").arg(dropped));
}
fw->ProcessTSPacket(tspacket,len);
return 1;
@@ -39,20 +39,20 @@
fwhandle = NULL;
fwmpeg = NULL;
fwfd = -1;
-
+ fwconnection = FIREWIRE_CONNECTION_P2P;
}
FirewireRecorder::~FirewireRecorder() {
if(isopen) {
- VERBOSE(VB_GENERAL,QString("FireWire: releasing iec61883_mpeg2 object"));
+ VERBOSE(VB_GENERAL,QString("Firewire: releasing iec61883_mpeg2 object"));
iec61883_mpeg2_close(fwmpeg);
- if(fwchannel > -1) {
- VERBOSE(VB_GENERAL,QString("FireWire: disconnecting channel %1").arg(fwchannel));
+ if(fwconnection == FIREWIRE_CONNECTION_P2P && fwchannel > -1) {
+ VERBOSE(VB_GENERAL,QString("Firewire: disconnecting channel %1").arg(fwchannel));
iec61883_cmp_disconnect (fwhandle, fwnode | 0xffc0,
raw1394_get_local_id (fwhandle), fwchannel, fwbandwidth);
}
- VERBOSE(VB_GENERAL,QString("FireWire: releasing raw1394 handle"));
+ VERBOSE(VB_GENERAL,QString("Firewire: releasing raw1394 handle"));
raw1394_destroy_handle(fwhandle);
}
isopen = false;
@@ -63,7 +63,7 @@
if(isopen)
return true;
- VERBOSE(VB_GENERAL,QString("FireWire: Initializing Port: %1, Node: %2, Speed: %3")
+ VERBOSE(VB_GENERAL,QString("Firewire: Initializing Port: %1, Node: %2, Speed: %3")
.arg(fwport)
.arg(fwnode)
.arg(FirewireSpeedString(fwspeed)));
@@ -74,13 +74,26 @@
return false;
}
- fwchannel = iec61883_cmp_connect (fwhandle, fwnode | 0xffc0,
+ if(fwconnection == FIREWIRE_CONNECTION_P2P) {
+ VERBOSE(VB_GENERAL,QString("Firewire: Creating P2P Connection with Node: %1").arg(fwnode));
+ fwchannel = iec61883_cmp_connect (fwhandle, fwnode | 0xffc0,
raw1394_get_local_id (fwhandle), &fwbandwidth);
-
- if(fwchannel > -1) {
- VERBOSE(VB_GENERAL,QString("FireWire: Created Channel: %1, Bandwidth Allocation: %2").arg(fwchannel).arg(fwbandwidth));
+ if(fwchannel > -1) {
+ VERBOSE(VB_GENERAL,QString("Firewire: Created Channel: %1, Bandwidth Allocation: %2").arg(fwchannel).arg(fwbandwidth));
+ }
+ } else {
+ VERBOSE(VB_GENERAL,QString("Firewire: Creating Broadcast Connection with Node: %1").arg(fwnode));
+ if(iec61883_cmp_create_bcast_output(fwhandle, fwnode | 0xffc0, 0, FIREWIRE_CHANNEL_BROADCAST, fwspeed) != 0) {
+ VERBOSE(VB_IMPORTANT, QString("Firewire: Failed to create connection"));
+ // release raw1394 object;
+ raw1394_destroy_handle(fwhandle);
+ return false;
+ }
+ fwchannel = FIREWIRE_CHANNEL_BROADCAST;
+ fwbandwidth = 0;
}
+
if((fwmpeg = iec61883_mpeg2_recv_init (fwhandle, read_tspacket, this)) == NULL) {
VERBOSE(VB_IMPORTANT, QString("Firewire: unable to init iec61883_mpeg2 object, bailing"));
perror("iec61883_mpeg2 object");
@@ -94,7 +107,7 @@
// probably shouldnt even allow user to set, 100Mbps should be more the enough
int curspeed = iec61883_mpeg2_get_speed(fwmpeg);
if(curspeed != fwspeed) {
- VERBOSE(VB_GENERAL,QString("FireWire: Changing Speed %1 -> %2")
+ VERBOSE(VB_GENERAL,QString("Firewire: Changing Speed %1 -> %2")
.arg(FirewireSpeedString(curspeed))
.arg(FirewireSpeedString(fwspeed)));
iec61883_mpeg2_set_speed(fwmpeg, fwspeed);
@@ -214,6 +227,12 @@
VERBOSE(VB_IMPORTANT, QString("Firewire: Invalid speed '%1', assuming 0 (100Mbps)").arg(fwspeed));
fwspeed = 0;
}
+ } else if(name == "connection") {
+ fwconnection = value;
+ if(fwconnection != FIREWIRE_CONNECTION_P2P && fwconnection != FIREWIRE_CONNECTION_BROADCAST) {
+ VERBOSE(VB_IMPORTANT, QString("Firewire: Invalid Connection type '%1', assuming P2P").arg(fwconnection));
+ fwconnection = FIREWIRE_CONNECTION_P2P;
+ }
}
}
diff -ur mythtv.orig/libs/libmythtv/firewirerecorder.h mythtv/libs/libmythtv/firewirerecorder.h
--- mythtv.orig/libs/libmythtv/firewirerecorder.h 2005-02-01 23:11:10.000000000 -0800
+++ mythtv/libs/libmythtv/firewirerecorder.h 2005-02-12 10:36:54.000000000 -0800
@@ -16,6 +16,11 @@
#define FIREWIRE_TIMEOUT 15
+#define FIREWIRE_CONNECTION_P2P 0
+#define FIREWIRE_CONNECTION_BROADCAST 1
+
+#define FIREWIRE_CHANNEL_BROADCAST 63
+
class FirewireRecorder : public DTVRecorder
{
public:
@@ -36,7 +41,7 @@
QString FirewireSpeedString(int speed);
private:
- int fwport, fwchannel, fwspeed, fwbandwidth, fwfd;
+ int fwport, fwchannel, fwspeed, fwbandwidth, fwfd, fwconnection;
QString fwmodel;
nodeid_t fwnode;
raw1394handle_t fwhandle;
diff -ur mythtv.orig/libs/libmythtv/tv_rec.cpp mythtv/libs/libmythtv/tv_rec.cpp
--- mythtv.orig/libs/libmythtv/tv_rec.cpp 2005-02-02 09:17:24.000000000 -0800
+++ mythtv/libs/libmythtv/tv_rec.cpp 2005-02-12 10:36:54.000000000 -0800
@@ -678,6 +678,7 @@
nvr->SetOption("node", firewire_options.node);
nvr->SetOption("speed", firewire_options.speed);
nvr->SetOption("model", firewire_options.model);
+ nvr->SetOption("connection", firewire_options.connection);
nvr->Initialize();
#endif
return;
@@ -1153,7 +1154,7 @@
"dvb_wait_for_seqstart,dvb_dmx_buf_size,"
"dvb_pkt_buf_size, skipbtaudio, dvb_on_demand,"
"firewire_port, firewire_node, firewire_speed,"
- "firewire_model "
+ "firewire_model, firewire_connection "
"FROM capturecard WHERE cardid = %1;")
.arg(cardnum);
@@ -1204,6 +1205,7 @@
test = query.value(16).toString();
if (test != QString::null)
firewire_opts.model = QString::fromUtf8(test);
+ firewire_opts.connection = query.value(17).toInt();
}
thequery = QString("SELECT if(startchan!='', startchan, '3') "
diff -ur mythtv.orig/libs/libmythtv/tv_rec.h mythtv/libs/libmythtv/tv_rec.h
--- mythtv.orig/libs/libmythtv/tv_rec.h 2005-02-01 23:11:10.000000000 -0800
+++ mythtv/libs/libmythtv/tv_rec.h 2005-02-12 10:36:54.000000000 -0800
@@ -46,6 +46,7 @@
int port;
int node;
int speed;
+ int connection;
QString model;
} firewire_options_t;
diff -ur mythtv.orig/libs/libmythtv/videosource.cpp mythtv/libs/libmythtv/videosource.cpp
--- mythtv.orig/libs/libmythtv/videosource.cpp 2005-02-12 10:33:44.000000000 -0800
+++ mythtv/libs/libmythtv/videosource.cpp 2005-02-12 10:36:54.000000000 -0800
@@ -857,6 +857,16 @@
}
};
+class FirewireConnection: public ComboBoxSetting, public CCSetting {
+ public:
+ FirewireConnection(const CaptureCard& parent):
+ CCSetting(parent, "firewire_connection") {
+ setLabel(QObject::tr("Firewire Connection Type"));
+ addSelection(QObject::tr("Point to Point"),"0");
+ addSelection(QObject::tr("Broadcast"),"1");
+ }
+};
+
class FirewirePort: public LineEditSetting, public CCSetting {
public:
FirewirePort(const CaptureCard& parent):
@@ -904,6 +914,7 @@
parent(a_parent) {
setUseLabel(false);
addChild(new FirewireModel(parent));
+ addChild(new FirewireConnection(parent));
addChild(new FirewirePort(parent));
addChild(new FirewireNode(parent));
addChild(new FirewireSpeed(parent));
More information about the mythtv-dev
mailing list