[mythtv] [patch] firewire broadcast connection

andrew burke aburke at bitflood.org
Fri Mar 11 17:01:20 UTC 2005


I'd like to second this request.

Aditionally, has anyone had problems with firewire recording not reliably
starting?  For instance, trying to watch live tv over firewire often takes
three or four tries before it works.  Is this a common bug or should I do
some more hunting trying to figure out exactly what's going wrong?

andy

> 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
>
>
>
> _______________________________________________
> 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