Una piccola patch per Kaffeine…

Mi sono da poco avvicinato a questo Lettore Multimediale, a detta di Wikipedia, il più completo per sistemi Unix-like.

Non è che mi trovavo proprio male con il buon vecchio VLC o con mplayer, ma kaffeine mi offre qualcosa in più, mi permette di vedere la TV satellitare tramite la mia schedina PCI DVB.

Ho trovato subito qualche problemino, tipo la ricerca dei canali è impressionante! Kaffeine tira giù dal satellite tutti (ma proprio tutti!) i canali che vengono trasmessi. Mi sono ritrovato quindi con reti che avrei benissimo potuto farne a meno. Con quasi 700 canali, Hotbird (il “nostro” satellite) offre infatti una copertura che include grossomodo tutta l’Europa, con una parte del Nord Africa e del Medio Oriente.

Immaginate ore quanti canali francesi, arabi, spagnoli e chissà cos’altro il mio Kaffeine aveva in Lista… Nono… Ho dovuto sistemare questa cosa; per farlo ho dovuto scrivermi un piccolo programmino in Java che, tramite un parser per la lista dei canali di kaffeine, un altro per la lista dei kanali (inzio a far confusione fra caffeine e kanali???) di Sky, presi sempre da Wikipedia, mi facesse un grep un po’ più intelligente sui canali italiani (almeno quelli trasmessi da Sky), impostando -cosa molto importante- il numero del canale come in un “normale decoder satellitare” e, visto che ci avevo preso gusto, anche un nome, per così dire, “decente” e una category per suddividere successivamente i canali in kaffeine.

Non è stato proprio banale, sul satellite, ad esempio (è un esempio!), non c’è un unico “Discovery Channel”, ma si trovano:

  • 1059 – Discovery Channel (eng)
  • 1060 – Discovery Ch. (ita,fra)
  • 1065 – Discovery Ch-1 (pol)

Quali fra questi scegliere? voi direte: è semplice… vai a vedere se la lingua è “ita”, invece no! ‘sti canali bastardi a volte omettono la lingua di default, che in alcuni casi è proprio “ita”… Il modo migliore di costruire la cosa è stata creare un file lista (quella di Wikipedia) che mi costruisse un oggetto “CanaleSky” con le proprietà:

TAG | NOME | NUMERO_CANALE

Ove TAG corrisponde al nome atteso del canale della lista di Kaffeine, NOME il nome che mi deve poi sostituire nella lista, e NUMERO_CANALE per impostare il num. come (già detto?) se avessi un “normale decoder satellitare”.

Parallelamente, leggo il file channels.dvb di Kaffeine e creo una lista di oggetti “CanaleKaffeine”, con varie proprietà, fra cui NOME e NUM. Per ogni CanaleSky, faccio poi una ricerca confrontando la ChannelSky.TAG (valore atteso) con ChannelKaffeine.NOME, se coincidono faccio le varie sostituzioni e scrivo il nuovo canale su un file. Un qualcosa tipo:

1
2
3
4
5
6
7
8
9
10
11
12
for (Channel c : skyChannels) {
      for (KaffeineChannel k : kaffChannels) 
      {
          if(k.getName().equalsIgnoreCase(c.getTag()))
          {
                    k.setChannelNum(""+c.getNum());
                    k.setCategory(c.getCategory());
                    k.setName(c.getName());
                    writer.println(k.toString());
          }
      }
}
[MODE_INCAZZATO_ON]’Sto Html è razzista con i tab e i whitespace[/OFF]

Il risultato è una lista di canali italiani “decente”…. anche se alcuni canali ancora non funzionano bene, me li ritrovo in qualche lingua strana… Ma grossomodo quelli principali (testati) sono OK.
Vabbe’ ripulisco i sorgenti e poi ve lo mostro tutto… magari mi faccio un giro per tutti i canali prima e metto le cose apposto.

Ma oh, che ho fatto fin ora? azz, non era proprio il topic di cui volevo discutere. Porc’… Un altro problema che ho incontrato in kaffeine è stato che facendo “zapping” fra i vari canali in modalità OSD (visualizzando le informazioni del canale tipo il titolo del programma in onda) se mi trovavo al canale 303 e volevo passare al successivo (canale 306) kaffeine non faceva nulla, continuava a mostrarmi le info del canale corrente. Boh… ho preso i sorgenti e ho visto che effettivamente il problema era esistente; praticamente la funzione faceva qualcosa del tipo:
nextOSDChannel = currentChannel->num+1;
eh, ma se (come nel mio caso) il canale successivo non è sequenziale a quello corrente?
return null;
Mah dai!…

Ho quindi un po’ modificato la funzione vdbOSDSkip nel file kaffeine/src/input/dvb/dvbpanel.cpp, ora sembra andare perfettamente.

Eccola: dvbOSDSkip.patch

  1. Scaricare e scompattare i sorgenti di Kaffeine dal sito ufficiale
  2. Scaricare il file .patch e inserirlo nella cartella dei sorgenti di Kaffeine
  3. dare il comando: cat dvbOSDSkip.patch | patch -p0
  4. installare i pacchetti necessari: sudo apt-get build-dep kaffeine
  5. successivamente i soliti comandi per la compilazione: ./configure && make && sudo make install

Ho inviato anche una mail agli sviluppatori con la patch, ma ancora non mi rispondono. Boh.

6 pensieri su “Una piccola patch per Kaffeine…

  1. ;)

    La proverò, anche se per ora sto usando quella di Sky :)

    Ah per la cronaca: ho trovato un altro bug..
    Praticamente, anche con la patch che ho inserito io, se “il canale successivo” è una radio, Kaffeine continua a fare lo “sgherzetto”:
    continua a mostrare le OSD info del canale corrente.

    Mmm… devo studiarmi un po’ le funzioni ed aggiungere un semplice “if”.
    Appena trovo la soluzione la uppo immediatamente…

    Ciao :)

  2. Mi correggo da solo:

    Non c’è un vero e proprio bug in quanto ho scoperto che quelle radio le avevo aggiunte io per prova ed erano “sintatticamente” scorrente per kaffeine. Con le altre radio infatti funziona bene.

    Ariciao.

Rispondi