redbutton-devel Mailing List for RedButton MHEG Engine (Page 21)
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-01-11 17:02:26
|
Revision: 174
http://svn.sourceforge.net/redbutton/?rev=174&view=rev
Author: skilvington
Date: 2007-01-11 09:02:20 -0800 (Thu, 11 Jan 2007)
Log Message:
-----------
change description of -l flag to rb-download
Modified Paths:
--------------
www/index.html
Modified: www/index.html
===================================================================
--- www/index.html 2007-01-11 16:34:52 UTC (rev 173)
+++ www/index.html 2007-01-11 17:02:20 UTC (rev 174)
@@ -30,7 +30,7 @@
<H2>rb-download</H2>
Usage:
<PRE>
-rb-download [-v] [-a <adapter>] [-b <base_dir>] [-t <timeout>] [-l[<listen_addr>]] [-c <carousel_id>] [<service_id>]
+rb-download [-v] [-a <adapter>] [-b <base_dir>] [-t <timeout>] [-l <listen_addr>] [-c <carousel_id>] [<service_id>]
</PRE>
Download the DVB Object Carousel for the given channel onto the local hard disc.
<P>
@@ -47,13 +47,12 @@
</ul>
use the -a option to change the adapter number (eg "-a 1" will use /dev/dvb/adapter1/demux0 etc).
<P>
-If -l is given, rb-download listens on the network for commands from a remote rb-browser.
+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 <listen_addr> should be given in the form "host:port", where host defaults to 0.0.0.0 and port defaults to 10101.
-Eg, to listen on a different port, do "-l8080",
-to only listen on the loop back, do "-l127.0.0.1" or on a different port too, do "-l127.0.0.1:8080".
-NOTE: because -l may or may not take an argument, you must not put a space between the -l and the value
-(otherwise, "rb-download -l 1234", is ambiguous - listen on port 1234 or use service_id 1234?).
+The -l option changes the default IP and port.
+<listen_addr> should be given in the form "host:port", where host defaults to 0.0.0.0 and port defaults to 10101.
+Eg, to listen on a different port, do "-l 8080",
+to only listen on the loop back, do "-l 127.0.0.1" or on a different port too, do "-l 127.0.0.1:8080".
<P>
The <carousel_id> will normally be read from the PMT, but you can use the -c option to explicitly choose a carousel.
<P>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2007-01-11 16:34:55
|
Revision: 173
http://svn.sourceforge.net/redbutton/?rev=173&view=rev
Author: skilvington
Date: 2007-01-11 08:34:52 -0800 (Thu, 11 Jan 2007)
Log Message:
-----------
always listen for remote rb-browsers, also some reordering to make retuning possible
Modified Paths:
--------------
redbutton-download/trunk/listen.c
redbutton-download/trunk/listen.h
redbutton-download/trunk/rb-download.c
Modified: redbutton-download/trunk/listen.c
===================================================================
--- redbutton-download/trunk/listen.c 2007-01-11 11:10:32 UTC (rev 172)
+++ redbutton-download/trunk/listen.c 2007-01-11 16:34:52 UTC (rev 173)
@@ -17,6 +17,8 @@
#include <sys/wait.h>
#include "command.h"
+#include "findmheg.h"
+#include "carousel.h"
#include "utils.h"
/* listen() backlog, 5 is max for BSD apparently */
@@ -107,23 +109,18 @@
*/
void
-start_listener(struct listen_data *listen_data)
+start_listener(struct sockaddr_in *listen_addr, unsigned int adapter, unsigned int timeout, uint16_t service_id, int carousel_id)
{
+ struct listen_data listen_data;
struct sigaction action;
- pid_t child;
int sockopt;
int listen_sock;
int accept_sock;
fd_set read_fds;
socklen_t addr_len;
struct sockaddr_in client_addr;
+ pid_t child;
- /*
- * fork:
- * the parent listens for commands,
- * the child returns and downloads the carousel
- */
-
/* don't let our children become zombies */
action.sa_handler = dead_child;
sigemptyset(&action.sa_mask);
@@ -131,16 +128,11 @@
if(sigaction(SIGCHLD, &action, NULL) < 0)
fatal("signal: SIGCHLD: %s", strerror(errno));
- /* if we can't fork it's probably best to kill ourselves*/
- if((child = fork()) < 0)
- fatal("fork: %s", strerror(errno));
- /* child returns */
- else if(child == 0)
- return;
- /* parent continues */
+ /* fork off a child to download the carousel */
+ listen_data.carousel = start_downloader(adapter, timeout, service_id, carousel_id);
/* listen on the given ip:port */
- verbose("Listening on %s:%u", inet_ntoa(listen_data->addr.sin_addr), ntohs(listen_data->addr.sin_port));
+ verbose("Listening on %s:%u", inet_ntoa(listen_addr->sin_addr), ntohs(listen_addr->sin_port));
if((listen_sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
fatal("socket: %s", strerror(errno));
@@ -150,7 +142,7 @@
if(setsockopt(listen_sock, SOL_SOCKET, SO_REUSEADDR, &sockopt, sizeof(sockopt)) < 0)
fatal("setsockopt: SO_REUSEADDR: %s", strerror(errno));
- if(bind(listen_sock, (struct sockaddr *) &listen_data->addr, sizeof(struct sockaddr_in)) < 0)
+ if(bind(listen_sock, (struct sockaddr *) listen_addr, sizeof(struct sockaddr_in)) < 0)
fatal("bind: %s", strerror(errno));
if(listen(listen_sock, BACKLOG) < 0)
@@ -188,7 +180,7 @@
{
/* child */
close(listen_sock);
- handle_connection(listen_data, accept_sock, &client_addr);
+ handle_connection(&listen_data, accept_sock, &client_addr);
close(accept_sock);
/* use _exit in child so stdio etc don't clean up twice */
_exit(EXIT_SUCCESS);
@@ -250,6 +242,37 @@
return;
}
+struct carousel *
+start_downloader(unsigned int adapter, unsigned int timeout, uint16_t service_id, int carousel_id)
+{
+ struct carousel *car;
+ pid_t child;
+
+ /* find the MHEG PIDs */
+ car = find_mheg(adapter, timeout, service_id, carousel_id);
+
+ verbose("Carousel ID=%u", car->carousel_id);
+ verbose("Boot PID=%u", car->boot_pid);
+ verbose("Video PID=%u", car->video_pid);
+ verbose("Audio PID=%u", car->audio_pid);
+
+ /*
+ * fork:
+ * the parent listens for commands,
+ * the child downloads the carousel
+ */
+
+ /* if we can't fork it's probably best to kill ourselves*/
+ if((child = fork()) < 0)
+ fatal("fork: %s", strerror(errno));
+ /* child downloads the carousel until killed by parent */
+ else if(child == 0)
+ load_carousel(car);
+ /* parent continues */
+
+ return car;
+}
+
static void
dead_child(int signo)
{
Modified: redbutton-download/trunk/listen.h
===================================================================
--- redbutton-download/trunk/listen.h 2007-01-11 11:10:32 UTC (rev 172)
+++ redbutton-download/trunk/listen.h 2007-01-11 16:34:52 UTC (rev 173)
@@ -11,12 +11,12 @@
struct listen_data
{
- struct sockaddr_in addr; /* ip:port to listen on */
struct carousel *carousel; /* carousel we are downloading */
};
int parse_addr(char *, struct in_addr *, in_port_t *);
-void start_listener(struct listen_data *);
+void start_listener(struct sockaddr_in *, unsigned int, unsigned int, uint16_t, int);
+struct carousel *start_downloader(unsigned int, unsigned int, uint16_t, int);
#endif
Modified: redbutton-download/trunk/rb-download.c
===================================================================
--- redbutton-download/trunk/rb-download.c 2007-01-11 11:10:32 UTC (rev 172)
+++ redbutton-download/trunk/rb-download.c 2007-01-11 16:34:52 UTC (rev 173)
@@ -1,5 +1,5 @@
/*
- * rb-download [-v] [-a <adapter>] [-b <base_dir>] [-t <timeout>] [-l[<listen-addr>]] [-c <carousel_id>] [<service_id>]
+ * rb-download [-v] [-a <adapter>] [-b <base_dir>] [-t <timeout>] [-l <listen_addr>] [-c <carousel_id>] [<service_id>]
*
* Download the DVB Object Carousel for the given channel onto the local hard disc
* files will be stored under the current dir if no -b option is given
@@ -15,13 +15,12 @@
* /dev/dvb/adapter0/dvr0
* use the -a option to change the adapter number (eg "-a 1" will use /dev/dvb/adapter1/demux0 etc)
*
- * if -l is given, rb-download listens on the network for commands from a remote rb-browser
+ * 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
- * listen-addr should be given in the form "host:port", where host defaults to 0.0.0.0 and port defaults to 10101
- * eg, to listen on a different port, do "-l8080"
- * to only listen on the loop back, do "-l127.0.0.1" or on a different port too, do "-l127.0.0.1:8080"
- * NOTE: because -l may or may not take an argument, you must not put a space between the -l and the value
- * (otherwise, "rb-download -l 1234", is ambiguous - listen on port 1234 or use service_id 1234?)
+ * the -l option changes the default IP and port
+ * listen_addr should be given in the form "host:port", where host defaults to 0.0.0.0 and port defaults to 10101
+ * eg, to listen on a different port, do "-l 8080"
+ * to only listen on the loop back, do "-l 127.0.0.1" or on a different port too, do "-l 127.0.0.1:8080"
*
* -v is verbose/debug mode, use more v's for more verbosity
*
@@ -35,7 +34,7 @@
*/
/*
- * Copyright (C) 2005, 2006, Simon Kilvington
+ * Copyright (C) 2005, 2006, 2007, Simon Kilvington
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -82,16 +81,21 @@
main(int argc, char *argv[])
{
char *prog_name = argv[0];
- unsigned int adapter = 0;
- unsigned int timeout = DEFAULT_TIMEOUT;
- bool listen = false;
- struct listen_data listen_data;
- int carousel_id = -1;
+ unsigned int adapter;
+ unsigned int timeout;
+ struct sockaddr_in listen_addr;
+ int carousel_id;
uint16_t service_id;
- struct carousel *car;
int arg;
- while((arg = getopt(argc, argv, "a:b:t:l::c:v")) != EOF)
+ /* default values */
+ adapter = 0;
+ timeout = DEFAULT_TIMEOUT;
+ listen_addr.sin_addr.s_addr = htonl(DEFAULT_LISTEN_ADDR);
+ listen_addr.sin_port = htons(DEFAULT_LISTEN_PORT);
+ carousel_id = -1; /* read it from the PMT */
+
+ while((arg = getopt(argc, argv, "a:b:t:l:c:v")) != EOF)
{
switch(arg)
{
@@ -109,12 +113,7 @@
break;
case 'l':
- listen = true;
- /* default values */
- listen_data.addr.sin_addr.s_addr = htonl(DEFAULT_LISTEN_ADDR);
- listen_data.addr.sin_port = htons(DEFAULT_LISTEN_PORT);
- /* optarg is NULL if no value is given, parse_addr can't fail with NULL */
- if(parse_addr(optarg, &listen_data.addr.sin_addr, &listen_data.addr.sin_port) < 0)
+ if(parse_addr(optarg, &listen_addr.sin_addr, &listen_addr.sin_port) < 0)
fatal("Unable to resolve host %s", optarg);
break;
@@ -139,17 +138,7 @@
else if(argc - optind == 1)
{
service_id = strtoul(argv[optind], NULL, 0);
- car = find_mheg(adapter, timeout, service_id, carousel_id);
- verbose("Carousel ID=%u", car->carousel_id);
- verbose("Boot PID=%u", car->boot_pid);
- verbose("Video PID=%u", car->video_pid);
- verbose("Audio PID=%u", car->audio_pid);
- if(listen)
- {
- listen_data.carousel = car;
- start_listener(&listen_data);
- }
- load_carousel(car);
+ start_listener(&listen_addr, adapter, timeout, service_id, carousel_id);
}
else
{
@@ -207,7 +196,7 @@
"[-a <adapter>] "
"[-b <base_dir>] "
"[-t <timeout>] "
- "[-l[<listen-addr>]] "
+ "[-l <listen_addr>] "
"[-c carousel_id] "
"[<service_id>]", prog_name);
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2007-01-11 11:10:34
|
Revision: 172
http://svn.sourceforge.net/redbutton/?rev=172&view=rev
Author: skilvington
Date: 2007-01-11 03:10:32 -0800 (Thu, 11 Jan 2007)
Log Message:
-----------
allow local backends to retune
Modified Paths:
--------------
redbutton-browser/trunk/MHEGBackend.c
redbutton-browser/trunk/utils.c
redbutton-browser/trunk/utils.h
Modified: redbutton-browser/trunk/MHEGBackend.c
===================================================================
--- redbutton-browser/trunk/MHEGBackend.c 2007-01-10 21:25:52 UTC (rev 171)
+++ redbutton-browser/trunk/MHEGBackend.c 2007-01-11 11:10:32 UTC (rev 172)
@@ -73,6 +73,7 @@
{
/* backend is on a different host, srg_loc is the remote host[:port] */
b->fns = &remote_backend_fns;
+ b->base_dir = NULL;
if(parse_addr(srg_loc, &b->addr.sin_addr, &b->addr.sin_port) < 0)
fatal("Unable to resolve host %s", srg_loc);
verbose("Remote backend at %s:%u", inet_ntoa(b->addr.sin_addr), ntohs(b->addr.sin_port));
@@ -81,7 +82,7 @@
{
/* backend and frontend on same host, srg_loc is the base directory */
b->fns = &local_backend_fns;
- b->base_dir = srg_loc;
+ b->base_dir = safe_strdup(srg_loc);
verbose("Local backend; carousel file root '%s'", srg_loc);
}
@@ -96,6 +97,8 @@
&& remote_command(b, true, "quit\n") != NULL)
fclose(b->be_sock);
+ safe_free(b->base_dir);
+
return;
}
@@ -358,9 +361,35 @@
void
local_retune(MHEGBackend *t, OctetString *service)
{
-/* TODO */
-fatal("TODO: Retune local backend to '%.*s' (service_id %u)", service->size, service->data, si_get_service_id(service));
+ unsigned int service_id;
+ char service_str[64];
+ char *slash;
+ int prefix_len;
+ /* extract the service_id */
+ service_id = si_get_service_id(service);
+ snprintf(service_str, sizeof(service_str), "%u", service_id);
+
+ /*
+ * base_dir is: [path/to/services/]<service_id>
+ * so we just need to replace the last filename component with the new service_id
+ */
+ slash = strrchr(t->base_dir, '/');
+ if(slash == NULL)
+ {
+ /* no preceeding path */
+ t->base_dir = safe_realloc(t->base_dir, strlen(service_str) + 1);
+ strcpy(t->base_dir, service_str);
+ }
+ else
+ {
+ prefix_len = (slash - t->base_dir) + 1;
+ t->base_dir = safe_realloc(t->base_dir, prefix_len + strlen(service_str) + 1);
+ strcpy(t->base_dir + prefix_len, service_str);
+ }
+
+ verbose("Retune: new service gateway is '%s'", t->base_dir);
+
return;
}
Modified: redbutton-browser/trunk/utils.c
===================================================================
--- redbutton-browser/trunk/utils.c 2007-01-10 21:25:52 UTC (rev 171)
+++ redbutton-browser/trunk/utils.c 2007-01-11 11:10:32 UTC (rev 172)
@@ -206,6 +206,24 @@
return;
}
+/*
+ * safe_strdup(NULL) == NULL
+ */
+
+char *
+safe_strdup(const char *src)
+{
+ char *dst;
+
+ if(src == NULL)
+ return NULL;
+
+ dst = (char *) safe_malloc(strlen(src) + 1);
+ strcpy(dst, src);
+
+ return dst;
+}
+
void
error(char *message, ...)
{
Modified: redbutton-browser/trunk/utils.h
===================================================================
--- redbutton-browser/trunk/utils.h 2007-01-10 21:25:52 UTC (rev 171)
+++ redbutton-browser/trunk/utils.h 2007-01-11 11:10:32 UTC (rev 172)
@@ -45,6 +45,8 @@
void *safe_realloc(void *, size_t);
void safe_free(void *);
+char *safe_strdup(const char *);
+
void error(char *, ...);
void fatal(char *, ...);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2007-01-10 21:25:55
|
Revision: 171
http://svn.sourceforge.net/redbutton/?rev=171&view=rev
Author: skilvington
Date: 2007-01-10 13:25:52 -0800 (Wed, 10 Jan 2007)
Log Message:
-----------
one step closer to being able to retune the backend
Modified Paths:
--------------
redbutton-browser/trunk/MHEGBackend.c
redbutton-browser/trunk/MHEGBackend.h
redbutton-browser/trunk/MHEGEngine.c
redbutton-browser/trunk/MHEGEngine.h
redbutton-browser/trunk/rb-browser.c
Modified: redbutton-browser/trunk/MHEGBackend.c
===================================================================
--- redbutton-browser/trunk/MHEGBackend.c 2007-01-08 16:57:43 UTC (rev 170)
+++ redbutton-browser/trunk/MHEGBackend.c 2007-01-10 21:25:52 UTC (rev 171)
@@ -11,6 +11,7 @@
#include <sys/socket.h>
#include "MHEGEngine.h"
+#include "si.h"
#include "utils.h"
/* local backend funcs */
@@ -18,6 +19,7 @@
bool local_loadFile(MHEGBackend *, OctetString *, OctetString *);
FILE *local_openFile(MHEGBackend *, OctetString *);
FILE *local_openStream(MHEGBackend *, bool, int *, int *, bool, int *, int *);
+void local_retune(MHEGBackend *, OctetString *);
static struct MHEGBackendFns local_backend_fns =
{
@@ -25,6 +27,7 @@
local_loadFile, /* loadFile */
local_openFile, /* openFile */
local_openStream, /* openStream */
+ local_retune, /* retune */
};
/* remote backend funcs */
@@ -32,6 +35,7 @@
bool remote_loadFile(MHEGBackend *, OctetString *, OctetString *);
FILE *remote_openFile(MHEGBackend *, OctetString *);
FILE *remote_openStream(MHEGBackend *, bool, int *, int *, bool, int *, int *);
+void remote_retune(MHEGBackend *, OctetString *);
static struct MHEGBackendFns remote_backend_fns =
{
@@ -39,6 +43,7 @@
remote_loadFile, /* loadFile */
remote_openFile, /* openFile */
remote_openStream, /* openStream */
+ remote_retune, /* retune */
};
/* internal functions */
@@ -346,6 +351,20 @@
}
/*
+ * retune the backend to the given service
+ * service should be in the form "dvb://<network_id>..<service_id>", eg "dvb://233a..4C80"
+ */
+
+void
+local_retune(MHEGBackend *t, OctetString *service)
+{
+/* TODO */
+fatal("TODO: Retune local backend to '%.*s' (service_id %u)", service->size, service->data, si_get_service_id(service));
+
+ return;
+}
+
+/*
* remote routines
*/
@@ -540,3 +559,17 @@
return sock;
}
+/*
+ * retune the backend to the given service
+ * service should be in the form "dvb://<network_id>..<service_id>", eg "dvb://233a..4C80"
+ */
+
+void
+remote_retune(MHEGBackend *t, OctetString *service)
+{
+/* TODO */
+fatal("TODO: Retune remote backend to '%.*s' (service_id %u)", service->size, service->data, si_get_service_id(service));
+
+ return;
+}
+
Modified: redbutton-browser/trunk/MHEGBackend.h
===================================================================
--- redbutton-browser/trunk/MHEGBackend.h 2007-01-08 16:57:43 UTC (rev 170)
+++ redbutton-browser/trunk/MHEGBackend.h 2007-01-10 21:25:52 UTC (rev 171)
@@ -28,6 +28,8 @@
FILE *(*openFile)(struct MHEGBackend *, OctetString *);
/* open an MPEG Transport Stream */
FILE *(*openStream)(struct MHEGBackend *, bool, int *, int *, bool, int *, int *);
+ /* tune to the given service */
+ void (*retune)(struct MHEGBackend *, OctetString *);
} *fns;
} MHEGBackend;
Modified: redbutton-browser/trunk/MHEGEngine.c
===================================================================
--- redbutton-browser/trunk/MHEGEngine.c 2007-01-08 16:57:43 UTC (rev 170)
+++ redbutton-browser/trunk/MHEGEngine.c 2007-01-10 21:25:52 UTC (rev 171)
@@ -183,85 +183,108 @@
}
int
-MHEGEngine_run(OctetString *derfile)
+MHEGEngine_run(void)
{
+ OctetString boot_obj;
ApplicationClass *app;
SceneClass *scene;
bool block;
+ unsigned int i;
+ bool found;
+ /* search order for the app to boot in the Service Gateway dir */
+ char *boot_order[] = { "~//a", "~//startup", NULL };
do
{
- verbose("Running '%.*s'", derfile->size, derfile->data);
- engine.quit_reason = QuitReason_DontQuit;
- /* load the app */
- if((app = MHEGApp_loadApplication(&engine.active_app, derfile)) == NULL)
- return EXIT_FAILURE;
- /* start it up */
- ApplicationClass_Preparation(app);
- ApplicationClass_Activation(app);
- /* main loop */
- while(engine.quit_reason == QuitReason_DontQuit)
+ /* search for the boot object */
+ found = false;
+ for(i=0; !found && boot_order[i] != NULL; i++)
{
- /* poll for files we are waiting for */
- MHEGEngine_pollMissingContent();
- /* process any async events */
- MHEGEngine_processMHEGEvents();
- /*
- * if we are polling for missing content,
- * or if we need to quit the current app
- * don't block waiting for the next GUI event
- */
- block = (engine.missing_content == NULL && engine.quit_reason == QuitReason_DontQuit);
- /* process any GUI events */
- if(MHEGDisplay_processEvents(&engine.display, block))
- engine.quit_reason = QuitReason_GUIQuit;
+ boot_obj.size = strlen(boot_order[i]);
+ boot_obj.data = boot_order[i];
+ found = MHEGEngine_checkContentRef(&boot_obj);
}
- /* do Destruction of Application and Scene */
- if((scene = MHEGEngine_getActiveScene()) != NULL)
+ if(!found)
{
- SceneClass_Deactivation(scene);
- SceneClass_Destruction(scene);
+ error("Unable to find boot object in service gateway");
+ return EXIT_FAILURE;
}
- ApplicationClass_Deactivation(app);
- ApplicationClass_Destruction(app);
- /* clean up */
- MHEGApp_fini(&engine.active_app);
- LIST_FREE(&engine.objects, RootClassPtr, safe_free);
- LIST_FREE(&engine.missing_content, MissingContent, free_MissingContentListItem);
- LIST_FREE(&engine.active_links, LinkClassPtr, safe_free);
- LIST_FREE(&engine.async_eventq, MHEGAsyncEvent, free_MHEGAsyncEventListItem);
- LIST_FREE(&engine.main_actionq, MHEGAction, free_MHEGActionListItem);
- LIST_FREE(&engine.temp_actionq, MHEGAction, free_MHEGActionListItem);
- /* do we need to run a new app */
- switch(engine.quit_reason)
+ do
{
- case QuitReason_Launch:
- verbose("Launch '%.*s'", engine.quit_data.size, engine.quit_data.data);
- derfile = &engine.quit_data;
- break;
-
- case QuitReason_Spawn:
+ /* boot it */
+ verbose("Booting '%.*s'", boot_obj.size, boot_obj.data);
+ engine.quit_reason = QuitReason_DontQuit;
+ /* load the app */
+ if((app = MHEGApp_loadApplication(&engine.active_app, &boot_obj)) == NULL)
+ return EXIT_FAILURE;
+ /* start it up */
+ ApplicationClass_Preparation(app);
+ ApplicationClass_Activation(app);
+ /* main loop */
+ while(engine.quit_reason == QuitReason_DontQuit)
+ {
+ /* poll for files we are waiting for */
+ MHEGEngine_pollMissingContent();
+ /* process any async events */
+ MHEGEngine_processMHEGEvents();
+ /*
+ * if we are polling for missing content,
+ * or if we need to quit the current app
+ * don't block waiting for the next GUI event
+ */
+ block = (engine.missing_content == NULL && engine.quit_reason == QuitReason_DontQuit);
+ /* process any GUI events */
+ if(MHEGDisplay_processEvents(&engine.display, block))
+ engine.quit_reason = QuitReason_GUIQuit;
+ }
+ /* do Destruction of Application and Scene */
+ if((scene = MHEGEngine_getActiveScene()) != NULL)
+ {
+ SceneClass_Deactivation(scene);
+ SceneClass_Destruction(scene);
+ }
+ ApplicationClass_Deactivation(app);
+ ApplicationClass_Destruction(app);
+ /* clean up */
+ MHEGApp_fini(&engine.active_app);
+ LIST_FREE(&engine.objects, RootClassPtr, safe_free);
+ LIST_FREE(&engine.missing_content, MissingContent, free_MissingContentListItem);
+ LIST_FREE(&engine.active_links, LinkClassPtr, safe_free);
+ LIST_FREE(&engine.async_eventq, MHEGAsyncEvent, free_MHEGAsyncEventListItem);
+ LIST_FREE(&engine.main_actionq, MHEGAction, free_MHEGActionListItem);
+ LIST_FREE(&engine.temp_actionq, MHEGAction, free_MHEGActionListItem);
+ /* do we need to run a new app */
+ switch(engine.quit_reason)
+ {
+ case QuitReason_Launch:
+ verbose("Launch '%.*s'", engine.quit_data.size, engine.quit_data.data);
+ boot_obj.size = engine.quit_data.size;
+ boot_obj.data = engine.quit_data.data;
+ break;
+
+ case QuitReason_Spawn:
+ verbose("Spawn '%.*s'", engine.quit_data.size, engine.quit_data.data);
/* TODO */
/* need to run on_restart and on_spawn_close_down Actions at some point */
printf("TODO: Spawn '%.*s'; doing Launch instead\n", engine.quit_data.size, engine.quit_data.data);
- derfile = &engine.quit_data;
- break;
-
- case QuitReason_Retune:
-/* TODO */
-fatal("TODO: Retune to '%.*s' (service_id %u)", engine.quit_data.size, engine.quit_data.data, si_get_service_id(&engine.quit_data));
- break;
-
- default:
- /* nothing to do */
- break;
+ boot_obj.size = engine.quit_data.size;
+ boot_obj.data = engine.quit_data.data;
+ break;
+
+ case QuitReason_Retune:
+ verbose("Retune to '%.*s'", engine.quit_data.size, engine.quit_data.data);
+ MHEGEngine_retune(&engine.quit_data);
+ break;
+
+ default:
+ /* nothing to do */
+ break;
+ }
}
+ while(engine.quit_reason == QuitReason_Launch || engine.quit_reason == QuitReason_Spawn);
}
- while(engine.quit_reason == QuitReason_Launch || engine.quit_reason == QuitReason_Spawn);
+ while(engine.quit_reason == QuitReason_Retune);
- /* clean up */
- free_OctetString(&engine.quit_data);
-
return EXIT_SUCCESS;
}
@@ -276,6 +299,8 @@
MHEGBackend_fini(&engine.backend);
+ free_OctetString(&engine.quit_data);
+
return;
}
@@ -1384,6 +1409,17 @@
}
/*
+ * retune the backend to the given service
+ * service should be in the form "dvb://<network_id>..<service_id>", eg "dvb://233a..4C80"
+ */
+
+void
+MHEGEngine_retune(OctetString *service)
+{
+ return (*(engine.backend.fns->retune))(&engine.backend, service);
+}
+
+/*
* returns the absolute group ID, ie it always starts with "~//"
* returns a ptr to static string that will be overwritten by the next call to this routine
* section 8.3.2 of the UK MHEG Profile says the filename prefixes are:
Modified: redbutton-browser/trunk/MHEGEngine.h
===================================================================
--- redbutton-browser/trunk/MHEGEngine.h 2007-01-08 16:57:43 UTC (rev 170)
+++ redbutton-browser/trunk/MHEGEngine.h 2007-01-10 21:25:52 UTC (rev 171)
@@ -184,8 +184,8 @@
/* prototypes */
void MHEGEngine_init(MHEGEngineOptions *);
-int MHEGEngine_run(OctetString *);
-void MHEGEngine_fini();
+int MHEGEngine_run(void);
+void MHEGEngine_fini(void);
MHEGDisplay *MHEGEngine_getDisplay(void);
MHEGVideoOutputMethod *MHEGEngine_getVideoOutputMethod(void);
@@ -237,6 +237,7 @@
bool MHEGEngine_loadFile(OctetString *, OctetString *);
FILE *MHEGEngine_openFile(OctetString *);
FILE *MHEGEngine_openStream(bool, int *, int *, bool, int *, int *);
+void MHEGEngine_retune(OctetString *);
char *MHEGEngine_absoluteFilename(OctetString *);
Modified: redbutton-browser/trunk/rb-browser.c
===================================================================
--- redbutton-browser/trunk/rb-browser.c 2007-01-08 16:57:43 UTC (rev 170)
+++ redbutton-browser/trunk/rb-browser.c 2007-01-10 21:25:52 UTC (rev 171)
@@ -33,11 +33,6 @@
int arg;
size_t last;
int rc;
- int i;
- bool found;
- OctetString boot_obj;
- /* search order for the app to boot in the Service Gateway dir */
- char *boot_order[] = { "~//a", "~//startup", NULL };
/* we assume &struct == &struct.first_item, not sure if C guarantees it */
ApplicationClass app;
@@ -106,27 +101,8 @@
MHEGEngine_init(&opts);
- /* search for the boot object */
- found = false;
- for(i=0; !found && boot_order[i] != NULL; i++)
- {
- boot_obj.size = strlen(boot_order[i]);
- boot_obj.data = boot_order[i];
- found = MHEGEngine_checkContentRef(&boot_obj);
- }
+ rc = MHEGEngine_run();
- if(found)
- {
- verbose("Booting '%.*s'", boot_obj.size, boot_obj.data);
- rc = MHEGEngine_run(&boot_obj);
- }
- else
- {
- error("Unable to find boot object in service gateway '%s'", opts.srg_loc);
- rc = EXIT_FAILURE;
- }
-
- /* clean up */
MHEGEngine_fini();
return rc;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2007-01-08 16:57:45
|
Revision: 170
http://svn.sourceforge.net/redbutton/?rev=170&view=rev
Author: skilvington
Date: 2007-01-08 08:57:43 -0800 (Mon, 08 Jan 2007)
Log Message:
-----------
Tagged release 20070108
Added Paths:
-----------
redbutton-download/tags/redbutton-download-20070108/
Copied: redbutton-download/tags/redbutton-download-20070108 (from rev 169, redbutton-download/trunk)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2007-01-08 16:56:32
|
Revision: 169
http://svn.sourceforge.net/redbutton/?rev=169&view=rev
Author: skilvington
Date: 2007-01-08 08:56:26 -0800 (Mon, 08 Jan 2007)
Log Message:
-----------
Tagged release 20070108
Added Paths:
-----------
redbutton-browser/tags/redbutton-browser-20070108/
Copied: redbutton-browser/tags/redbutton-browser-20070108 (from rev 168, redbutton-browser/trunk)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2007-01-08 16:51:03
|
Revision: 168
http://svn.sourceforge.net/redbutton/?rev=168&view=rev
Author: skilvington
Date: 2007-01-08 08:51:00 -0800 (Mon, 08 Jan 2007)
Log Message:
-----------
less TODO
Modified Paths:
--------------
redbutton-download/trunk/TODO
Modified: redbutton-download/trunk/TODO
===================================================================
--- redbutton-download/trunk/TODO 2007-01-08 16:36:27 UTC (rev 167)
+++ redbutton-download/trunk/TODO 2007-01-08 16:51:00 UTC (rev 168)
@@ -1,17 +1,8 @@
-use PMT data_broadcast_id_descriptor (tag=0x66) to find boot carousel
-0x66 - tag
-uint8 N - length
-0x0106 - TDN data_broadcast_id
-0x0101 - UK Launch Profile application_type_code
-uint8 P - boot_priority_hint (0=highest)
-(see UK MHEG Profile p161)
-
got an "Out of memory" error when doing avstream and video changed size
(start of C4 news)
can't see how avstream can cause an out of memory error
Sky Teletext - can't find PIDs for tags 1 and 2
-BBC News Multiscreen - can't find default a/v PIDs
look into new splice() and tee() syscalls in 2.6.17 kernel for avstream
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2007-01-08 16:36:35
|
Revision: 167
http://svn.sourceforge.net/redbutton/?rev=167&view=rev
Author: skilvington
Date: 2007-01-08 08:36:27 -0800 (Mon, 08 Jan 2007)
Log Message:
-----------
in verbose mode, print the values of variables in Read/StorePersistent (I know why BBC News Multiscreen doesn't work\!)
Modified Paths:
--------------
redbutton-browser/trunk/ApplicationClass.c
redbutton-browser/trunk/VariableClass.c
redbutton-browser/trunk/VariableClass.h
Modified: redbutton-browser/trunk/ApplicationClass.c
===================================================================
--- redbutton-browser/trunk/ApplicationClass.c 2007-01-07 12:19:37 UTC (rev 166)
+++ redbutton-browser/trunk/ApplicationClass.c 2007-01-08 16:36:27 UTC (rev 167)
@@ -258,7 +258,7 @@
/* free any existing contents */
LIST_FREE_ITEMS(&p->data, OriginalValue, free_OriginalValue, safe_free);
- verbose("StorePersistent: '%.*s'", filename->size, filename->data);
+ verbose("StorePersistent: filename '%.*s'", filename->size, filename->data);
/* add the new values */
ref = params->in_variables;
@@ -268,6 +268,7 @@
{
if(var->rootClass.inst.rtti == RTTI_VariableClass)
{
+ verbose("StorePersistent: variable '%s'", VariableClass_stringValue(var));
val = safe_malloc(sizeof(LIST_TYPE(OriginalValue)));
OriginalValue_dup(&val->item, &var->inst.Value);
LIST_APPEND(&p->data, val);
@@ -315,7 +316,7 @@
/* find the file */
if((p = MHEGEngine_findPersistentData(filename, false)) != NULL)
{
- verbose("ReadPersistent: '%.*s'", filename->size, filename->data);
+ verbose("ReadPersistent: filename '%.*s'", filename->size, filename->data);
/* read the values into the variables */
ref = params->out_variables;
val = p->data;
@@ -328,6 +329,7 @@
{
/* free any existing data */
OriginalValue_copy(&var->inst.Value, &val->item);
+ verbose("ReadPersistent: variable '%s'", VariableClass_stringValue(var));
}
else
{
Modified: redbutton-browser/trunk/VariableClass.c
===================================================================
--- redbutton-browser/trunk/VariableClass.c 2007-01-07 12:19:37 UTC (rev 166)
+++ redbutton-browser/trunk/VariableClass.c 2007-01-08 16:36:27 UTC (rev 167)
@@ -234,3 +234,50 @@
return v->inst.Value.choice;
}
+/*
+ * returns a static string that will be overwritten by the next call to this routine
+ */
+
+static char *_value = NULL;
+
+char *
+VariableClass_stringValue(VariableClass *v)
+{
+ OctetString *oct;
+
+ switch(v->inst.Value.choice)
+ {
+ case OriginalValue_boolean:
+ _value = safe_realloc(_value, 16);
+ snprintf(_value, 16, "Boolean %s", v->inst.Value.u.boolean ? "true" : "false");
+ return _value;
+
+ case OriginalValue_integer:
+ _value = safe_realloc(_value, 64);
+ snprintf(_value, 64, "Integer %d", v->inst.Value.u.integer);
+ return _value;
+
+ case OriginalValue_octetstring:
+ oct = &v->inst.Value.u.octetstring;
+ _value = safe_realloc(_value, oct->size + 128);
+ snprintf(_value, oct->size + 128, "OctetString %u %.*s", oct->size, oct->size, oct->data);
+ return _value;
+
+ case OriginalValue_object_reference:
+ _value = safe_realloc(_value, PATH_MAX + 32);
+ snprintf(_value, PATH_MAX + 32, "ObjectReference %s", ObjectReference_name(&v->inst.Value.u.object_reference));
+ return _value;
+
+ case OriginalValue_content_reference:
+ oct = &v->inst.Value.u.content_reference;
+ _value = safe_realloc(_value, oct->size + 128);
+ snprintf(_value, oct->size + 128, "ContentReference %u %.*s", oct->size, oct->size, oct->data);
+ return _value;
+
+ default:
+ error("Unknown VariableClass %s; type: %d", ExternalReference_name(&v->rootClass.inst.ref), v->inst.Value.choice);
+ _value = safe_realloc(_value, 32);
+ snprintf(_value, 32, "Invalid VariableClass");
+ return _value;
+ }
+}
Modified: redbutton-browser/trunk/VariableClass.h
===================================================================
--- redbutton-browser/trunk/VariableClass.h 2007-01-07 12:19:37 UTC (rev 166)
+++ redbutton-browser/trunk/VariableClass.h 2007-01-08 16:36:27 UTC (rev 167)
@@ -19,5 +19,7 @@
unsigned int VariableClass_type(VariableClass *);
+char *VariableClass_stringValue(VariableClass *);
+
#endif /* __VARIABLECLASS_H__ */
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2007-01-07 12:19:40
|
Revision: 166
http://svn.sourceforge.net/redbutton/?rev=166&view=rev
Author: skilvington
Date: 2007-01-07 04:19:37 -0800 (Sun, 07 Jan 2007)
Log Message:
-----------
fail searches outside the range of the string
Modified Paths:
--------------
redbutton-browser/trunk/ResidentProgramClass.c
Modified: redbutton-browser/trunk/ResidentProgramClass.c
===================================================================
--- redbutton-browser/trunk/ResidentProgramClass.c 2007-01-07 11:16:12 UTC (rev 165)
+++ redbutton-browser/trunk/ResidentProgramClass.c 2007-01-07 12:19:37 UTC (rev 166)
@@ -797,8 +797,8 @@
search_substring(OctetString *string, int start, OctetString *search)
{
/* range check */
- start = MAX(start, 1);
- start = MIN(start, string->size);
+ if(start < 1 || start > string->size)
+ return -1;
/* simple cases */
if(string->size == 0)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2007-01-07 11:16:20
|
Revision: 165
http://svn.sourceforge.net/redbutton/?rev=165&view=rev
Author: skilvington
Date: 2007-01-07 03:16:12 -0800 (Sun, 07 Jan 2007)
Log Message:
-----------
use data_broadcast_id_descriptor to find boot PID
Modified Paths:
--------------
redbutton-download/trunk/findmheg.c
redbutton-download/trunk/rb-download.c
Modified: redbutton-download/trunk/findmheg.c
===================================================================
--- redbutton-download/trunk/findmheg.c 2006-12-30 19:43:31 UTC (rev 164)
+++ redbutton-download/trunk/findmheg.c 2007-01-07 11:16:12 UTC (rev 165)
@@ -44,9 +44,10 @@
#define STREAM_TYPE_ISO13818_6_B 0x0b
/* descriptors we want */
-#define TAG_LANGUAGE_DESCRIPTOR 0x0a
-#define TAG_CAROUSEL_ID_DESCRIPTOR 0x13
-#define TAG_STREAM_ID_DESCRIPTOR 0x52
+#define TAG_LANGUAGE_DESCRIPTOR 0x0a
+#define TAG_CAROUSEL_ID_DESCRIPTOR 0x13
+#define TAG_STREAM_ID_DESCRIPTOR 0x52
+#define TAG_DATA_BROADCAST_ID_DESCRIPTOR 0x66
/* bits of the descriptors we care about */
struct carousel_id_descriptor
@@ -65,6 +66,17 @@
uint8_t audio_type;
} __attribute__((__packed__));
+struct data_broadcast_id_descriptor
+{
+ uint16_t data_broadcast_id;
+ uint16_t application_type_code;
+ uint8_t boot_priority_hint;
+} __attribute__((__packed__));
+
+/* data_broadcast_id_descriptor values we want */
+#define DATA_BROADCAST_ID 0x0106
+#define APPLICATION_TYPE_CODE 0x0101
+
bool
is_audio_stream(uint8_t stream_type)
{
@@ -101,6 +113,8 @@
uint8_t desc_tag;
uint8_t desc_length;
uint16_t component_tag;
+ int desc_boot_pid;
+ int desc_carousel_id;
/* carousel data we know so far */
snprintf(_car.demux_device, sizeof(_car.demux_device), DEMUX_DEVICE, adapter);
@@ -110,6 +124,7 @@
/* unknown */
_car.carousel_id = 0;
+ _car.boot_pid = 0;
_car.audio_pid = 0;
_car.audio_type = 0;
_car.video_pid = 0;
@@ -179,6 +194,9 @@
_car.video_pid = elementary_pid;
_car.video_type = stream_type;
}
+ /* it's not the boot PID yet */
+ desc_boot_pid = -1;
+ desc_carousel_id = -1;
/* read the descriptors */
info_length = ((pmt[offset] & 0x0f) << 8) + pmt[offset+1];
offset += 2;
@@ -188,17 +206,35 @@
desc_length = pmt[offset+1];
offset += 2;
info_length -= 2;
- if(desc_tag == TAG_CAROUSEL_ID_DESCRIPTOR)
+ /* ignore boot PID if we explicitly chose a carousel ID */
+ if(desc_tag == TAG_DATA_BROADCAST_ID_DESCRIPTOR && carousel_id == -1)
{
+ struct data_broadcast_id_descriptor *desc;
+ desc = (struct data_broadcast_id_descriptor *) &pmt[offset];
+ if(ntohs(desc->data_broadcast_id) == DATA_BROADCAST_ID
+ && ntohs(desc->application_type_code) == APPLICATION_TYPE_CODE)
+ {
+ desc_boot_pid = elementary_pid;
+ vverbose("PID=%u boot_priority_hint=%u", elementary_pid, desc->boot_priority_hint);
+ }
+ else
+ {
+ vverbose("PID=%u data_broadcast_id=0x%x", elementary_pid, ntohs(desc->data_broadcast_id));
+ vhexdump(&pmt[offset], desc_length);
+ }
+ }
+ else if(desc_tag == TAG_CAROUSEL_ID_DESCRIPTOR)
+ {
struct carousel_id_descriptor *desc;
desc = (struct carousel_id_descriptor *) &pmt[offset];
if(carousel_id == -1 || carousel_id == (ntohl(desc->carousel_id)))
{
- _car.carousel_id = ntohl(desc->carousel_id);
- _car.boot_pid = elementary_pid;
- add_dsmcc_pid(&_car, elementary_pid);
- vverbose("PID=%u carousel_id=%u", elementary_pid, _car.carousel_id);
+ /* if we chose this carousel, set the boot PID */
+ if(carousel_id != -1)
+ desc_boot_pid = elementary_pid;
+ desc_carousel_id = ntohl(desc->carousel_id);
}
+ vverbose("PID=%u carousel_id=%u", elementary_pid, ntohl(desc->carousel_id));
}
else if(desc_tag == TAG_STREAM_ID_DESCRIPTOR)
{
@@ -227,6 +263,14 @@
offset += desc_length;
info_length -= desc_length;
}
+ /* is it the boot PID */
+ if(desc_boot_pid != -1)
+ {
+ vverbose("Set boot_pid=%u carousel_id=%u", desc_boot_pid, desc_carousel_id);
+ _car.carousel_id = desc_carousel_id;
+ _car.boot_pid = desc_boot_pid;
+ add_dsmcc_pid(&_car, desc_boot_pid);
+ }
}
/* did we find a DSM-CC stream */
Modified: redbutton-download/trunk/rb-download.c
===================================================================
--- redbutton-download/trunk/rb-download.c 2006-12-30 19:43:31 UTC (rev 164)
+++ redbutton-download/trunk/rb-download.c 2007-01-07 11:16:12 UTC (rev 165)
@@ -141,6 +141,7 @@
service_id = strtoul(argv[optind], NULL, 0);
car = find_mheg(adapter, timeout, service_id, carousel_id);
verbose("Carousel ID=%u", car->carousel_id);
+ verbose("Boot PID=%u", car->boot_pid);
verbose("Video PID=%u", car->video_pid);
verbose("Audio PID=%u", car->audio_pid);
if(listen)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2006-12-30 19:43:37
|
Revision: 164
http://svn.sourceforge.net/redbutton/?rev=164&view=rev
Author: skilvington
Date: 2006-12-30 11:43:31 -0800 (Sat, 30 Dec 2006)
Log Message:
-----------
make sure we download the DSI from the boot PID
Modified Paths:
--------------
redbutton-download/trunk/carousel.c
redbutton-download/trunk/findmheg.c
redbutton-download/trunk/module.h
Modified: redbutton-download/trunk/carousel.c
===================================================================
--- redbutton-download/trunk/carousel.c 2006-12-22 15:08:40 UTC (rev 163)
+++ redbutton-download/trunk/carousel.c 2006-12-30 19:43:31 UTC (rev 164)
@@ -102,17 +102,12 @@
verbose("DownloadServerInitiate");
- /*
- * BBC1 (for example) just broadcasts a DSI
- * the DSI points to a carousel on the BBCi elementary_pid
- * so, to access the carousel for BBC1 we have to read from the BBCi PID
- * but, when we read the BBCi PID we will download the BBCi DSI
- * we don't want the BBCi DSI to overwrite our original BBC1 DSI
- * so only download the first DSI we find (ie before we read from to BBCi)
- */
- if(car->got_dsi)
+ /* only download the DSI from the boot PID */
+ if(car->current_pid != car->boot_pid
+ || car->got_dsi)
return;
+ /* TODO: check for updated version */
car->got_dsi = true;
elementary_pid = process_biop_service_gateway_info(car->service_id, &car->assoc, DSI_privateDataByte(dsi), ntohs(dsi->privateDataLength));
Modified: redbutton-download/trunk/findmheg.c
===================================================================
--- redbutton-download/trunk/findmheg.c 2006-12-22 15:08:40 UTC (rev 163)
+++ redbutton-download/trunk/findmheg.c 2006-12-30 19:43:31 UTC (rev 164)
@@ -195,6 +195,7 @@
if(carousel_id == -1 || carousel_id == (ntohl(desc->carousel_id)))
{
_car.carousel_id = ntohl(desc->carousel_id);
+ _car.boot_pid = elementary_pid;
add_dsmcc_pid(&_car, elementary_pid);
vverbose("PID=%u carousel_id=%u", elementary_pid, _car.carousel_id);
}
Modified: redbutton-download/trunk/module.h
===================================================================
--- redbutton-download/trunk/module.h 2006-12-22 15:08:40 UTC (rev 163)
+++ redbutton-download/trunk/module.h 2006-12-30 19:43:31 UTC (rev 164)
@@ -60,6 +60,7 @@
unsigned int timeout; /* timeout for the DVB devices */
uint16_t service_id;
uint32_t carousel_id;
+ 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 */
uint16_t video_pid; /* PID of default video stream for this service_id */
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2006-12-22 15:08:42
|
Revision: 163
http://svn.sourceforge.net/redbutton/?rev=163&view=rev
Author: skilvington
Date: 2006-12-22 07:08:40 -0800 (Fri, 22 Dec 2006)
Log Message:
-----------
don't free app events and actions on TransitionTo
Modified Paths:
--------------
redbutton-browser/trunk/MHEGEngine.c
Modified: redbutton-browser/trunk/MHEGEngine.c
===================================================================
--- redbutton-browser/trunk/MHEGEngine.c 2006-12-18 16:23:09 UTC (rev 162)
+++ redbutton-browser/trunk/MHEGEngine.c 2006-12-22 15:08:40 UTC (rev 163)
@@ -304,6 +304,9 @@
OctetString scene_id;
SceneClass *current_scene;
ApplicationClass *current_app;
+ OctetString *app_gid;
+ LIST_TYPE(MHEGAsyncEvent) *ev, *next_ev;
+ LIST_TYPE(MHEGAction) *act, *next_act;
LIST_TYPE(GroupItem) *gi;
LIST_TYPE(GroupItem) *gi_tail;
@@ -369,10 +372,48 @@
SceneClass_Deactivation(current_scene);
SceneClass_Destruction(current_scene);
}
- /* now the old scene is destroyed, empty the Async event queue and any pending actions */
- LIST_FREE(&engine.async_eventq, MHEGAsyncEvent, free_MHEGAsyncEventListItem);
- LIST_FREE(&engine.main_actionq, MHEGAction, free_MHEGActionListItem);
- LIST_FREE(&engine.temp_actionq, MHEGAction, free_MHEGActionListItem);
+ /*
+ * now the old scene is destroyed,
+ * remove its events from the Async event queue and its pending actions
+ * keep events and actions associated with the app
+ */
+ app_gid = ¤t_app->rootClass.inst.ref.group_identifier;
+ /* async event queue */
+ ev = engine.async_eventq;
+ while(ev)
+ {
+ next_ev = ev->next;
+ if(OctetString_cmp(&ev->item.src.group_identifier, app_gid) != 0)
+ {
+ LIST_REMOVE(&engine.async_eventq, ev);
+ free_MHEGAsyncEventListItem(ev);
+ }
+ ev = next_ev;
+ }
+ /* main action queue */
+ act = engine.main_actionq;
+ while(act)
+ {
+ next_act = act->next;
+ if(OctetString_cmp(act->item.group_id, app_gid) != 0)
+ {
+ LIST_REMOVE(&engine.main_actionq, act);
+ free_MHEGActionListItem(act);
+ }
+ act = next_act;
+ }
+ /* temp action queue */
+ act = engine.temp_actionq;
+ while(act)
+ {
+ next_act = act->next;
+ if(OctetString_cmp(act->item.group_id, app_gid) != 0)
+ {
+ LIST_REMOVE(&engine.temp_actionq, act);
+ free_MHEGActionListItem(act);
+ }
+ act = next_act;
+ }
/* load the new scene (also free's the old one if we have one) */
if((current_scene = MHEGApp_loadScene(&engine.active_app, &scene_id)) != NULL)
{
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2006-12-18 16:23:16
|
Revision: 162
http://svn.sourceforge.net/redbutton/?rev=162&view=rev
Author: skilvington
Date: 2006-12-18 08:23:09 -0800 (Mon, 18 Dec 2006)
Log Message:
-----------
how we would do CC checking
Modified Paths:
--------------
redbutton-browser/trunk/mpegts.c
Modified: redbutton-browser/trunk/mpegts.c
===================================================================
--- redbutton-browser/trunk/mpegts.c 2006-12-18 16:09:23 UTC (rev 161)
+++ redbutton-browser/trunk/mpegts.c 2006-12-18 16:23:09 UTC (rev 162)
@@ -50,6 +50,7 @@
int stop_parse; /* stop parsing loop */
PESContext *pids[NB_PID_MAX]; /* PIDs we are demuxing */
int is_start; /* is the current packet the first of a frame */
+ int last_cc; /* last Continuity Check value we saw (<0 => none seen yet) */
};
/* TS stream handling */
@@ -104,6 +105,9 @@
ctx->is_start = 0;
+ /* last continuity check value (-1 => CC always passes) */
+ ctx->last_cc = -1;
+
return ctx;
}
@@ -266,6 +270,7 @@
handle_packet(MpegTSContext *ctx, const uint8_t *packet)
{
PESContext *pes;
+ int cc, cc_ok;
int pid, afc;
const uint8_t *p, *p_end;
@@ -276,11 +281,14 @@
ctx->is_start = packet[1] & 0x40;
+ /* continuity check */
+ cc = (packet[3] & 0xf);
+ cc_ok = (ctx->last_cc < 0) || (((ctx->last_cc + 1) & 0x0f) == cc);
+ ctx->last_cc = cc;
#if 0
- /* continuity check (currently not used) */
- cc = (packet[3] & 0xf);
- cc_ok = (tss->last_cc < 0) || ((((tss->last_cc + 1) & 0x0f) == cc));
- tss->last_cc = cc;
+ /* skip until we find the next start packet */
+ if(!cc_ok && !ctx->is_start)
+ pes->state = MPEGTS_SKIP;
#endif
/* skip adaptation field */
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2006-12-18 16:09:26
|
Revision: 161
http://svn.sourceforge.net/redbutton/?rev=161&view=rev
Author: skilvington
Date: 2006-12-18 08:09:23 -0800 (Mon, 18 Dec 2006)
Log Message:
-----------
allow reading less than TS_PACKET_SIZE bytes in one go
Modified Paths:
--------------
redbutton-browser/trunk/mpegts.c
Modified: redbutton-browser/trunk/mpegts.c
===================================================================
--- redbutton-browser/trunk/mpegts.c 2006-12-15 17:11:53 UTC (rev 160)
+++ redbutton-browser/trunk/mpegts.c 2006-12-18 16:09:23 UTC (rev 161)
@@ -236,19 +236,21 @@
/* find the next sync byte */
resync = 0;
nread = 0;
+ *buf = 0;
do
{
/* read the whole of the next packet */
while(nread != TS_PACKET_SIZE && !feof(ts))
nread += fread(buf + nread, 1, TS_PACKET_SIZE - nread, ts);
- if(*buf != TS_SYNC_BYTE && !feof(ts))
+ if(nread > 0 && *buf != TS_SYNC_BYTE && !feof(ts))
{
resync ++;
- memmove(buf, buf + 1, TS_PACKET_SIZE - 1);
- nread = TS_PACKET_SIZE - 1;
+ memmove(buf, buf + 1, nread - 1);
+ buf[nread - 1] = 0;
+ nread --;
}
}
- while(*buf != TS_SYNC_BYTE && !feof(ts));
+ while(nread < TS_PACKET_SIZE && *buf != TS_SYNC_BYTE && !feof(ts));
if(feof(ts))
return -1;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2006-12-15 17:11:56
|
Revision: 160
http://svn.sourceforge.net/redbutton/?rev=160&view=rev
Author: skilvington
Date: 2006-12-15 09:11:53 -0800 (Fri, 15 Dec 2006)
Log Message:
-----------
find out where we are supposed to get audio and video streams from
Modified Paths:
--------------
redbutton-browser/trunk/ContentBody.c
redbutton-browser/trunk/ContentBody.h
redbutton-browser/trunk/StreamClass.c
Modified: redbutton-browser/trunk/ContentBody.c
===================================================================
--- redbutton-browser/trunk/ContentBody.c 2006-12-14 14:09:32 UTC (rev 159)
+++ redbutton-browser/trunk/ContentBody.c 2006-12-15 17:11:53 UTC (rev 160)
@@ -48,3 +48,30 @@
return rc;
}
+/*
+ * returns a ptr to the Referenced Content OctetString
+ * retuns NULL if the content is included
+ */
+
+OctetString *
+ContentBody_getReference(ContentBody *c)
+{
+ OctetString *rc = NULL;
+
+ switch(c->choice)
+ {
+ case ContentBody_included_content:
+ break;
+
+ case ContentBody_referenced_content:
+ rc = &c->u.referenced_content.content_reference;
+ break;
+
+ default:
+ error("Unknown ContentBody type: %d", c->choice);
+ break;
+ }
+
+ return rc;
+}
+
Modified: redbutton-browser/trunk/ContentBody.h
===================================================================
--- redbutton-browser/trunk/ContentBody.h 2006-12-14 14:09:32 UTC (rev 159)
+++ redbutton-browser/trunk/ContentBody.h 2006-12-15 17:11:53 UTC (rev 160)
@@ -11,4 +11,6 @@
bool ContentBody_getContent(ContentBody *, RootClass *, OctetString *);
+OctetString *ContentBody_getReference(ContentBody *);
+
#endif /* __CONTENTBODY_H__ */
Modified: redbutton-browser/trunk/StreamClass.c
===================================================================
--- redbutton-browser/trunk/StreamClass.c 2006-12-14 14:09:32 UTC (rev 159)
+++ redbutton-browser/trunk/StreamClass.c 2006-12-15 17:11:53 UTC (rev 160)
@@ -6,6 +6,7 @@
#include "ISO13522-MHEG-5.h"
#include "StreamComponent.h"
#include "ExternalReference.h"
+#include "ContentBody.h"
#include "utils.h"
void
@@ -76,6 +77,7 @@
{
LIST_TYPE(StreamComponent) *comp;
RootClass *r;
+ OctetString *service;
verbose("StreamClass: %s; Activation", ExternalReference_name(&t->rootClass.inst.ref));
@@ -91,6 +93,14 @@
StreamClass_Preparation(t);
}
+ /* assume default is "rec://svc/cur", ie current channel */
+ if(t->have_original_content
+ && (service = ContentBody_getReference(&t->original_content)) != NULL
+ && OctetString_strcmp(service, "rec://svc/cur") != 0)
+ {
+printf("TODO: StreamClass: service='%.*s'\n", service->size, service->data);
+ }
+
/* start playing all active StreamComponents */
comp = t->multiplex;
while(comp)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2006-12-14 14:09:33
|
Revision: 159
http://svn.sourceforge.net/redbutton/?rev=159&view=rev
Author: skilvington
Date: 2006-12-14 06:09:32 -0800 (Thu, 14 Dec 2006)
Log Message:
-----------
print tags in decimal rather than hex in error messages
Modified Paths:
--------------
redbutton-download/trunk/assoc.c
Modified: redbutton-download/trunk/assoc.c
===================================================================
--- redbutton-download/trunk/assoc.c 2006-12-14 13:44:43 UTC (rev 158)
+++ redbutton-download/trunk/assoc.c 2006-12-14 14:09:32 UTC (rev 159)
@@ -67,7 +67,7 @@
return a->pids[i];
}
- error("Unknown PID for association tag 0x%x", stream_id);
+ error("Unknown PID for association tag %u", stream_id);
return 0;
}
@@ -83,7 +83,7 @@
return a->types[i];
}
- error("Unknown stream type for association tag 0x%x", stream_id);
+ error("Unknown stream type for association tag %u", stream_id);
return 0;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2006-12-14 13:44:44
|
Revision: 158
http://svn.sourceforge.net/redbutton/?rev=158&view=rev
Author: skilvington
Date: 2006-12-14 05:44:43 -0800 (Thu, 14 Dec 2006)
Log Message:
-----------
output PIDs in decimal rather than hex in verbose mode
Modified Paths:
--------------
redbutton-download/trunk/findmheg.c
Modified: redbutton-download/trunk/findmheg.c
===================================================================
--- redbutton-download/trunk/findmheg.c 2006-12-14 13:39:40 UTC (rev 157)
+++ redbutton-download/trunk/findmheg.c 2006-12-14 13:44:43 UTC (rev 158)
@@ -149,9 +149,9 @@
}
if(!found)
- fatal("Unable to find programme_map_PID for service_id %u", service_id);
+ fatal("Unable to find PMT PID for service_id %u", service_id);
- vverbose("programme_map_PID: 0x%x", map_pid);
+ vverbose("PMT PID: %u", map_pid);
/* get the PMT */
if((pmt = read_table(_car.demux_device, map_pid, TID_PMT, timeout)) == NULL)
@@ -196,7 +196,7 @@
{
_car.carousel_id = ntohl(desc->carousel_id);
add_dsmcc_pid(&_car, elementary_pid);
- vverbose("pid=0x%x carousel_id=%u", elementary_pid, _car.carousel_id);
+ vverbose("PID=%u carousel_id=%u", elementary_pid, _car.carousel_id);
}
}
else if(desc_tag == TAG_STREAM_ID_DESCRIPTOR)
@@ -204,7 +204,7 @@
struct stream_id_descriptor *desc;
desc = (struct stream_id_descriptor *) &pmt[offset];
component_tag = desc->component_tag;
- vverbose("pid=0x%x component_tag=0x%x", elementary_pid, component_tag);
+ vverbose("PID=%u component_tag=%u", elementary_pid, component_tag);
add_assoc(&_car.assoc, elementary_pid, desc->component_tag, stream_type);
}
else if(desc_tag == TAG_LANGUAGE_DESCRIPTOR && is_audio_stream(stream_type))
@@ -220,7 +220,7 @@
}
else
{
- vverbose("pid=0x%x descriptor=0x%x", elementary_pid, desc_tag);
+ vverbose("PID=%u descriptor=0x%x", elementary_pid, desc_tag);
vhexdump(&pmt[offset], desc_length);
}
offset += desc_length;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2006-12-14 13:39:41
|
Revision: 157
http://svn.sourceforge.net/redbutton/?rev=157&view=rev
Author: skilvington
Date: 2006-12-14 05:39:40 -0800 (Thu, 14 Dec 2006)
Log Message:
-----------
print PIDs we are reading in verbose mode
Modified Paths:
--------------
redbutton-download/trunk/table.c
Modified: redbutton-download/trunk/table.c
===================================================================
--- redbutton-download/trunk/table.c 2006-12-14 11:47:16 UTC (rev 156)
+++ redbutton-download/trunk/table.c 2006-12-14 13:39:40 UTC (rev 157)
@@ -203,6 +203,8 @@
if(car->pids[i].pid == pid)
return;
+ verbose("Adding PID %u to filter", pid);
+
/* add a new PID data structure */
car->npids ++;
car->pids = safe_realloc(car->pids, car->npids * sizeof(struct pid_fds));
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2006-12-14 11:47:19
|
Revision: 156
http://svn.sourceforge.net/redbutton/?rev=156&view=rev
Author: skilvington
Date: 2006-12-14 03:47:16 -0800 (Thu, 14 Dec 2006)
Log Message:
-----------
more TODO
Modified Paths:
--------------
redbutton-download/trunk/TODO
Modified: redbutton-download/trunk/TODO
===================================================================
--- redbutton-download/trunk/TODO 2006-12-13 17:02:59 UTC (rev 155)
+++ redbutton-download/trunk/TODO 2006-12-14 11:47:16 UTC (rev 156)
@@ -1,3 +1,11 @@
+use PMT data_broadcast_id_descriptor (tag=0x66) to find boot carousel
+0x66 - tag
+uint8 N - length
+0x0106 - TDN data_broadcast_id
+0x0101 - UK Launch Profile application_type_code
+uint8 P - boot_priority_hint (0=highest)
+(see UK MHEG Profile p161)
+
got an "Out of memory" error when doing avstream and video changed size
(start of C4 news)
can't see how avstream can cause an out of memory error
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2006-12-13 17:03:13
|
Revision: 155
http://svn.sourceforge.net/redbutton/?rev=155&view=rev
Author: skilvington
Date: 2006-12-13 09:02:59 -0800 (Wed, 13 Dec 2006)
Log Message:
-----------
less TODO
Modified Paths:
--------------
redbutton-browser/trunk/TODO
Modified: redbutton-browser/trunk/TODO
===================================================================
--- redbutton-browser/trunk/TODO 2006-12-13 15:36:34 UTC (rev 154)
+++ redbutton-browser/trunk/TODO 2006-12-13 17:02:59 UTC (rev 155)
@@ -8,11 +8,6 @@
better audio sync in MHEGStreamPlayer
-if openStream fails - need to make sure either:
-contents picture gets filled with black, or
-VideoClass_render does not make a transparent rectangle in the overlay picture
-
-
in all VisibleClass objects
only redraw them in SetPosition/SetBoxSize/etc if they actually move/change size/etc
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2006-12-13 15:36:38
|
Revision: 154
http://svn.sourceforge.net/redbutton/?rev=154&view=rev
Author: skilvington
Date: 2006-12-13 07:36:34 -0800 (Wed, 13 Dec 2006)
Log Message:
-----------
remove unneeded \n
Modified Paths:
--------------
redbutton-download/trunk/biop.c
Modified: redbutton-download/trunk/biop.c
===================================================================
--- redbutton-download/trunk/biop.c 2006-11-07 16:49:22 UTC (rev 153)
+++ redbutton-download/trunk/biop.c 2006-12-13 15:36:34 UTC (rev 154)
@@ -132,7 +132,7 @@
}
else
{
- fatal("Unknown BIOP object: '%.*s'\n", kind.size, kind.data);
+ fatal("Unknown BIOP object: '%.*s'", kind.size, kind.data);
}
/* move onto the next */
data = (struct BIOPMessageHeader *) (((unsigned char *) data) + sizeof(struct BIOPMessageHeader) + size);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2006-11-07 16:49:29
|
Revision: 153
http://svn.sourceforge.net/redbutton/?rev=153&view=rev
Author: skilvington
Date: 2006-11-07 08:49:22 -0800 (Tue, 07 Nov 2006)
Log Message:
-----------
add install target to Makefiles
Modified Paths:
--------------
redbutton-browser/trunk/Makefile
redbutton-download/trunk/Makefile
Modified: redbutton-browser/trunk/Makefile
===================================================================
--- redbutton-browser/trunk/Makefile 2006-11-07 16:40:18 UTC (rev 152)
+++ redbutton-browser/trunk/Makefile 2006-11-07 16:49:22 UTC (rev 153)
@@ -3,6 +3,8 @@
# gprof profiling
#CFLAGS=-Wall -O2 -pg
+DESTDIR=/usr/local
+
DEFS=-D_REENTRANT -D_GNU_SOURCE
# safe_malloc debugging
#DEFS=-DDEBUG_ALLOC -D_REENTRANT -D_GNU_SOURCE
@@ -115,6 +117,10 @@
berdecode: berdecode.c
${CC} ${CFLAGS} ${DEFS} -o berdecode berdecode.c
+install: rb-browser rb-keymap
+ install -m 755 rb-browser ${DESTDIR}/bin
+ install -m 755 rb-keymap ${DESTDIR}/bin
+
clean:
rm -f rb-browser rb-keymap xsd2c dertest dertest-mheg.[ch] berdecode *.o ISO13522-MHEG-5.[ch] clone.[ch] rtti.h gmon.out core
Modified: redbutton-download/trunk/Makefile
===================================================================
--- redbutton-download/trunk/Makefile 2006-11-07 16:40:18 UTC (rev 152)
+++ redbutton-download/trunk/Makefile 2006-11-07 16:49:22 UTC (rev 153)
@@ -1,6 +1,8 @@
CC=gcc
CFLAGS=-Wall -O
+DESTDIR=/usr/local
+
OBJS= rb-download.o \
list.o \
findmheg.o \
@@ -26,6 +28,9 @@
.c.o:
${CC} ${CFLAGS} -c $<
+install: rb-download
+ install -m 755 rb-download ${DESTDIR}/bin
+
clean:
rm -f rb-download *.o core
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2006-11-07 16:40:23
|
Revision: 152
http://svn.sourceforge.net/redbutton/?rev=152&view=rev
Author: skilvington
Date: 2006-11-07 08:40:18 -0800 (Tue, 07 Nov 2006)
Log Message:
-----------
allow compiling on Dreambox (define HAVE_DREAMBOX_HARDWARE), patch from Lorenzo Pallara
Modified Paths:
--------------
redbutton-download/trunk/biop.c
redbutton-download/trunk/table.c
redbutton-download/trunk/utils.h
Modified: redbutton-download/trunk/biop.c
===================================================================
--- redbutton-download/trunk/biop.c 2006-11-07 15:07:56 UTC (rev 151)
+++ redbutton-download/trunk/biop.c 2006-11-07 16:40:18 UTC (rev 152)
@@ -23,6 +23,7 @@
#include <stdio.h>
#include <string.h>
#include <limits.h>
+#include <arpa/inet.h>
#include "biop.h"
#include "fs.h"
Modified: redbutton-download/trunk/table.c
===================================================================
--- redbutton-download/trunk/table.c 2006-11-07 15:07:56 UTC (rev 151)
+++ redbutton-download/trunk/table.c 2006-11-07 16:40:18 UTC (rev 152)
@@ -30,7 +30,13 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
+
+#if defined(HAVE_DREAMBOX_HARDWARE)
+#include <ost/dmx.h>
+#define dmx_sct_filter_params dmxSctFilterParams
+#else
#include <linux/dvb/dmx.h>
+#endif
#include "dsmcc.h"
#include "carousel.h"
Modified: redbutton-download/trunk/utils.h
===================================================================
--- redbutton-download/trunk/utils.h 2006-11-07 15:07:56 UTC (rev 151)
+++ redbutton-download/trunk/utils.h 2006-11-07 16:40:18 UTC (rev 152)
@@ -32,10 +32,18 @@
#endif
/* DVB demux device - %u is card number */
+#if defined(HAVE_DREAMBOX_HARDWARE)
+#define DEMUX_DEVICE "/dev/dvb/card%u/demux0"
+#else
#define DEMUX_DEVICE "/dev/dvb/adapter%u/demux0"
+#endif
/* DVB dvr device - %u is card number */
+#if defined(HAVE_DREAMBOX_HARDWARE)
+#define DVR_DEVICE "/dev/dvb/card%u/dvr0"
+#else
#define DVR_DEVICE "/dev/dvb/adapter%u/dvr0"
+#endif
char *skip_ws(char *);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2006-11-07 15:08:12
|
Revision: 151
http://svn.sourceforge.net/redbutton/?rev=151&view=rev
Author: skilvington
Date: 2006-11-07 07:07:56 -0800 (Tue, 07 Nov 2006)
Log Message:
-----------
bug fix (spotted by Lorenzo Pallara)
Modified Paths:
--------------
redbutton-download/trunk/biop.c
Modified: redbutton-download/trunk/biop.c
===================================================================
--- redbutton-download/trunk/biop.c 2006-11-06 08:59:07 UTC (rev 150)
+++ redbutton-download/trunk/biop.c 2006-11-07 15:07:56 UTC (rev 151)
@@ -277,7 +277,7 @@
profile.data += 4;
vverbose(" carouselId: %u", ior->carousel_id);
/* moduleId */
- ior->module_id = biop_uint16(profile_bo, *((uint32_t *) profile.data));
+ ior->module_id = biop_uint16(profile_bo, *((uint16_t *) profile.data));
profile.data += 2;
vverbose(" moduleId: %u", ior->module_id);
/* BIOP version */
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: Mario R. <mar...@go...> - 2006-11-06 21:06:18
|
I've managed to install the font, thank you. I've tried to run rb-download without -l and I get a better behaviour of rb-browser, even though sometimes it hangs with "please wait..." and never comes back (but it is non reproductibile, and in different places). I'll try to give you some exact exalmple of the behaviour. When running with "-l", contrary to what I said in a previous mail, I still experience situations (most of the times) where I cannot close the application with the top right button. I've got a Intel Centrino (1.5 GHz), both application on the same PC. On 11/6/06, Simon Kilvington <s.k...@er...> wrote: > at the moment, rb-browser does not really use much hardware acceleration > that your video card may provide - what you describe sounds like what > happens when there is either not enough processing power (or not enough > network bandwidth between rb-download and rb-browser) - rb-browser > doesn't really cope very well in this situation - it's something I need > to do some work on... > > what speed processor do you have? and are you running rb-download and > rb-browser on separate machines or on the same one? > > if you can reproduce the segfault with "-o null" and send me a gdb > backtrace or a core file I would be interested to see it > > > How can I disable both audio & video? > > > the easiest thing to do is run rb-download without the "-l" flag, then > rb-browser can't connect to it to get the video and audio streams > > eg, run them like this... > > rb-download 4165 & > rb-browser services/4165 > > > > Some logs > > I haven't attached the output of "-v" since it is too big. > > kernel 2.6.18 recompilaed (alsa drivers 1.0.12 rc1). > > v4l-dvb latest. > > I will try later to debug the "Audio invalid argument". > > > > ============================================================= > > rb-browser services/4164/ 2> log.txt > > > > output on screen: > > > > Font 'TiresiasScreenfont' not available; using 'sans' for 'rec://font/uk1' > > Unable to open '~/z': No such file or directory > > GetEngineSupport: unknown feature 'DVR(+)' > > Unable to set audio parameters: Invalid argument > > > > log.txt attached. > > > > ============================================================= > > rb-browser -o null services/4164/ 2> log2.txt > > > > output on screen > > > > Font 'TiresiasScreenfont' not available; using 'sans' for 'rec://font/uk1' > > Unable to open '~/z': No such file or directory > > GetEngineSupport: unknown feature 'DVR(+)' > > Unable to set audio parameters: Invalid argument > > ObjectReference not found: ~//d/s/mn1q.mhg 80 > > > > log2.txt attached > > > > =========================================================== > > > > meanwhile rb-download runs > > > > rb-download -l 4164 > > > > output on screen > > > > Unknown PID for association tag 0x68 > > > > ============================================================ > > > > Can I give better debug output? > > > > Thanks > > - -- > Simon Kilvington > > > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.4 (GNU/Linux) > Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org > > iD8DBQFFTwLOmt9ZifioJSwRAtfAAJ4+4aSC3f0kcg8Yh9sglPnFTPcuDQCfWN5r > oAsoN+17zDDmlA2R8yZUSPQ= > =Y9ad > -----END PGP SIGNATURE----- > > > category truetype > begin @FONTDIR@/tt7268m_802.ttf > Family = TiresiasScreenfont > FontName = TiresiasScreenfont > Encoding = Unicode > Location = English > Charset = ISO8859-1 ISO10646-1 > GeneralFamily = SansSerif > Weight = Medium > Width = Variable > Shape = NoSerif > Foundry = Bitstream > Priority = 20 > end > > > > |