[mythtv] [patch] firewire broadcast connection
Todd Tidwell
artist at wildstar.net
Fri Mar 11 10:07:18 UTC 2005
Anyone know when this is going to go into CVS?
-----Original Message-----
From: mythtv-dev-bounces at mythtv.org [mailto:mythtv-dev-bounces at mythtv.org]
On Behalf Of Jim Westfall
Sent: Saturday, March 05, 2005 8:33 PM
To: Development of mythtv
Subject: Re: [mythtv] [patch] firewire broadcast connection
re-submitting. updated for current cvs and adds in the libeic61883 api
change.
jim
Jim Westfall <jwestfall at surrealistic.net> wrote [02.15.05]:
> 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
> 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));
> _______________________________________________
> mythtv-dev mailing list
> mythtv-dev at mythtv.org
> http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev
More information about the mythtv-dev
mailing list