Code: Alles auswählen
#if 0 /* todo: fix. probably outside of video.cpp. */
static int last_videoformat = AVS_FNCOUT_EXT43;
if (format != last_videoformat) {
switch (format) {
case AVS_FNCOUT_EXT169:
{
execute_start_file(FORMAT_16_9_FILE);
CIRSend irs("16:9");
irs.Send();
last_videoformat = format;
break;
}
case AVS_FNCOUT_EXT43:
{
execute_start_file(FORMAT_4_3_FILE);
CIRSend irs("4:3");
irs.Send();
last_videoformat = format;
break;
}
default:
break;
}
}
#endif
Ausserdem gibt es Probleme mit der Organisation des Codes.
Ich habe mich ein Bisschen Gedanken gemacht, hier ein erster, unvollständiger Entwurf. Die einzige Funktion der Klasse irsend wird in liblircdclient eingefügt (als static Gliedfunktion), mit einer dlopen geeigneter aufruf. Es wird dlopen benutzt um liblircdclient (falls vorhanden) zu öffnen, anstatt mit der Library zu linken -- unabhängig von ENABLE_LIRC.
Code: Alles auswählen
void *lirc = dlopen("liblircdclient.so.0", RTLD_NOW);
if (lirc)
{
printf("[neutrino] liblircdclient was found, lirc will be enabled.\n");
*(void **) (&lirc_send) = dlsym(lirc, "send_tuxbox_lirc");
}
else
printf("[neutrino] liblircdclient was not found, lirc will be disabled.\n");
Code: Alles auswählen
if (lirc_send)
{
if (verbose)
printf("[neutrino] lirc_send(%s)\n", filename);
(*lirc_send)(filename);
}
else
if (verbose)
printf("[neutrino] lirc_send is zero\n");
Dadurch wird der bedingte Kompilierung (#ifdef ENABLE_LIRC) nicht mehr erforderlich, sondern das Programm untersucht während Runtime falls LIRC vorhanden ist. LIRC wird dadurch eine nachinstallierbare Komponente.
execute_start_file ruft jetzt sowohl eventuell vorhandene shellscripts als auch lircscripts auf. Mehr ausführlich: Der Aufruf execute_start_file(NEUTRINO_STANDBY_START_SCRIPT) (wobei NEUTRINO_STANDBY_START_SCRIPT expandiert zu "standby-start") ruft (falls vorhanden) den Programm ("Script") /var/tuxbox/config/standby-start sowie lirc-t (falls vorhanden) /var/tuxbox/config/lirc/standby-start.lirc. Dadurch gewinnt man einheitlichkeit, verliert aber Rückwärtskompatibilität.
Der Patch ist unvollständig (z.B. fehlt fix für dein pictureviewer). Bitte um Feedback.
In Patch nicht enthalten: Entfernen der beiden irsend-Verzeichnisse,
Fragen:
- Volume mit LIRC, ist es wirklich sinnvoll?
- Umbenennung der startscripte/lircscripte: Betrifft relativ wenige, und diese User sind Powerusers.
- Fixen von 16:9.start/4:3.start (seife?)