redbutton-devel Mailing List for RedButton MHEG Engine (Page 15)
Brought to you by:
skilvington
You can subscribe to this list here.
| 2006 |
Jan
(1) |
Feb
(4) |
Mar
(27) |
Apr
(6) |
May
(46) |
Jun
(45) |
Jul
(7) |
Aug
(4) |
Sep
(7) |
Oct
(5) |
Nov
(10) |
Dec
(11) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2007 |
Jan
(49) |
Feb
(29) |
Mar
(35) |
Apr
(43) |
May
(23) |
Jun
(4) |
Jul
(1) |
Aug
(58) |
Sep
(66) |
Oct
(27) |
Nov
(15) |
Dec
(1) |
| 2008 |
Jan
(11) |
Feb
|
Mar
(8) |
Apr
|
May
|
Jun
(30) |
Jul
(1) |
Aug
(1) |
Sep
(1) |
Oct
|
Nov
(3) |
Dec
(6) |
| 2009 |
Jan
(6) |
Feb
(1) |
Mar
(2) |
Apr
(5) |
May
(2) |
Jun
(1) |
Jul
(7) |
Aug
|
Sep
(2) |
Oct
(2) |
Nov
|
Dec
(6) |
| 2010 |
Jan
(6) |
Feb
|
Mar
(4) |
Apr
|
May
|
Jun
|
Jul
|
Aug
(6) |
Sep
(4) |
Oct
|
Nov
(11) |
Dec
(4) |
| 2011 |
Jan
|
Feb
(11) |
Mar
(8) |
Apr
|
May
|
Jun
(3) |
Jul
|
Aug
|
Sep
(4) |
Oct
|
Nov
(2) |
Dec
|
| 2012 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: <ski...@us...> - 2007-05-01 10:19:50
|
Revision: 304
http://svn.sourceforge.net/redbutton/?rev=304&view=rev
Author: skilvington
Date: 2007-05-01 03:19:43 -0700 (Tue, 01 May 2007)
Log Message:
-----------
typo
Modified Paths:
--------------
redbutton-download/trunk/channels.c
Modified: redbutton-download/trunk/channels.c
===================================================================
--- redbutton-download/trunk/channels.c 2007-05-01 10:15:32 UTC (rev 303)
+++ redbutton-download/trunk/channels.c 2007-05-01 10:19:43 UTC (rev 304)
@@ -375,7 +375,7 @@
* DVB-C channels.conf format is:
* name:freq:inversion:symbol_rate:fec:modulation:vpid:apid:service_id
* eg:
- * Eurosport:394000000:INVERSION_OFF:6900000:FEC_NONE:QAM_64:410:420
+ * Eurosport:394000000:INVERSION_OFF:6900000:FEC_NONE:QAM_64:410:420:16000
*/
static bool
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2007-05-01 10:15:33
|
Revision: 303
http://svn.sourceforge.net/redbutton/?rev=303&view=rev
Author: skilvington
Date: 2007-05-01 03:15:32 -0700 (Tue, 01 May 2007)
Log Message:
-----------
allow ATSC cards to retune (untested)
Modified Paths:
--------------
redbutton-download/trunk/channels.c
Modified: redbutton-download/trunk/channels.c
===================================================================
--- redbutton-download/trunk/channels.c 2007-05-01 10:06:37 UTC (rev 302)
+++ redbutton-download/trunk/channels.c 2007-05-01 10:15:32 UTC (rev 303)
@@ -412,11 +412,40 @@
return false;
}
+/*
+ * ATSC channels.conf format is:
+ * name:frequency:modulation:vpid:apid:service_id
+ * eg:
+ * Jazz-TV:647000000:QAM_256:49:52:3
+ */
+
static bool
get_atsc_tune_params(uint16_t service_id, struct dvb_frontend_parameters *out)
{
-printf("TODO: tune ATSC card to service_id %u\n", service_id);
-return false;
+ char line[1024];
+ unsigned int freq;
+ char mod[32];
+ unsigned int id;
+ int len;
+
+ while(!feof(_channels))
+ {
+ if(fgets(line, sizeof(line), _channels) == NULL
+ || sscanf(line, "%*[^:]:%u:%32[^:]:%*[^:]:%*[^:]:%u", &freq, mod, &id) != 3
+ || id != service_id)
+ continue;
+ /* chop off trailing \n */
+ len = strlen(line) - 1;
+ while(len >= 0 && line[len] == '\n')
+ line[len--] = '\0';
+ verbose("%s", line);
+ out->frequency = freq;
+ /* out->inversion is not set by azap */
+ out->u.vsb.modulation = str2enum(mod, qam_list, LIST_SIZE(qam_list));
+ return true;
+ }
+
+ return false;
}
/* DISEQC code from dvbtune, written by Dave Chapman */
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2007-05-01 10:06:41
|
Revision: 302
http://svn.sourceforge.net/redbutton/?rev=302&view=rev
Author: skilvington
Date: 2007-05-01 03:06:37 -0700 (Tue, 01 May 2007)
Log Message:
-----------
DVB-S channels.conf stores symbol rate / 1000
Modified Paths:
--------------
redbutton-download/trunk/channels.c
Modified: redbutton-download/trunk/channels.c
===================================================================
--- redbutton-download/trunk/channels.c 2007-05-01 10:02:18 UTC (rev 301)
+++ redbutton-download/trunk/channels.c 2007-05-01 10:06:37 UTC (rev 302)
@@ -363,7 +363,7 @@
verbose("%s", line);
out->frequency = freq * 1000;
out->inversion = INVERSION_AUTO;
- out->u.qpsk.symbol_rate = sr;
+ out->u.qpsk.symbol_rate = sr * 1000;
out->u.qpsk.fec_inner = FEC_AUTO;
return true;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2007-05-01 10:02:22
|
Revision: 301
http://svn.sourceforge.net/redbutton/?rev=301&view=rev
Author: skilvington
Date: 2007-05-01 03:02:18 -0700 (Tue, 01 May 2007)
Log Message:
-----------
allow DVB-C cards to retune (untested)
Modified Paths:
--------------
redbutton-download/trunk/channels.c
Modified: redbutton-download/trunk/channels.c
===================================================================
--- redbutton-download/trunk/channels.c 2007-04-30 20:32:04 UTC (rev 300)
+++ redbutton-download/trunk/channels.c 2007-05-01 10:02:18 UTC (rev 301)
@@ -216,14 +216,14 @@
{ "HIERARCHY_NONE", HIERARCHY_NONE }
};
-static const struct param constellation_list[] =
+static const struct param qam_list[] =
{
{ "QPSK", QPSK },
- { "QAM_128", QAM_128 },
{ "QAM_16", QAM_16 },
- { "QAM_256", QAM_256 },
{ "QAM_32", QAM_32 },
- { "QAM_64", QAM_64 }
+ { "QAM_64", QAM_64 },
+ { "QAM_128", QAM_128 },
+ { "QAM_256", QAM_256 }
};
static const struct param transmissionmode_list[] =
@@ -324,7 +324,7 @@
out->u.ofdm.bandwidth = str2enum(bw, bw_list, LIST_SIZE(bw_list));
out->u.ofdm.code_rate_HP = str2enum(hp, fec_list, LIST_SIZE(fec_list));
out->u.ofdm.code_rate_LP = str2enum(lp, fec_list, LIST_SIZE(fec_list));
- out->u.ofdm.constellation = str2enum(qam, constellation_list, LIST_SIZE(constellation_list));
+ out->u.ofdm.constellation = str2enum(qam, qam_list, LIST_SIZE(qam_list));
out->u.ofdm.transmission_mode = str2enum(trans, transmissionmode_list, LIST_SIZE(transmissionmode_list));
out->u.ofdm.guard_interval = str2enum(gi, guard_list, LIST_SIZE(guard_list));
out->u.ofdm.hierarchy_information = str2enum(hier, hierarchy_list, LIST_SIZE(hierarchy_list));
@@ -371,11 +371,45 @@
return false;
}
+/*
+ * DVB-C channels.conf format is:
+ * name:freq:inversion:symbol_rate:fec:modulation:vpid:apid:service_id
+ * eg:
+ * Eurosport:394000000:INVERSION_OFF:6900000:FEC_NONE:QAM_64:410:420
+ */
+
static bool
get_dvbc_tune_params(uint16_t service_id, struct dvb_frontend_parameters *out)
{
-printf("TODO: tune DVB-C card to service_id %u\n", service_id);
-return false;
+ char line[1024];
+ unsigned int freq;
+ char inv[32];
+ unsigned int sr;
+ char fec[32];
+ char mod[32];
+ unsigned int id;
+ int len;
+
+ while(!feof(_channels))
+ {
+ if(fgets(line, sizeof(line), _channels) == NULL
+ || sscanf(line, "%*[^:]:%u:%32[^:]:%u:%32[^:]:%32[^:]:%*[^:]:%*[^:]:%u", &freq, inv, &sr, fec, mod, &id) != 6
+ || id != service_id)
+ continue;
+ /* chop off trailing \n */
+ len = strlen(line) - 1;
+ while(len >= 0 && line[len] == '\n')
+ line[len--] = '\0';
+ verbose("%s", line);
+ out->frequency = freq;
+ out->inversion = str2enum(inv, inversion_list, LIST_SIZE(inversion_list));
+ out->u.qam.symbol_rate = sr;
+ out->u.qam.fec_inner = str2enum(fec, fec_list, LIST_SIZE(fec_list));
+ out->u.qam.modulation = str2enum(mod, qam_list, LIST_SIZE(qam_list));
+ return true;
+ }
+
+ return false;
}
static bool
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2007-04-30 20:32:08
|
Revision: 300
http://svn.sourceforge.net/redbutton/?rev=300&view=rev
Author: skilvington
Date: 2007-04-30 13:32:04 -0700 (Mon, 30 Apr 2007)
Log Message:
-----------
typo
Modified Paths:
--------------
redbutton-download/trunk/channels.c
Modified: redbutton-download/trunk/channels.c
===================================================================
--- redbutton-download/trunk/channels.c 2007-04-28 20:17:02 UTC (rev 299)
+++ redbutton-download/trunk/channels.c 2007-04-30 20:32:04 UTC (rev 300)
@@ -56,7 +56,7 @@
};
static int do_diseqc(int, int, char, bool);
-static int diseqc_send_msg(int fd, fe_sec_voltage_t, struct diseqc_cmd *, fe_sec_tone_mode_t, fe_sec_mini_cmd_t);
+static int diseqc_send_msg(int, fe_sec_voltage_t, struct diseqc_cmd *, fe_sec_tone_mode_t, fe_sec_mini_cmd_t);
/*
* returns "tzap" if the given DVB adapter is DVB-T,
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2007-04-28 20:17:10
|
Revision: 299
http://svn.sourceforge.net/redbutton/?rev=299&view=rev
Author: skilvington
Date: 2007-04-28 13:17:02 -0700 (Sat, 28 Apr 2007)
Log Message:
-----------
polarity is a char not a string
Modified Paths:
--------------
redbutton-download/trunk/channels.c
Modified: redbutton-download/trunk/channels.c
===================================================================
--- redbutton-download/trunk/channels.c 2007-04-28 20:13:54 UTC (rev 298)
+++ redbutton-download/trunk/channels.c 2007-04-28 20:17:02 UTC (rev 299)
@@ -353,7 +353,7 @@
while(!feof(_channels))
{
if(fgets(line, sizeof(line), _channels) == NULL
- || sscanf(line, "%*[^:]:%u:%1[^:]:%u:%u:%*[^:]:%*[^:]:%u", &freq, pol, sat_no, &sr, &id) != 5
+ || sscanf(line, "%*[^:]:%u:%c:%u:%u:%*[^:]:%*[^:]:%u", &freq, pol, sat_no, &sr, &id) != 5
|| id != service_id)
continue;
/* chop off trailing \n */
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2007-04-28 20:14:19
|
Revision: 298
http://svn.sourceforge.net/redbutton/?rev=298&view=rev
Author: skilvington
Date: 2007-04-28 13:13:54 -0700 (Sat, 28 Apr 2007)
Log Message:
-----------
check if DISEQC succeeded
Modified Paths:
--------------
redbutton-download/trunk/channels.c
Modified: redbutton-download/trunk/channels.c
===================================================================
--- redbutton-download/trunk/channels.c 2007-04-28 19:30:47 UTC (rev 297)
+++ redbutton-download/trunk/channels.c 2007-04-28 20:13:54 UTC (rev 298)
@@ -524,7 +524,8 @@
needed_params.frequency -= LOF2;
hi_lo = true;
}
- do_diseqc(fe_fd, sat_no, polarity, hi_lo);
+ if(do_diseqc(fe_fd, sat_no, polarity, hi_lo) < 0)
+ error("DISEQC command failed for service_id %u", service_id);
}
/* tune in */
if(ioctl(fe_fd, FE_SET_FRONTEND, &needed_params) < 0)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2007-04-28 19:30:53
|
Revision: 297
http://svn.sourceforge.net/redbutton/?rev=297&view=rev
Author: skilvington
Date: 2007-04-28 12:30:47 -0700 (Sat, 28 Apr 2007)
Log Message:
-----------
allow DVB-S cards to retune (in theory anyway, I don't have a DVB-S card to test it)
Modified Paths:
--------------
redbutton-download/trunk/channels.c
Modified: redbutton-download/trunk/channels.c
===================================================================
--- redbutton-download/trunk/channels.c 2007-04-27 09:38:23 UTC (rev 296)
+++ redbutton-download/trunk/channels.c 2007-04-28 19:30:47 UTC (rev 297)
@@ -24,6 +24,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <ctype.h>
#include <stdint.h>
#include <stdbool.h>
#include <errno.h>
@@ -34,14 +35,29 @@
#include "utils.h"
+/* magic DVB-S values from dvbtune */
+#define SLOF (11700*1000UL)
+#define LOF1 (9750*1000UL)
+#define LOF2 (10600*1000UL)
+
/* internal functions */
-static bool get_tune_params(fe_type_t, uint16_t, struct dvb_frontend_parameters *);
+static bool get_tune_params(fe_type_t, uint16_t, struct dvb_frontend_parameters *, char *, unsigned int *);
static bool get_dvbt_tune_params(uint16_t, struct dvb_frontend_parameters *);
-static bool get_dvbs_tune_params(uint16_t, struct dvb_frontend_parameters *);
+static bool get_dvbs_tune_params(uint16_t, struct dvb_frontend_parameters *, char *, unsigned int *);
static bool get_dvbc_tune_params(uint16_t, struct dvb_frontend_parameters *);
static bool get_atsc_tune_params(uint16_t, struct dvb_frontend_parameters *);
+/* DISEQC code from dvbtune, written by Dave Chapman */
+struct diseqc_cmd
+{
+ struct dvb_diseqc_master_cmd cmd;
+ uint32_t wait;
+};
+
+static int do_diseqc(int, int, char, bool);
+static int diseqc_send_msg(int fd, fe_sec_voltage_t, struct diseqc_cmd *, fe_sec_tone_mode_t, fe_sec_mini_cmd_t);
+
/*
* returns "tzap" if the given DVB adapter is DVB-T,
* "szap" if it is DVB-S
@@ -241,7 +257,7 @@
*/
static bool
-get_tune_params(fe_type_t fe_type, uint16_t service_id, struct dvb_frontend_parameters *out)
+get_tune_params(fe_type_t fe_type, uint16_t service_id, struct dvb_frontend_parameters *out, char *pol, unsigned int *sat_no)
{
if(_channels == NULL)
{
@@ -253,10 +269,12 @@
verbose("Searching channels.conf for service_id %u", service_id);
+ rewind(_channels);
+
if(fe_type == FE_OFDM)
return get_dvbt_tune_params(service_id, out);
else if(fe_type == FE_QPSK)
- return get_dvbs_tune_params(service_id, out);
+ return get_dvbs_tune_params(service_id, out, pol, sat_no);
else if(fe_type == FE_QAM)
return get_dvbc_tune_params(service_id, out);
else if(fe_type == FE_ATSC)
@@ -267,6 +285,13 @@
return false;
}
+/*
+ * DVB-T channels.conf format is:
+ * name:freq:inversion:bandwidth:code_rate_HP:code_rate_LP:constellation:transmission_mode:guard_interval:hierarchy:vpid:apid:service_id
+ * eg:
+ * BBC ONE:722166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:600:601:4165
+ */
+
static bool
get_dvbt_tune_params(uint16_t service_id, struct dvb_frontend_parameters *out)
{
@@ -283,7 +308,6 @@
unsigned int id;
int len;
- rewind(_channels);
while(!feof(_channels))
{
if(fgets(line, sizeof(line), _channels) == NULL
@@ -310,11 +334,41 @@
return false;
}
+/*
+ * DVB-S channels.conf format is:
+ * name:freq:polarity:sat_number:symbol_rate:vpid:apid:service_id
+ * eg:
+ * Cartoon Network:10949:v:0:27500:6601:6611:7457
+ */
+
static bool
-get_dvbs_tune_params(uint16_t service_id, struct dvb_frontend_parameters *out)
+get_dvbs_tune_params(uint16_t service_id, struct dvb_frontend_parameters *out, char *pol, unsigned int *sat_no)
{
-printf("TODO: tune DVB-S card to service_id %u\n", service_id);
-return false;
+ char line[1024];
+ unsigned int freq;
+ unsigned int sr;
+ unsigned int id;
+ int len;
+
+ while(!feof(_channels))
+ {
+ if(fgets(line, sizeof(line), _channels) == NULL
+ || sscanf(line, "%*[^:]:%u:%1[^:]:%u:%u:%*[^:]:%*[^:]:%u", &freq, pol, sat_no, &sr, &id) != 5
+ || id != service_id)
+ continue;
+ /* chop off trailing \n */
+ len = strlen(line) - 1;
+ while(len >= 0 && line[len] == '\n')
+ line[len--] = '\0';
+ verbose("%s", line);
+ out->frequency = freq * 1000;
+ out->inversion = INVERSION_AUTO;
+ out->u.qpsk.symbol_rate = sr;
+ out->u.qpsk.fec_inner = FEC_AUTO;
+ return true;
+ }
+
+ return false;
}
static bool
@@ -331,7 +385,54 @@
return false;
}
+/* DISEQC code from dvbtune, written by Dave Chapman */
+
/*
+ * digital satellite equipment control,
+ * specification is available from http://www.eutelsat.com/
+ */
+
+static int
+do_diseqc(int secfd, int sat_no, char pol, bool hi_lo)
+{
+ bool polv = (toupper(pol) == 'V');
+ struct diseqc_cmd cmd = { {{0xe0, 0x10, 0x38, 0xf0, 0x00, 0x00}, 4}, 0 };
+
+ /*
+ * param: high nibble: reset bits, low nibble set bits,
+ * bits are: option, position, polarizaion, band
+ */
+ cmd.cmd.msg[3] = 0xf0 | (((sat_no * 4) & 0x0f) | (hi_lo ? 1 : 0) | (polv ? 0 : 2));
+
+ return diseqc_send_msg( secfd,
+ polv ? SEC_VOLTAGE_13 : SEC_VOLTAGE_18,
+ &cmd,
+ hi_lo ? SEC_TONE_ON : SEC_TONE_OFF,
+ (sat_no / 4) % 2 ? SEC_MINI_B : SEC_MINI_A);
+}
+
+static int
+diseqc_send_msg(int fd, fe_sec_voltage_t v, struct diseqc_cmd *cmd, fe_sec_tone_mode_t t, fe_sec_mini_cmd_t b)
+{
+ if(ioctl(fd, FE_SET_TONE, SEC_TONE_OFF) < 0)
+ return -1;
+ if(ioctl(fd, FE_SET_VOLTAGE, v) < 0)
+ return -1;
+ usleep(15 * 1000);
+ if(ioctl(fd, FE_DISEQC_SEND_MASTER_CMD, &cmd->cmd) < 0)
+ return -1;
+ usleep(cmd->wait * 1000);
+ usleep(15 * 1000);
+ if(ioctl(fd, FE_DISEQC_SEND_BURST, b) < 0)
+ return -1;
+ usleep(15 * 1000);
+ if(ioctl(fd, FE_SET_TONE, t) < 0)
+ return -1;
+
+ return 0;
+}
+
+/*
* retune to the frequency the given service_id is on
*/
@@ -343,6 +444,9 @@
struct dvb_frontend_info fe_info;
struct dvb_frontend_parameters current_params;
struct dvb_frontend_parameters needed_params;
+ char polarity;
+ unsigned int sat_no;
+ bool hi_lo;
struct dvb_frontend_event event;
fe_status_t status;
bool lock;
@@ -381,7 +485,7 @@
fatal("ioctl FE_GET_FRONTEND: %s", strerror(errno));
/* find the tuning params for the service */
- if(!get_tune_params(fe_info.type, service_id, &needed_params))
+ if(!get_tune_params(fe_info.type, service_id, &needed_params, &polarity, &sat_no))
{
error("service_id %u not found in channels.conf file", service_id);
return false;
@@ -407,6 +511,21 @@
/* empty event queue */
while(ioctl(fe_fd, FE_GET_EVENT, &event) >= 0)
; /* do nothing */
+ /* do DISEQC (whatever that is) for DVB-S */
+ if(fe_info.type == FE_QPSK)
+ {
+ if(needed_params.frequency < SLOF)
+ {
+ needed_params.frequency -= LOF1;
+ hi_lo = false;
+ }
+ else
+ {
+ needed_params.frequency -= LOF2;
+ hi_lo = true;
+ }
+ do_diseqc(fe_fd, sat_no, polarity, hi_lo);
+ }
/* tune in */
if(ioctl(fe_fd, FE_SET_FRONTEND, &needed_params) < 0)
fatal("Unable to retune: ioctl FE_SET_FRONTEND: %s", strerror(errno));
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2007-04-27 09:38:35
|
Revision: 296
http://svn.sourceforge.net/redbutton/?rev=296&view=rev
Author: skilvington
Date: 2007-04-27 02:38:23 -0700 (Fri, 27 Apr 2007)
Log Message:
-----------
search for channels.conf is ~/.tzap/, ~/.szap/, etc depending on card type
Modified Paths:
--------------
redbutton-download/trunk/channels.c
redbutton-download/trunk/channels.h
redbutton-download/trunk/rb-download.c
www/index.html
Modified: redbutton-download/trunk/channels.c
===================================================================
--- redbutton-download/trunk/channels.c 2007-04-26 14:37:47 UTC (rev 295)
+++ redbutton-download/trunk/channels.c 2007-04-27 09:38:23 UTC (rev 296)
@@ -42,16 +42,79 @@
static bool get_dvbc_tune_params(uint16_t, struct dvb_frontend_parameters *);
static bool get_atsc_tune_params(uint16_t, struct dvb_frontend_parameters *);
+/*
+ * returns "tzap" if the given DVB adapter is DVB-T,
+ * "szap" if it is DVB-S
+ * "czap" if it is DVB-C
+ * or "azap" if it is ATSC
+ * (may have been better to call one of these to retune rather than doing it ourselves?)
+ */
+
+char *
+zap_name(unsigned int adapter)
+{
+ char fe_dev[PATH_MAX];
+ int fe_fd;
+ struct dvb_frontend_info fe_info;
+ bool got_info;
+
+ /* see what type of DVB device the adapter is */
+ snprintf(fe_dev, sizeof(fe_dev), FE_DEVICE, adapter);
+
+ if((fe_fd = open(fe_dev, O_RDONLY | O_NONBLOCK)) < 0)
+ fatal("open '%s': %s", fe_dev, strerror(errno));
+
+ vverbose("Getting frontend info");
+
+ do
+ {
+ /* maybe interrupted by a signal */
+ got_info = (ioctl(fe_fd, FE_GET_INFO, &fe_info) >= 0);
+ if(!got_info && errno != EINTR)
+ fatal("ioctl FE_GET_INFO: %s", strerror(errno));
+ }
+ while(!got_info);
+
+ close(fe_fd);
+
+ if(fe_info.type == FE_OFDM)
+ {
+ vverbose("Adapter %u is a '%s' DVB-T card", adapter, fe_info.name);
+ return "tzap";
+ }
+ else if(fe_info.type == FE_QPSK)
+ {
+ vverbose("Adapter %u is a '%s' DVB-S card", adapter, fe_info.name);
+ return "szap";
+ }
+ else if(fe_info.type == FE_QAM)
+ {
+ vverbose("Adapter %u is a '%s' DVB-C card", adapter, fe_info.name);
+ return "czap";
+ }
+ else if(fe_info.type == FE_ATSC)
+ {
+ vverbose("Adapter %u is a '%s' ATSC card", adapter, fe_info.name);
+ return "azap";
+ }
+ else
+ {
+ vverbose("Adapter %u (%s); unknown card type %d", adapter, fe_info.name, fe_info.type);
+ return "";
+ }
+}
+
static FILE *_channels = NULL;
/*
* if filename is NULL, it searches for:
- * ~/.tzap/channels.conf
+ * ~/.<zap_name>/channels.conf
* /etc/channels.conf
+ * zap_name should be tzap for DVB-T, szap for DVB-S, czap for DVB-C or azap for ATSC cards
*/
bool
-init_channels_conf(char *filename)
+init_channels_conf(char *zap_name, char *filename)
{
char *home;
char pathname[PATH_MAX];
@@ -63,7 +126,7 @@
{
if((home = getenv("HOME")) != NULL)
{
- snprintf(pathname, sizeof(pathname), "%s/.tzap/channels.conf", home);
+ snprintf(pathname, sizeof(pathname), "%s/.%s/channels.conf", home, zap_name);
verbose("Trying to open %s", pathname);
_channels = fopen(pathname, "r");
}
Modified: redbutton-download/trunk/channels.h
===================================================================
--- redbutton-download/trunk/channels.h 2007-04-26 14:37:47 UTC (rev 295)
+++ redbutton-download/trunk/channels.h 2007-04-27 09:38:23 UTC (rev 296)
@@ -26,8 +26,10 @@
#include <stdint.h>
#include <stdbool.h>
-bool init_channels_conf(char *);
+char *zap_name(unsigned int);
+bool init_channels_conf(char *, char *);
+
bool tune_service_id(unsigned int, unsigned int, uint16_t);
#endif /* __CHANNELS_H__ */
Modified: redbutton-download/trunk/rb-download.c
===================================================================
--- redbutton-download/trunk/rb-download.c 2007-04-26 14:37:47 UTC (rev 295)
+++ redbutton-download/trunk/rb-download.c 2007-04-27 09:38:23 UTC (rev 296)
@@ -20,7 +20,7 @@
* if not specified with -f, rb-download will search for:
* ~/.tzap/channels.conf
* /etc/channels.conf
- *
+ *
* rb-download listens on the network for commands from a remote rb-browser
* the default IP to listen on is 0.0.0.0 (ie all interfaces), the default TCP port is 10101
* the -l option changes the default IP and port
@@ -148,7 +148,7 @@
}
/* initialise channels.conf */
- if(!init_channels_conf(channels_file))
+ if(!init_channels_conf(zap_name(adapter), channels_file))
error("Unable to open channels.conf file");
/* do we need to change the base directory */
Modified: www/index.html
===================================================================
--- www/index.html 2007-04-26 14:37:47 UTC (rev 295)
+++ www/index.html 2007-04-27 09:38:23 UTC (rev 296)
@@ -54,11 +54,12 @@
<PRE>
scan ./uk-Malvern > ~/.tzap/channels.conf
</PRE>
-If not specified with -f, rb-download will search for:
+If not specified with -f, rb-download will search for (in the case of DVB-T cards):
<UL>
<LI>~/.tzap/channels.conf</LI>
<LI>/etc/channels.conf</LI>
</UL>
+For DVB-S cards it will look in ~/.szap/, for DVB-C cards it will look in ~/.czap/ and for ATSC cards it will look in the ~/.azap/ directory.
<P>
rb-download listens on the network for commands from a remote rb-browser.
The default IP to listen on is 0.0.0.0 (ie all interfaces), the default TCP port is 10101.
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2007-04-26 14:37:49
|
Revision: 295
http://svn.sourceforge.net/redbutton/?rev=295&view=rev
Author: skilvington
Date: 2007-04-26 07:37:47 -0700 (Thu, 26 Apr 2007)
Log Message:
-----------
prepare to allow ATSC cards to tune
Modified Paths:
--------------
redbutton-download/trunk/channels.c
Modified: redbutton-download/trunk/channels.c
===================================================================
--- redbutton-download/trunk/channels.c 2007-04-26 12:10:34 UTC (rev 294)
+++ redbutton-download/trunk/channels.c 2007-04-26 14:37:47 UTC (rev 295)
@@ -40,6 +40,7 @@
static bool get_dvbt_tune_params(uint16_t, struct dvb_frontend_parameters *);
static bool get_dvbs_tune_params(uint16_t, struct dvb_frontend_parameters *);
static bool get_dvbc_tune_params(uint16_t, struct dvb_frontend_parameters *);
+static bool get_atsc_tune_params(uint16_t, struct dvb_frontend_parameters *);
static FILE *_channels = NULL;
@@ -195,6 +196,8 @@
return get_dvbs_tune_params(service_id, out);
else if(fe_type == FE_QAM)
return get_dvbc_tune_params(service_id, out);
+ else if(fe_type == FE_ATSC)
+ return get_atsc_tune_params(service_id, out);
else
error("Unknown DVB device type (%d)", fe_type);
@@ -258,6 +261,13 @@
return false;
}
+static bool
+get_atsc_tune_params(uint16_t service_id, struct dvb_frontend_parameters *out)
+{
+printf("TODO: tune ATSC card to service_id %u\n", service_id);
+return false;
+}
+
/*
* retune to the frequency the given service_id is on
*/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2007-04-26 12:10:37
|
Revision: 294
http://svn.sourceforge.net/redbutton/?rev=294&view=rev
Author: skilvington
Date: 2007-04-26 05:10:34 -0700 (Thu, 26 Apr 2007)
Log Message:
-----------
prepare to allow DVB-S and -C cards to retune too
Modified Paths:
--------------
redbutton-download/trunk/channels.c
Modified: redbutton-download/trunk/channels.c
===================================================================
--- redbutton-download/trunk/channels.c 2007-04-25 17:35:23 UTC (rev 293)
+++ redbutton-download/trunk/channels.c 2007-04-26 12:10:34 UTC (rev 294)
@@ -35,8 +35,12 @@
#include "utils.h"
/* internal functions */
-static struct dvb_frontend_parameters *get_tune_params(uint16_t);
+static bool get_tune_params(fe_type_t, uint16_t, struct dvb_frontend_parameters *);
+static bool get_dvbt_tune_params(uint16_t, struct dvb_frontend_parameters *);
+static bool get_dvbs_tune_params(uint16_t, struct dvb_frontend_parameters *);
+static bool get_dvbc_tune_params(uint16_t, struct dvb_frontend_parameters *);
+
static FILE *_channels = NULL;
/*
@@ -81,6 +85,7 @@
* map strings to frontend enum values
* based on tzap utility in linuxtv dvb-apps package
*/
+
struct param
{
char *name;
@@ -168,13 +173,36 @@
/*
* return the params needed to tune to the given service_id
* the data is read from the channels.conf file
- * returns NULL if the service_id is not found
+ * returns false if the service_id is not found
*/
-static struct dvb_frontend_parameters _params;
+static bool
+get_tune_params(fe_type_t fe_type, uint16_t service_id, struct dvb_frontend_parameters *out)
+{
+ if(_channels == NULL)
+ {
+ verbose("No channels.conf file available");
+ return false;
+ }
-static struct dvb_frontend_parameters *
-get_tune_params(uint16_t service_id)
+ bzero(out, sizeof(struct dvb_frontend_parameters));
+
+ verbose("Searching channels.conf for service_id %u", service_id);
+
+ if(fe_type == FE_OFDM)
+ return get_dvbt_tune_params(service_id, out);
+ else if(fe_type == FE_QPSK)
+ return get_dvbs_tune_params(service_id, out);
+ else if(fe_type == FE_QAM)
+ return get_dvbc_tune_params(service_id, out);
+ else
+ error("Unknown DVB device type (%d)", fe_type);
+
+ return false;
+}
+
+static bool
+get_dvbt_tune_params(uint16_t service_id, struct dvb_frontend_parameters *out)
{
char line[1024];
unsigned int freq;
@@ -189,16 +217,6 @@
unsigned int id;
int len;
- if(_channels == NULL)
- {
- verbose("No channels.conf file available");
- return NULL;
- }
-
- bzero(&_params, sizeof(_params));
-
- verbose("Searching channels.conf for service_id %u", service_id);
-
rewind(_channels);
while(!feof(_channels))
{
@@ -211,21 +229,35 @@
while(len >= 0 && line[len] == '\n')
line[len--] = '\0';
verbose("%s", line);
- _params.frequency = freq;
- _params.inversion = str2enum(inv, inversion_list, LIST_SIZE(inversion_list));
- _params.u.ofdm.bandwidth = str2enum(bw, bw_list, LIST_SIZE(bw_list));
- _params.u.ofdm.code_rate_HP = str2enum(hp, fec_list, LIST_SIZE(fec_list));
- _params.u.ofdm.code_rate_LP = str2enum(lp, fec_list, LIST_SIZE(fec_list));
- _params.u.ofdm.constellation = str2enum(qam, constellation_list, LIST_SIZE(constellation_list));
- _params.u.ofdm.transmission_mode = str2enum(trans, transmissionmode_list, LIST_SIZE(transmissionmode_list));
- _params.u.ofdm.guard_interval = str2enum(gi, guard_list, LIST_SIZE(guard_list));
- _params.u.ofdm.hierarchy_information = str2enum(hier, hierarchy_list, LIST_SIZE(hierarchy_list));
- return &_params;
+ out->frequency = freq;
+ out->inversion = str2enum(inv, inversion_list, LIST_SIZE(inversion_list));
+ out->u.ofdm.bandwidth = str2enum(bw, bw_list, LIST_SIZE(bw_list));
+ out->u.ofdm.code_rate_HP = str2enum(hp, fec_list, LIST_SIZE(fec_list));
+ out->u.ofdm.code_rate_LP = str2enum(lp, fec_list, LIST_SIZE(fec_list));
+ out->u.ofdm.constellation = str2enum(qam, constellation_list, LIST_SIZE(constellation_list));
+ out->u.ofdm.transmission_mode = str2enum(trans, transmissionmode_list, LIST_SIZE(transmissionmode_list));
+ out->u.ofdm.guard_interval = str2enum(gi, guard_list, LIST_SIZE(guard_list));
+ out->u.ofdm.hierarchy_information = str2enum(hier, hierarchy_list, LIST_SIZE(hierarchy_list));
+ return true;
}
- return NULL;
+ return false;
}
+static bool
+get_dvbs_tune_params(uint16_t service_id, struct dvb_frontend_parameters *out)
+{
+printf("TODO: tune DVB-S card to service_id %u\n", service_id);
+return false;
+}
+
+static bool
+get_dvbc_tune_params(uint16_t service_id, struct dvb_frontend_parameters *out)
+{
+printf("TODO: tune DVB-C card to service_id %u\n", service_id);
+return false;
+}
+
/*
* retune to the frequency the given service_id is on
*/
@@ -237,7 +269,7 @@
bool got_info;
struct dvb_frontend_info fe_info;
struct dvb_frontend_parameters current_params;
- struct dvb_frontend_parameters *needed_params;
+ struct dvb_frontend_parameters needed_params;
struct dvb_frontend_event event;
fe_status_t status;
bool lock;
@@ -271,19 +303,12 @@
}
while(!got_info);
- if(fe_info.type != FE_OFDM)
- {
-/* TODO */
-printf("TODO: Only able to tune DVB-T devices at present\n");
-return false;
- }
-
/* see what we are currently tuned to */
if(ioctl(fe_fd, FE_GET_FRONTEND, ¤t_params) < 0)
fatal("ioctl FE_GET_FRONTEND: %s", strerror(errno));
/* find the tuning params for the service */
- if((needed_params = get_tune_params(service_id)) == NULL)
+ if(!get_tune_params(fe_info.type, service_id, &needed_params))
{
error("service_id %u not found in channels.conf file", service_id);
return false;
@@ -301,16 +326,16 @@
lock = status & FE_HAS_LOCK;
/* are we already tuned to the right frequency */
- vverbose("Current frequency %u; needed %u; lock=%d", current_params.frequency, needed_params->frequency, lock);
+ vverbose("Current frequency %u; needed %u; lock=%d", current_params.frequency, needed_params.frequency, lock);
if(!lock
- || current_params.frequency != needed_params->frequency)
+ || current_params.frequency != needed_params.frequency)
{
- verbose("Retuning to frequency %u", needed_params->frequency);
+ verbose("Retuning to frequency %u", needed_params.frequency);
/* empty event queue */
while(ioctl(fe_fd, FE_GET_EVENT, &event) >= 0)
; /* do nothing */
/* tune in */
- if(ioctl(fe_fd, FE_SET_FRONTEND, needed_params) < 0)
+ if(ioctl(fe_fd, FE_SET_FRONTEND, &needed_params) < 0)
fatal("Unable to retune: ioctl FE_SET_FRONTEND: %s", strerror(errno));
/* wait for lock */
vverbose("Waiting for tuner to lock on");
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2007-04-25 17:35:25
|
Revision: 293
http://svn.sourceforge.net/redbutton/?rev=293&view=rev
Author: skilvington
Date: 2007-04-25 10:35:23 -0700 (Wed, 25 Apr 2007)
Log Message:
-----------
whitespace
Modified Paths:
--------------
redbutton-download/trunk/channels.c
Modified: redbutton-download/trunk/channels.c
===================================================================
--- redbutton-download/trunk/channels.c 2007-04-25 10:20:11 UTC (rev 292)
+++ redbutton-download/trunk/channels.c 2007-04-25 17:35:23 UTC (rev 293)
@@ -289,7 +289,8 @@
return false;
}
- /* if no-one was using the frontend when we open it
+ /*
+ * if no-one was using the frontend when we open it
* FE_GET_FRONTEND may say we are tuned to the frequency we want
* but when we try to read any data, it fails
* so check if we have a lock
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2007-04-25 10:20:15
|
Revision: 292
http://svn.sourceforge.net/redbutton/?rev=292&view=rev
Author: skilvington
Date: 2007-04-25 03:20:11 -0700 (Wed, 25 Apr 2007)
Log Message:
-----------
more detail in error message
Modified Paths:
--------------
redbutton-browser/trunk/MHEGStreamPlayer.c
Modified: redbutton-browser/trunk/MHEGStreamPlayer.c
===================================================================
--- redbutton-browser/trunk/MHEGStreamPlayer.c 2007-04-25 09:44:10 UTC (rev 291)
+++ redbutton-browser/trunk/MHEGStreamPlayer.c 2007-04-25 10:20:11 UTC (rev 292)
@@ -272,7 +272,7 @@
p->have_audio, &p->audio_pid, &p->audio_type,
p->have_video, &p->video_pid, &p->video_type)) == NULL)
{
- error("Unable to open MPEG stream");
+ error("Unable to open MPEG stream (%d, %d, %d)", p->service_id, p->audio_tag, p->video_tag);
return;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2007-04-25 09:44:41
|
Revision: 291
http://svn.sourceforge.net/redbutton/?rev=291&view=rev
Author: skilvington
Date: 2007-04-25 02:44:10 -0700 (Wed, 25 Apr 2007)
Log Message:
-----------
don't kill the downloader if a module is corrupt, try to download it again
Modified Paths:
--------------
redbutton-download/trunk/biop.c
redbutton-download/trunk/biop.h
redbutton-download/trunk/module.c
Modified: redbutton-download/trunk/biop.c
===================================================================
--- redbutton-download/trunk/biop.c 2007-04-24 10:38:53 UTC (rev 290)
+++ redbutton-download/trunk/biop.c 2007-04-25 09:44:10 UTC (rev 291)
@@ -33,9 +33,10 @@
/*
* split the module into separate BIOP messages
+ * returns false if the format is invalid
*/
-void
+bool
process_biop(struct carousel *car, struct module *mod, struct BIOPMessageHeader *data, uint32_t size)
{
uint32_t bytes_left;
@@ -64,11 +65,17 @@
|| data->biop_version.major != BIOP_VSN_MAJOR
|| data->biop_version.minor != BIOP_VSN_MINOR
|| data->message_type != BIOP_MSG_TYPE)
- fatal("Invalid BIOP header");
+ {
+ error("Invalid BIOP header");
+ return false;
+ }
size = biop_uint32(data->byte_order, data->message_size);
vverbose("BIOP message_size=%u", size);
if(bytes_left < sizeof(struct BIOPMessageHeader) + size)
- fatal("Not enough BIOP data");
+ {
+ error("Not enough BIOP data");
+ return false;
+ }
/* process MessageSubHeader */
subhdr = ((unsigned char *) data) + sizeof(struct BIOPMessageHeader);
vhexdump(subhdr, size);
@@ -132,14 +139,14 @@
}
else
{
- fatal("Unknown BIOP object: '%.*s'", kind.size, kind.data);
+ error("Ignoring unknown BIOP object: '%.*s'", kind.size, kind.data);
}
/* move onto the next */
data = (struct BIOPMessageHeader *) (((unsigned char *) data) + sizeof(struct BIOPMessageHeader) + size);
bytes_left -= sizeof(struct BIOPMessageHeader) + size;
}
- return;
+ return true;
}
/*
Modified: redbutton-download/trunk/biop.h
===================================================================
--- redbutton-download/trunk/biop.h 2007-04-24 10:38:53 UTC (rev 290)
+++ redbutton-download/trunk/biop.h 2007-04-25 09:44:10 UTC (rev 291)
@@ -100,7 +100,7 @@
};
/* functions */
-void process_biop(struct carousel *, struct module *, struct BIOPMessageHeader *, uint32_t);
+bool process_biop(struct carousel *, struct module *, struct BIOPMessageHeader *, uint32_t);
void process_biop_dir(uint8_t, char *, struct carousel *, unsigned char *, uint32_t);
uint32_t process_iop_ior(uint8_t, unsigned char *, struct biop_iop_ior *);
uint16_t process_biop_service_gateway_info(uint16_t, struct assoc *, unsigned char *, uint16_t);
Modified: redbutton-download/trunk/module.c
===================================================================
--- redbutton-download/trunk/module.c 2007-04-24 10:38:53 UTC (rev 290)
+++ redbutton-download/trunk/module.c 2007-04-25 09:44:10 UTC (rev 291)
@@ -145,11 +145,20 @@
uncompress_module(mod);
verbose("uncompressed size=%u", mod->size);
}
- process_biop(car, mod, (struct BIOPMessageHeader *) mod->data, mod->size);
- /* we can free the data now, keep got_block so we don't download it again */
- safe_free(mod->data);
- /* delete_module may safe_free it again */
- mod->data = NULL;
+ if(process_biop(car, mod, (struct BIOPMessageHeader *) mod->data, mod->size))
+ {
+ /* we can free the data now, keep got_block so we don't download it again */
+ safe_free(mod->data);
+ /* delete_module may safe_free it again */
+ mod->data = NULL;
+ }
+ else
+ {
+ /* failed to process it, try downloading it again */
+ mod->blocks_left = mod->nblocks;
+ /* assumes false == 0 */
+ bzero(mod->got_block, mod->nblocks * sizeof(bool));
+ }
}
return;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: Steven E. <st...@op...> - 2007-04-24 11:30:21
|
On Tue, April 24, 2007 11:15 pm, si...@un... wrote: >> Let me know if you want a new tgz of the rb-download cache to assist >> debugging. >> >> Steve > > Hi, > > that would be very handy - though it may take a while for me to get > anything > done - we've had a new baby about 2 weeks ago, so it's all a bit hectic= at > the > moment! > > PS: this is my home email, I'm off work at the moment, so I'm not readi= ng > the > eris.qinetiq one Hey no worries. Been keeping an eye on your commits anyway. I'll try and test the new set shortly. Then I can look at arranging a new dump from rb-download. Steve -------------------------------------------- Steven Ellis - Technical Director OpenMedia Limited - The Home of myPVR email - st...@op... sales - sa...@op... support - su...@op... website - http://www.openmedia.co.nz |
|
From: <si...@un...> - 2007-04-24 11:15:59
|
> Let me know if you want a new tgz of the rb-download cache to assist
> debugging.
>
> Steve
Hi,
that would be very handy - though it may take a while for me to get anything
done - we've had a new baby about 2 weeks ago, so it's all a bit hectic at the
moment!
PS: this is my home email, I'm off work at the moment, so I'm not reading the
eris.qinetiq one
|
|
From: <ski...@us...> - 2007-04-24 10:38:55
|
Revision: 290
http://svn.sourceforge.net/redbutton/?rev=290&view=rev
Author: skilvington
Date: 2007-04-24 03:38:53 -0700 (Tue, 24 Apr 2007)
Log Message:
-----------
find the original_network_id
Modified Paths:
--------------
redbutton-download/trunk/command.c
redbutton-download/trunk/findmheg.c
redbutton-download/trunk/module.h
Modified: redbutton-download/trunk/command.c
===================================================================
--- redbutton-download/trunk/command.c 2007-04-24 10:24:53 UTC (rev 289)
+++ redbutton-download/trunk/command.c 2007-04-24 10:38:53 UTC (rev 290)
@@ -815,11 +815,8 @@
SEND_RESPONSE(200, "OK");
-/* TODO */
-printf("TODO: cmd_service network_id\n");
+ fprintf(client, "dvb://%x..%x\n", car->network_id, car->service_id);
- fprintf(client, "dvb://..%x\n", car->service_id);
-
return false;
}
Modified: redbutton-download/trunk/findmheg.c
===================================================================
--- redbutton-download/trunk/findmheg.c 2007-04-24 10:24:53 UTC (rev 289)
+++ redbutton-download/trunk/findmheg.c 2007-04-24 10:38:53 UTC (rev 290)
@@ -101,6 +101,7 @@
find_mheg(unsigned int adapter, unsigned int timeout, uint16_t service_id, int carousel_id)
{
unsigned char pmt[MAX_TABLE_LEN];
+ unsigned char *sdt = pmt;
uint16_t section_length;
uint16_t offset;
uint8_t stream_type;
@@ -119,6 +120,7 @@
_car.service_id = service_id;
/* unknown */
+ _car.network_id = 0;
_car.carousel_id = 0;
_car.boot_pid = 0;
_car.audio_pid = 0;
@@ -136,6 +138,12 @@
_car.nmodules = 0;
_car.modules = NULL;
+ /* find the original_network_id from the SDT */
+ if(!read_sdt(_car.demux_device, timeout, sdt))
+ fatal("Unable to read SDT");
+ _car.network_id = (sdt[8] << 8) + sdt[9];
+ vverbose("original_network_id=%u", _car.network_id);
+
/* get the PMT */
if(!read_pmt(_car.demux_device, service_id, timeout, pmt))
fatal("Unable to read PMT");
Modified: redbutton-download/trunk/module.h
===================================================================
--- redbutton-download/trunk/module.h 2007-04-24 10:24:53 UTC (rev 289)
+++ redbutton-download/trunk/module.h 2007-04-24 10:38:53 UTC (rev 290)
@@ -60,8 +60,9 @@
char dvr_device[PATH_MAX]; /* dvr device path */
unsigned int timeout; /* timeout for the DVB devices */
pid_t downloader; /* ID of the process downloading the carousel */
- uint16_t service_id;
- uint32_t carousel_id;
+ uint16_t network_id; /* Original Network ID */
+ uint16_t service_id; /* Service ID we are downloading the carousel from */
+ uint32_t carousel_id; /* Carousel ID we are downloading */
uint16_t boot_pid; /* PID containing DSI */
uint16_t audio_pid; /* PID of default audio stream for this service_id */
uint8_t audio_type; /* type ID of default audio stream */
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2007-04-24 10:24:55
|
Revision: 289
http://svn.sourceforge.net/redbutton/?rev=289&view=rev
Author: skilvington
Date: 2007-04-24 03:24:53 -0700 (Tue, 24 Apr 2007)
Log Message:
-----------
cache the SDT
Modified Paths:
--------------
redbutton-download/trunk/findmheg.c
redbutton-download/trunk/list.c
redbutton-download/trunk/table.c
redbutton-download/trunk/table.h
Modified: redbutton-download/trunk/findmheg.c
===================================================================
--- redbutton-download/trunk/findmheg.c 2007-04-24 09:57:13 UTC (rev 288)
+++ redbutton-download/trunk/findmheg.c 2007-04-24 10:24:53 UTC (rev 289)
@@ -30,16 +30,8 @@
#include "findmheg.h"
#include "table.h"
#include "assoc.h"
-#include "cache.h"
#include "utils.h"
-/* Programme Association Table and Section */
-#define PID_PAT 0x0000
-#define TID_PAT 0x00
-
-/* Programme Map Section */
-#define TID_PMT 0x02
-
/* stream_types we are interested in */
#define STREAM_TYPE_VIDEO_MPEG2 0x02
#define STREAM_TYPE_AUDIO_MPEG1 0x03
@@ -83,8 +75,6 @@
static struct avstreams *find_current_avstreams(struct carousel *, int, int);
static struct avstreams *find_service_avstreams(struct carousel *, int, int, int);
-static bool read_pat(char *, unsigned int, unsigned char *);
-static bool read_pmt(char *, uint16_t, unsigned int, unsigned char *);
bool
is_audio_stream(uint8_t stream_type)
@@ -409,89 +399,3 @@
return &_streams;
}
-/*
- * output buffer must be at least MAX_TABLE_LEN bytes
- * returns false if it timesout
- */
-
-static bool
-read_pat(char *demux, unsigned int timeout, unsigned char *out)
-{
- /* is it in the cache */
- if(cache_load("pat", out))
- return true;
-
- /* read it from the DVB card */
- if(!read_table(demux, PID_PAT, TID_PAT, timeout, out))
- {
- error("Unable to read PAT");
- return false;
- }
-
- /* cache it */
- cache_save("pat", out);
-
- return true;
-}
-
-/*
- * output buffer must be at least MAX_TABLE_LEN bytes
- * returns false if it timesout
- */
-
-static bool
-read_pmt(char *demux, uint16_t service_id, unsigned int timeout, unsigned char *out)
-{
- char cache_item[PATH_MAX];
- unsigned char pat[MAX_TABLE_LEN];
- uint16_t section_length;
- uint16_t offset;
- uint16_t map_pid = 0;
- bool found;
- bool rc;
-
- /* is it in the cache */
- snprintf(cache_item, sizeof(cache_item), "pmt-%u", service_id);
- if(cache_load(cache_item, out))
- return true;
-
- /* get the PAT */
- if(!read_pat(demux, timeout, pat))
- return false;
-
- section_length = 3 + (((pat[1] & 0x0f) << 8) + pat[2]);
-
- /* find the PMT for this service_id */
- found = false;
- offset = 8;
- /* -4 for the CRC at the end */
- while((offset < (section_length - 4)) && !found)
- {
- if((pat[offset] << 8) + pat[offset+1] == service_id)
- {
- map_pid = ((pat[offset+2] & 0x1f) << 8) + pat[offset+3];
- found = true;
- }
- else
- {
- offset += 4;
- }
- }
-
- if(!found)
- fatal("Unable to find PMT PID for service_id %u", service_id);
-
- vverbose("PMT PID: %u", map_pid);
-
- /* get the PMT */
- rc = read_table(demux, map_pid, TID_PMT, timeout, out);
-
- /* cache it */
- if(rc)
- cache_save(cache_item, out);
- else
- error("Unable to read PMT");
-
- return rc;
-}
-
Modified: redbutton-download/trunk/list.c
===================================================================
--- redbutton-download/trunk/list.c 2007-04-24 09:57:13 UTC (rev 288)
+++ redbutton-download/trunk/list.c 2007-04-24 10:24:53 UTC (rev 289)
@@ -26,10 +26,6 @@
#include "table.h"
#include "utils.h"
-/* PID and TID we want */
-#define PID_SDT 0x0011
-#define TID_SDS 0x42
-
/* service_descriptor tag */
#define TAG_SERVICE_DESCRIPTOR 0x48
@@ -37,7 +33,7 @@
list_channels(unsigned int adapter, unsigned int timeout)
{
char demux_dev[PATH_MAX];
- unsigned char sds[MAX_TABLE_LEN];
+ unsigned char sdt[MAX_TABLE_LEN];
uint16_t size;
uint16_t offset;
uint16_t service_id;
@@ -52,29 +48,29 @@
printf("ID\tChannel\n");
printf("==\t=======\n");
- /* grab the Service Description Section table */
- if(!read_table(demux_dev, PID_SDT, TID_SDS, timeout, sds))
+ /* grab the Service Description Table */
+ if(!read_sdt(demux_dev, timeout, sdt))
fatal("Unable to read SDT");
/* 12 bit section_length field */
- size = 3 + (((sds[1] & 0x0f) << 8) + sds[2]);
+ size = 3 + (((sdt[1] & 0x0f) << 8) + sdt[2]);
/* loop through the services */
offset = 11;
/* -4 for the CRC at the end */
while(offset < (size - 4))
{
- service_id = (sds[offset] << 8) + sds[offset+1];
+ service_id = (sdt[offset] << 8) + sdt[offset+1];
printf("%u\t", service_id);
/* move on to the descriptors */
offset += 3;
- desc_loop_length = ((sds[offset] & 0x0f) << 8) + sds[offset+1];
+ desc_loop_length = ((sdt[offset] & 0x0f) << 8) + sdt[offset+1];
offset += 2;
/* find the service_descriptor tag */
while(desc_loop_length != 0)
{
- desc_tag = sds[offset];
- desc_length = sds[offset+1];
+ desc_tag = sdt[offset];
+ desc_length = sdt[offset+1];
offset += 2;
desc_loop_length -= 2;
if(desc_tag == TAG_SERVICE_DESCRIPTOR)
@@ -82,18 +78,18 @@
/* service_type = sds[offset]; */
offset += 1;
/* service_provider_name */
- name_len = sds[offset];
+ name_len = sdt[offset];
offset += 1 + name_len;
/* service_name */
- name_len = sds[offset];
+ name_len = sdt[offset];
offset += 1;
- printf("%.*s\n", name_len, &sds[offset]);
+ printf("%.*s\n", name_len, &sdt[offset]);
offset += name_len;
}
else
{
vverbose("desc_tag: %u", desc_tag);
- vhexdump(&sds[offset], desc_length);
+ vhexdump(&sdt[offset], desc_length);
offset += desc_length;
}
desc_loop_length -= desc_length;
Modified: redbutton-download/trunk/table.c
===================================================================
--- redbutton-download/trunk/table.c 2007-04-24 09:57:13 UTC (rev 288)
+++ redbutton-download/trunk/table.c 2007-04-24 10:24:53 UTC (rev 289)
@@ -42,8 +42,20 @@
#include "dsmcc.h"
#include "carousel.h"
#include "biop.h"
+#include "cache.h"
#include "utils.h"
+/* Programme Association Table PID and TID */
+#define PID_PAT 0x0000
+#define TID_PAT 0x00
+
+/* Programme Map Table TID */
+#define TID_PMT 0x02
+
+/* Service Description Table PID and TID */
+#define PID_SDT 0x0011
+#define TID_SDT 0x42
+
/* DSMCC table ID's we want */
#define TID_DSMCC_CONTROL 0x3b /* DSI or DII */
#define TID_DSMCC_DATA 0x3c /* DDB */
@@ -54,6 +66,117 @@
*/
bool
+read_pat(char *demux, unsigned int timeout, unsigned char *out)
+{
+ /* is it in the cache */
+ if(cache_load("pat", out))
+ return true;
+
+ /* read it from the DVB card */
+ if(!read_table(demux, PID_PAT, TID_PAT, timeout, out))
+ {
+ error("Unable to read PAT");
+ return false;
+ }
+
+ /* cache it */
+ cache_save("pat", out);
+
+ return true;
+}
+
+/*
+ * output buffer must be at least MAX_TABLE_LEN bytes
+ * returns false if it timesout
+ */
+
+bool
+read_pmt(char *demux, uint16_t service_id, unsigned int timeout, unsigned char *out)
+{
+ char cache_item[PATH_MAX];
+ unsigned char pat[MAX_TABLE_LEN];
+ uint16_t section_length;
+ uint16_t offset;
+ uint16_t map_pid = 0;
+ bool found;
+ bool rc;
+
+ /* is it in the cache */
+ snprintf(cache_item, sizeof(cache_item), "pmt-%u", service_id);
+ if(cache_load(cache_item, out))
+ return true;
+
+ /* get the PAT */
+ if(!read_pat(demux, timeout, pat))
+ return false;
+
+ section_length = 3 + (((pat[1] & 0x0f) << 8) + pat[2]);
+
+ /* find the PMT for this service_id */
+ found = false;
+ offset = 8;
+ /* -4 for the CRC at the end */
+ while((offset < (section_length - 4)) && !found)
+ {
+ if((pat[offset] << 8) + pat[offset+1] == service_id)
+ {
+ map_pid = ((pat[offset+2] & 0x1f) << 8) + pat[offset+3];
+ found = true;
+ }
+ else
+ {
+ offset += 4;
+ }
+ }
+
+ if(!found)
+ fatal("Unable to find PMT PID for service_id %u", service_id);
+
+ vverbose("PMT PID: %u", map_pid);
+
+ /* get the PMT */
+ rc = read_table(demux, map_pid, TID_PMT, timeout, out);
+
+ /* cache it */
+ if(rc)
+ cache_save(cache_item, out);
+ else
+ error("Unable to read PMT");
+
+ return rc;
+}
+
+/*
+ * output buffer must be at least MAX_TABLE_LEN bytes
+ * returns false if it timesout
+ */
+
+bool
+read_sdt(char *demux, unsigned int timeout, unsigned char *out)
+{
+ /* is it in the cache */
+ if(cache_load("sdt", out))
+ return true;
+
+ /* read it from the DVB card */
+ if(!read_table(demux, PID_SDT, TID_SDT, timeout, out))
+ {
+ error("Unable to read SDT");
+ return false;
+ }
+
+ /* cache it */
+ cache_save("sdt", out);
+
+ return true;
+}
+
+/*
+ * output buffer must be at least MAX_TABLE_LEN bytes
+ * returns false if it timesout
+ */
+
+bool
read_table(char *device, uint16_t pid, uint8_t tid, unsigned int secs, unsigned char *out)
{
int fd_data;
Modified: redbutton-download/trunk/table.h
===================================================================
--- redbutton-download/trunk/table.h 2007-04-24 09:57:13 UTC (rev 288)
+++ redbutton-download/trunk/table.h 2007-04-24 10:24:53 UTC (rev 289)
@@ -31,6 +31,10 @@
/* max size of a DVB table */
#define MAX_TABLE_LEN 4096
+bool read_pat(char *, unsigned int, unsigned char *);
+bool read_pmt(char *, uint16_t, unsigned int, unsigned char *);
+bool read_sdt(char *, unsigned int, unsigned char *);
+
bool read_table(char *, uint16_t, uint8_t, unsigned int, unsigned char *);
bool read_dsmcc_tables(struct carousel *, unsigned char *);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2007-04-24 09:57:21
|
Revision: 288
http://svn.sourceforge.net/redbutton/?rev=288&view=rev
Author: skilvington
Date: 2007-04-24 02:57:13 -0700 (Tue, 24 Apr 2007)
Log Message:
-----------
patch from Steven Ellis at OpenMedia NZ to try the FreeSans font if Tiresias is not available
Modified Paths:
--------------
redbutton-browser/trunk/MHEGFont.c
www/index.html
Modified: redbutton-browser/trunk/MHEGFont.c
===================================================================
--- redbutton-browser/trunk/MHEGFont.c 2007-04-15 09:47:31 UTC (rev 287)
+++ redbutton-browser/trunk/MHEGFont.c 2007-04-24 09:57:13 UTC (rev 288)
@@ -107,35 +107,45 @@
* this cost $1000 to licence from Bit Stream
* alternatively, you can download Nebula DigiTV iTuner from http://www.nebula-electronics.com/
* install it on a Windows box and copy C:\Windows\Fonts\tt7268m_802.ttf to your Linux box
- * if you don't have Tiresias Screenfont, we use whatever Xft returns for 'sans' instead
+ * if you don't have Tiresias Screenfont, we try FreeSans instead
+ * if FreeSANS is not available either, we use whatever Xft returns for 'sans'
*/
static char *_default_font_name = NULL;
static char *_font_name_tiresias = "TiresiasScreenfont";
+static char *_font_name_freesans = "FreeSans";
static char *_font_name_sans = "sans";
void
MHEGFont_defaultName(MHEGFont *font)
{
Display *dpy = MHEGEngine_getDisplay()->dpy;
- char *xlfdname = "-*-TiresiasScreenfont-medium-r-normal-*";
- char **names;
+ char *xlfd_tiresias = "-*-TiresiasScreenfont-medium-r-normal-*";
+ char *xlfd_freesans = "-*-freesans-medium-r-normal-*";
+ char **names = NULL;
int count;
/* first time */
if(_default_font_name == NULL)
{
/* do we have Tiresias */
- if((names = XListFonts(dpy, xlfdname, 1, &count)) != NULL)
+ if((names = XListFonts(dpy, xlfd_tiresias, 1, &count)) != NULL)
{
_default_font_name = _font_name_tiresias;
- XFreeFontNames(names);
}
+ else if((names = XListFonts(dpy, xlfd_freesans, 1, &count)) != NULL)
+ {
+ _default_font_name = _font_name_freesans;
+ error("Font '%s' not available; using '%s' for 'rec://font/uk1'", _font_name_tiresias, _font_name_freesans);
+ }
else
{
_default_font_name = _font_name_sans;
error("Font '%s' not available; using '%s' for 'rec://font/uk1'", _font_name_tiresias, _font_name_sans);
}
+ /* clean up */
+ if(names != NULL)
+ XFreeFontNames(names);
}
font->name = _default_font_name;
Modified: www/index.html
===================================================================
--- www/index.html 2007-04-15 09:47:31 UTC (rev 287)
+++ www/index.html 2007-04-24 09:57:13 UTC (rev 288)
@@ -213,8 +213,8 @@
The Australian applications are MHP, not MHEG, so you should probably look at
<A href="http://www.openmhp.org/">www.openmhp.org</A> for something to display them.
<P>
-If the Tiresias Screenfont is not available, rb-browser uses whatever scalable font Xft returns for "sans" instead.
-Note that this font will have different metrics and so may not fit into the spaces in the MHEG apps designed for Tiresias.
+If the Tiresias Screenfont is not available, rb-browser first tries to use the FreeSans font instead. If this is also not available, rb-browser uses whatever scalable font Xft returns for "sans".
+Note that these fonts will have different metrics and so may not fit into the spaces in the MHEG apps designed for Tiresias.
<H2>Contact Details</H2>
I can be contacted here: s.kilvington at eris dot qinetiq com.
</BODY>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2007-04-15 09:47:33
|
Revision: 287
http://svn.sourceforge.net/redbutton/?rev=287&view=rev
Author: skilvington
Date: 2007-04-15 02:47:31 -0700 (Sun, 15 Apr 2007)
Log Message:
-----------
screen will be redrawn for us
Modified Paths:
--------------
redbutton-browser/trunk/TODO
redbutton-browser/trunk/VideoClass.c
Modified: redbutton-browser/trunk/TODO
===================================================================
--- redbutton-browser/trunk/TODO 2007-04-15 09:17:28 UTC (rev 286)
+++ redbutton-browser/trunk/TODO 2007-04-15 09:47:31 UTC (rev 287)
@@ -4,11 +4,9 @@
aspect ratio
-VideoDecodeOffset
-
-
if video size != VideoClass size, draw a smaller transparent hole
or fill the frame edges with black
+also fill with black after SetVideoDecodeOffset
use ffmpeg to permenantly scale-up bitmaps in MHEGBitmap_fromRGBA
Modified: redbutton-browser/trunk/VideoClass.c
===================================================================
--- redbutton-browser/trunk/VideoClass.c 2007-04-15 09:17:28 UTC (rev 286)
+++ redbutton-browser/trunk/VideoClass.c 2007-04-15 09:47:31 UTC (rev 287)
@@ -365,9 +365,10 @@
t->inst.VideoDecodeOffset.y_position = GenericInteger_getInteger(¶ms->new_y_offset, caller_gid);
pthread_mutex_unlock(&t->inst.bbox_lock);
- /* if it is active, redraw it */
- if(t->rootClass.inst.RunningStatus)
- MHEGEngine_redrawArea(&t->inst.Position, &t->inst.BoxSize);
+ /* screen will be updated next time we draw a video frame */
+/* TODO */
+/* should probably clear content Pixmap to black */
+/* x,y = t->inst.Position, w,h = t->inst.BoxSize */
return;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2007-04-15 09:17:30
|
Revision: 286
http://svn.sourceforge.net/redbutton/?rev=286&view=rev
Author: skilvington
Date: 2007-04-15 02:17:28 -0700 (Sun, 15 Apr 2007)
Log Message:
-----------
add SetVideoDecodeOffset method to VideoClass
Modified Paths:
--------------
redbutton-browser/trunk/MHEGStreamPlayer.c
redbutton-browser/trunk/VideoClass.c
Modified: redbutton-browser/trunk/MHEGStreamPlayer.c
===================================================================
--- redbutton-browser/trunk/MHEGStreamPlayer.c 2007-04-13 22:14:11 UTC (rev 285)
+++ redbutton-browser/trunk/MHEGStreamPlayer.c 2007-04-15 09:17:28 UTC (rev 286)
@@ -510,6 +510,8 @@
MHEGVideoOutput vo;
int out_x;
int out_y;
+ int off_x;
+ int off_y;
unsigned int out_width;
unsigned int out_height;
unsigned int vid_width;
@@ -658,6 +660,9 @@
out_y = p->video->inst.Position.y_position;
vid_width = p->video->inst.BoxSize.x_length;
vid_height = p->video->inst.BoxSize.y_length;
+ /* VideoDecodeOffset position */
+ off_x = p->video->inst.VideoDecodeOffset.x_position;
+ off_y = p->video->inst.VideoDecodeOffset.y_position;
pthread_mutex_unlock(&p->video->inst.bbox_lock);
/* scale if fullscreen */
if(d->fullscreen)
@@ -666,12 +671,14 @@
out_y = (out_y * d->yres) / MHEG_YRES;
vid_width = (vid_width * d->xres) / MHEG_XRES;
vid_height = (vid_height * d->yres) / MHEG_YRES;
+ off_x = (off_x * d->xres) / MHEG_XRES;
+ off_y = (off_y * d->yres) / MHEG_YRES;
}
/* if the frame is smaller or larger than the VideoClass, centre it */
out_x += (vid_width - out_width) / 2;
out_y += (vid_height - out_height) / 2;
/* draw the current frame */
- MHEGVideoOutput_drawFrame(&vo, out_x, out_y);
+ MHEGVideoOutput_drawFrame(&vo, out_x + off_x, out_y + off_y);
/* redraw objects above the video */
pthread_mutex_lock(&p->video->inst.bbox_lock);
MHEGDisplay_refresh(d, &p->video->inst.Position, &p->video->inst.BoxSize);
Modified: redbutton-browser/trunk/VideoClass.c
===================================================================
--- redbutton-browser/trunk/VideoClass.c 2007-04-13 22:14:11 UTC (rev 285)
+++ redbutton-browser/trunk/VideoClass.c 2007-04-15 09:17:28 UTC (rev 286)
@@ -360,8 +360,15 @@
{
verbose("VideoClass: %s; SetVideoDecodeOffset", ExternalReference_name(&t->rootClass.inst.ref));
-/* TODO */
-printf("TODO: VideoClass_SetVideoDecodeOffset not yet implemented\n");
+ pthread_mutex_lock(&t->inst.bbox_lock);
+ t->inst.VideoDecodeOffset.x_position = GenericInteger_getInteger(¶ms->new_x_offset, caller_gid);
+ t->inst.VideoDecodeOffset.y_position = GenericInteger_getInteger(¶ms->new_y_offset, caller_gid);
+ pthread_mutex_unlock(&t->inst.bbox_lock);
+
+ /* if it is active, redraw it */
+ if(t->rootClass.inst.RunningStatus)
+ MHEGEngine_redrawArea(&t->inst.Position, &t->inst.BoxSize);
+
return;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: Open M. S. <su...@op...> - 2007-04-14 05:09:32
|
Just posted an update at http://www.mythtv.co.nz with some screenshots of the NZ profile running with a clean(ish) build of rb-download + rb-browser. The only tweak was the font patch for FreeSans so that we got the correct glyphs required for Maori. Note that im working off r284 There are still a couple of minor niggles I need to look into. The bigges= t of these is Left/Right should move through the channels in the EPG, and a= t the moment rb-browser usually freezes if I press right. I'm also seeing the following errors occasionally from rb-browser ObjectReference not found: ~//epg/nownext.m 1 ObjectReference not found: ~//epg/nownext.m 2 Plus the following errors out of rb-download Unable to load '/n' Unable to load '/pngs/z.png' Let me know if you want a new tgz of the rb-download cache to assist debugging. Steve -------------------------------------------- Steven Ellis - Technical Director OpenMedia Limited - The Home of myPVR sales - sa...@op... support - su...@op... website - http://www.openmedia.co.nz |
|
From: Open M. S. <su...@op...> - 2007-04-14 04:59:35
|
Patch enclosed to make the default font intially fall back to FreeSans as this inclued the additional glyphs required for Maori language support. -------------------------------------------- Steven Ellis - Technical Director OpenMedia Limited - The Home of myPVR sales - sa...@op... support - su...@op... website - http://www.openmedia.co.nz |
|
From: <ski...@us...> - 2007-04-13 22:14:12
|
Revision: 285
http://svn.sourceforge.net/redbutton/?rev=285&view=rev
Author: skilvington
Date: 2007-04-13 15:14:11 -0700 (Fri, 13 Apr 2007)
Log Message:
-----------
how to do it
Modified Paths:
--------------
redbutton-browser/trunk/StreamClass.c
Modified: redbutton-browser/trunk/StreamClass.c
===================================================================
--- redbutton-browser/trunk/StreamClass.c 2007-04-13 14:45:39 UTC (rev 284)
+++ redbutton-browser/trunk/StreamClass.c 2007-04-13 22:14:11 UTC (rev 285)
@@ -348,6 +348,8 @@
/* TODO */
printf("TODO: StreamClass_SetData not yet implemented\n");
+// MHEGEngine_setRecSvcCur(...)
+
return;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2007-04-13 14:45:40
|
Revision: 284
http://svn.sourceforge.net/redbutton/?rev=284&view=rev
Author: skilvington
Date: 2007-04-13 07:45:39 -0700 (Fri, 13 Apr 2007)
Log Message:
-----------
re-ordering to hopefully make it clearer
Modified Paths:
--------------
www/index.html
Modified: www/index.html
===================================================================
--- www/index.html 2007-04-13 14:39:23 UTC (rev 283)
+++ www/index.html 2007-04-13 14:45:39 UTC (rev 284)
@@ -116,11 +116,6 @@
<P>
The default backend is "-r 127.0.0.1" ie rb-download running on the same machine as rb-browser.
<P>
-If -r is not specified, rb-download is running on the same machine
-and <service_gateway> should be an entry in the services directory.
-This is really only useful for debugging, or running MHEG apps you have written
-yourself.
-<P>
Eg, on a single host, do this:
<PRE>
rb-download 4165 &
@@ -136,7 +131,12 @@
</PRE>
where 10.0.0.1 is the IP or hostname of the backend.
<P>
-To run an MHEG app you have previously downloaded and saved, do this:
+If -r is not specified, rb-download is running on the same machine
+and <service_gateway> should be an entry in the services directory.
+This is really only useful for debugging, or running MHEG apps you have written
+yourself.
+<P>
+Eg, to run an MHEG app you have previously downloaded and saved, do this:
<PRE>
rb-browser path/to/saved/services/4165
</PRE>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|