VDR 1.5.9 ja Xineliboutput yhteensopivuus (OSD-ongelmia)

Juttua VDR:n ja VDR pluginien patcheistä

VDR 1.5.9 ja Xineliboutput yhteensopivuus (OSD-ongelmia)

ViestiKirjoittaja phelin » 29.08.2007 12:06

Tässä pätsi, jolla xineliboutput (ainakin cvs-versio) kääntyy uusimman VDR-kehitysversion kanssa. Nopeasti kokeiltuna tuntuisi toimivan, mutta kertokaa onko ongelmia.

Koodi: Valitse kaikki
--- equalizer.c.orig    2007-08-29 10:32:40.000000000 +0300
+++ equalizer.c 2007-08-29 10:33:47.000000000 +0300
@@ -46,7 +46,7 @@
 {
   tArea areas [] = { {0, 0, OSD_W - 1, OSD_H - 1, 4} };

-  m_Osd = cOsdProvider::NewOsd(OSD_X, OSD_Y);
+  m_Osd = cOsdProvider::NewOsd(OSD_X, OSD_Y, 0);

   if(m_Osd) {
     if (m_Osd->CanHandleAreas(areas, sizeof(areas) / sizeof(tArea) ) == oeOk) {
--- osd.c.orig  2007-08-29 10:35:21.000000000 +0300
+++ osd.c       2007-08-29 11:20:05.000000000 +0300
@@ -148,8 +148,8 @@
   }
 }

-cXinelibOsd::cXinelibOsd(cXinelibDevice *Device, int x, int y)
-    : cOsd(x, y), m_IsVisible(true)
+cXinelibOsd::cXinelibOsd(cXinelibDevice *Device, int x, int y, uint level)
+    : cOsd(x, y, level), m_IsVisible(true)
 {
   TRACEF("cXinelibOsd::cXinelibOsd");

@@ -341,7 +341,7 @@
   }
 }

-cOsd *cXinelibOsdProvider::CreateOsd(int Left, int Top)
+cOsd *cXinelibOsdProvider::CreateOsd(int Left, int Top, uint level)
 {
   TRACEF("cXinelibOsdProvider::CreateOsd");

@@ -350,7 +350,7 @@
   if(cXinelibOsd::m_OsdStack.First())
     LOGMSG("cXinelibOsdProvider::CreateOsd - OSD already open !");

-  cXinelibOsd *m_OsdInstance = new cXinelibOsd(m_Device, Left, Top);
+  cXinelibOsd *m_OsdInstance = new cXinelibOsd(m_Device, Left, Top, level);

   if(cXinelibOsd::m_OsdStack.First())
     cXinelibOsd::m_OsdStack.First()->Hide();
--- osd.h.orig  2007-08-29 10:35:14.000000000 +0300
+++ osd.h       2007-08-29 11:13:20.000000000 +0300
@@ -45,7 +45,7 @@
     friend class cXinelibOsdProvider;

   public:
-    cXinelibOsd(cXinelibDevice *Device, int x, int y);
+    cXinelibOsd(cXinelibDevice *Device, int x, int y, uint level);
     virtual ~cXinelibOsd();
 };

@@ -59,7 +59,7 @@
     cXinelibOsdProvider(cXinelibDevice *Device);
     virtual ~cXinelibOsdProvider();

-    virtual cOsd *CreateOsd(int Left, int Top);
+    virtual cOsd *CreateOsd(int Left, int Top, uint level);

     static void RefreshOsd(void);
 };
--- setup_menu.c.orig   2007-08-29 10:32:49.000000000 +0300
+++ setup_menu.c        2007-08-29 10:34:29.000000000 +0300
@@ -1537,7 +1537,7 @@
   int i;

   if(!m_Osd)
-    m_Osd = cOsdProvider::NewOsd(OSD_X, OSD_Y);
+    m_Osd = cOsdProvider::NewOsd(OSD_X, OSD_Y, 0);

   if(m_Osd) {
     if (m_Osd->CanHandleAreas(areas, sizeof(areas) / sizeof(tArea) ) == oeOk) {
@@ -1636,7 +1636,7 @@
   int x, y, bit = 0;

   if(!m_Osd) {
-    m_Osd = cOsdProvider::NewOsd(OSD_X, OSD_Y);
+    m_Osd = cOsdProvider::NewOsd(OSD_X, OSD_Y, 0);

     if(m_Osd) {
       if (m_Osd->CanHandleAreas(areas, sizeof(areas) / sizeof(tArea) ) == oeOk) {
Viimeksi muokannut phelin päivämäärä 29.08.2007 19:44, muokattu yhteensä 1 kerran
Avatar
phelin
Yli-ihminen
 
Viestit: 1256
Liittynyt: 09.02.2005 3:00
Paikkakunta: Helsinki

ViestiKirjoittaja phelin » 29.08.2007 19:43

Jaa, voisi olettaa että kaikki toimii, kun ei ole muutakaan palautetta tullut... mutta ikävä kyllä niin ei ole. DVB-tekstitys kaappaa OSD:n joka kerta uusien tekstitysten tullessa. Tekstitv-tekstitys toimii oikein. Mutta mahtaako vika olla xineliboutputissa vai subtitles-pluginissa? Voisiko joku FF-korttia tai DXR3:sta käyttävä kertoa toimiiko tekstitys + menu rautapurulla?
Avatar
phelin
Yli-ihminen
 
Viestit: 1256
Liittynyt: 09.02.2005 3:00
Paikkakunta: Helsinki

ViestiKirjoittaja rofafor » 29.08.2007 20:39

phelin kirjoitti:DVB-tekstitys kaappaa OSD:n joka kerta uusien tekstitysten tullessa. Tekstitv-tekstitys toimii oikein. Voisiko joku FF-korttia tai DXR3:sta käyttävä kertoa toimiiko tekstitys + menu rautapurulla?

Käytössä on pelkästään subtitles-plugin + FF-kortti ja homma toimii ihan kunnolla (lukuunottamatta satunnaista pikku osd-bugia vdr-1.5.9:ssä). Avaathan subtitles-pluginissa osd:n muulle kuin nolla tasolle?
Avatar
rofafor
Optikkoliikkeen kopiovastaava
 
Viestit: 1365
Liittynyt: 26.03.2004 3:00
Paikkakunta: Internet

ViestiKirjoittaja phelin » 29.08.2007 21:10

rofafor kirjoitti:
phelin kirjoitti:DVB-tekstitys kaappaa OSD:n joka kerta uusien tekstitysten tullessa. Tekstitv-tekstitys toimii oikein. Voisiko joku FF-korttia tai DXR3:sta käyttävä kertoa toimiiko tekstitys + menu rautapurulla?

Käytössä on pelkästään subtitles-plugin + FF-kortti ja homma toimii ihan kunnolla (lukuunottamatta satunnaista pikku osd-bugia vdr-1.5.9:ssä). Avaathan subtitles-pluginissa osd:n muulle kuin nolla tasolle?


Eikös se tasolle 10 aukea, kun subtitles-plugin on purkkapaikattu? Erona ttxtsubs-pluginiin näyttäisi olevan se, että subtitles-plugin kutsuu cOsdProvider::NewOsd:ia joka kerta kun uusi tekstitys päivittyy.

Purkkapaikanpaikalla subtitles-pluginiin sain homman toimimaan väliaikaisesti:

Koodi: Valitse kaikki
--- viewer.c.orig       2007-08-29 20:44:42.000000000 +0300
+++ viewer.c    2007-08-29 20:41:47.000000000 +0300
@@ -85,7 +85,7 @@
 #if defined(APIVERSNUM) && APIVERSNUM < 10509
   iOsd = cOsdProvider::NewOsd( 0, gSubtitlesConfiguration.offset, true );
 #else
-  iOsd = cOsdProvider::NewOsd( 0, gSubtitlesConfiguration.offset, 10 ); // OSD level 10
+//  iOsd = cOsdProvider::NewOsd( 0, gSubtitlesConfiguration.offset, 10 ); // OSD level 10
 #endif
 }

@@ -118,6 +118,9 @@
   if (!iCurrentPage || !iShowing)
       return;

+  if (cOsd::IsOpen())
+     return;
+
   if (!iOsd)
 #if defined(APIVERSNUM) && APIVERSNUM < 10509
       iOsd = cOsdProvider::NewOsd( 0, gSubtitlesConfiguration.offset, true );


Mikä se "pikku OSD-bugi" on?
Avatar
phelin
Yli-ihminen
 
Viestit: 1256
Liittynyt: 09.02.2005 3:00
Paikkakunta: Helsinki

ViestiKirjoittaja rofafor » 29.08.2007 23:51

phelin kirjoitti:Eikös se tasolle 10 aukea, kun subtitles-plugin on purkkapaikattu? Erona ttxtsubs-pluginiin näyttäisi olevan se, että subtitles-plugin kutsuu cOsdProvider::NewOsd:ia joka kerta kun uusi tekstitys päivittyy.

Noh, yleisesti jaossa oleva purkkapaikka oli semmoinen liikkuva maali, jota pitää käyttää harkiten (päivitin käytössäni olevan uusimman verkkoon). Lisäpaikkasi "IsOpen()"-lohko rikkoo koko OSD:n tasologiikan, joten sitä en kyllä suosittele käytettävän. Onhan sinulla käytössä uusin versio itse VDR:ään laitettavasta pätsistä, jotta sieltä ei vain tule tarpeettomia Hide/Show() kutsuja?

Mainitsemani OSD-bugi liittyy nyt viikon aikana pariin havaitsemaani huonosti pyyhittyyn alemman tason OSD:hen, kun kaksi eritasoista OSD:ta avataan/suljetaan samaan aikaan eli ei sen vakavampaa. Tätä on vaikea saada toistettua ja mahdollisesti SubtitlesViewer::Clear():ista disabloitu NewOsd()-metodi on teoriassa voinut jopa korjata tämänkin...
Avatar
rofafor
Optikkoliikkeen kopiovastaava
 
Viestit: 1365
Liittynyt: 26.03.2004 3:00
Paikkakunta: Internet

ViestiKirjoittaja phelin » 30.08.2007 0:36

rofafor kirjoitti:
phelin kirjoitti:Eikös se tasolle 10 aukea, kun subtitles-plugin on purkkapaikattu? Erona ttxtsubs-pluginiin näyttäisi olevan se, että subtitles-plugin kutsuu cOsdProvider::NewOsd:ia joka kerta kun uusi tekstitys päivittyy.

Noh, yleisesti jaossa oleva purkkapaikka oli semmoinen liikkuva maali, jota pitää käyttää harkiten (päivitin käytössäni olevan uusimman verkkoon). Lisäpaikkasi "IsOpen()"-lohko rikkoo koko OSD:n tasologiikan, joten sitä en kyllä suosittele käytettävän. Onhan sinulla käytössä uusin versio itse VDR:ään laitettavasta pätsistä, jotta sieltä ei vain tule tarpeettomia Hide/Show() kutsuja?


Tänään aamulla sivultasi paikat hain. Äsken päivitin purkkapaikan, mutta ei auttanut, taas täytyi lisätä cOsd::IsOpen() tarkistus.
Avatar
phelin
Yli-ihminen
 
Viestit: 1256
Liittynyt: 09.02.2005 3:00
Paikkakunta: Helsinki

ViestiKirjoittaja hanu » 30.08.2007 0:49

Jep, ei auttanut purkkapaikka ;) Huomasin samalla, ettei femonkaan suostunut kääntymään 1.5.9:llä:

Entering directory `/usr/local/src/vdr-1.5.9/PLUGINS/src/femon-1.1.0'
g++ -fPIC -g -O2 -Wall -Woverloaded-virtual -c -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"femon"' -I../../../include femonosd.c
femonosd.c: In member function `bool cFemonOsd::DeviceSwitch(int)':
femonosd.c:693: error: no matching function for call to `cTransferControl::
cTransferControl(cDevice*, int, const int*, const int*, const int*)'
../../../include/vdr/transfer.h:32: error: candidates are:
cTransferControl::cTransferControl(const cTransferControl&)
../../../include/vdr/transfer.h:37: error:
cTransferControl::cTransferControl(cDevice*, tChannelID, int, const int*,
const int*, const int*)
make[1]: *** [femonosd.o] Error 1
make[1]: Leaving directory `/usr/local/src/vdr-1.5.9/PLUGINS/src/femon-1.1.0
Avatar
hanu
Isäntä
 
Viestit: 98
Liittynyt: 07.01.2005 3:00
Paikkakunta: Helsinki

ViestiKirjoittaja makton » 30.08.2007 1:11

hanu kirjoitti:Jep, ei auttanut purkkapaikka ;) Huomasin samalla, ettei femonkaan suostunut kääntymään 1.5.9:llä:

Entering directory `/usr/local/src/vdr-1.5.9/PLUGINS/src/femon-1.1.0'
g++ -fPIC -g -O2 -Wall -Woverloaded-virtual -c -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"femon"' -I../../../include femonosd.c
femonosd.c: In member function `bool cFemonOsd::DeviceSwitch(int)':
femonosd.c:693: error: no matching function for call to `cTransferControl::
cTransferControl(cDevice*, int, const int*, const int*, const int*)'
../../../include/vdr/transfer.h:32: error: candidates are:
cTransferControl::cTransferControl(const cTransferControl&)
../../../include/vdr/transfer.h:37: error:
cTransferControl::cTransferControl(cDevice*, tChannelID, int, const int*,
const int*, const int*)
make[1]: *** [femonosd.o] Error 1
make[1]: Leaving directory `/usr/local/src/vdr-1.5.9/PLUGINS/src/femon-1.1.0


femonista on tullut jokunen uudempi versio tuon 1.1.0 jälkeen joista ainakin uusin 1.5.8:lla kääntyy.
/toni
Avatar
makton
Amatööri
 
Viestit: 18
Liittynyt: 22.06.2004 3:00

ViestiKirjoittaja rofafor » 30.08.2007 1:11

phelin kirjoitti:taas täytyi lisätä cOsd::IsOpen() tarkistus.

Pätsissäsi ei toteuteta uutta SetActive()-metodia, jonka avulla toteutetaan OSD:eiden aktivointi/deaktivointi (katso vdr-1.5.8-1.5.9.diff), mikä voinee aiheuttaa em. ongelmia.
Viimeksi muokannut rofafor päivämäärä 30.08.2007 1:26, muokattu yhteensä 1 kerran
Avatar
rofafor
Optikkoliikkeen kopiovastaava
 
Viestit: 1365
Liittynyt: 26.03.2004 3:00
Paikkakunta: Internet

ViestiKirjoittaja rofafor » 30.08.2007 1:25

hanu kirjoitti:Huomasin samalla, ettei femonkaan suostunut kääntymään 1.5.9:llä

Käyttämäsi versio toimii vain 1.4.x-sarjan VDR:illä. Miten tämä liittyy xineliboutputiin?
Avatar
rofafor
Optikkoliikkeen kopiovastaava
 
Viestit: 1365
Liittynyt: 26.03.2004 3:00
Paikkakunta: Internet

ViestiKirjoittaja hanu » 30.08.2007 1:30

makton kirjoitti:femonista on tullut jokunen uudempi versio tuon 1.1.0 jälkeen joista ainakin uusin 1.5.8:lla kääntyy.


Heh, kädet olivat taas silmää nopeampia ;)
Hain jo viimeisimmän, mutta yritin kääntää tuolla 1.1.0:lla. Ihme, ettei oikein purrut. Noh, nyt toimaa :D
Avatar
hanu
Isäntä
 
Viestit: 98
Liittynyt: 07.01.2005 3:00
Paikkakunta: Helsinki

ViestiKirjoittaja P.Kosunen » 31.08.2007 12:25

Tarvitseeko xineliboutin uutta (31.8.-07) cvs-versiota vielä pätsäillä?
P.Kosunen
Yli-ihminen
 
Viestit: 1131
Liittynyt: 06.11.2005 14:08
Paikkakunta: Helsinki

ViestiKirjoittaja phelin » 31.08.2007 12:49

P.Kosunen kirjoitti:Tarvitseeko xineliboutin uutta (31.8.-07) cvs-versiota vielä pätsäillä?


Täytyy, cvs:ssä ei ole ollut muutoksia noin kuuteen viikkoon.

Pätsistä sen verran, että se toimii, mutta tosiaan edellyttää myös subtitles-pluginin pätsäämistä. Tämä johtuu siitä, ettei pätsissä ole oikeasti toteutettu VDR:n uutta OSD-logiikkaa, vaan pelkästään muokattu xineliboutputia sen verran, ettei se sotkeudu siihen täysin.

Versiosta 1.5.7 alkaen VDR:ssä käytetään myös uutta käännöslogiikkaa. VDR:n mukana tuleva i18n-gettext.pl skripti, jolla vanhoista i18n.c tiedostoista koostetaan uudet kielitiedostot, ei toimi sellaisenaan xineliboutputin kanssa, koska se ei osaa käsitellä tämmöistä rakennetta:

Koodi: Valitse kaikki
  {
        "Media Player", // English


vaan ainoastaan tämän:

Koodi: Valitse kaikki
  {     "Media Player", // English


Muokkasin skriptiä, mutta tällä hetkellä en pääse siihen käsiksi, enkä vai laittaa pätsiä tänne. Jotain tämmöistä kuitenkin:

Alkuperäinen:
Koodi: Valitse kaikki
     last if (/{ *NULL *}/); # stop after last phrase
      if (/{ *(.*),/) {
         $Original = $1;
         $Index = 0;
         }
      elsif (/}/) {
         }
      else {


Muokattu:
Koodi: Valitse kaikki
     last if (/{ *NULL *}/); # stop after last phrase
      if (/{ *(.*),/) {
         $Original = $1;
         $Index = 0;
         }
      elsif (/{/) {
          $NextIsOriginal = 1;
         }
      elsif ($NextIsOriginal == 1) {
          $Original = $1;
          $Index = 0;
          $NextIsOriginal = 0;
         }
      elsif (/}/) {
         }
      else {
Avatar
phelin
Yli-ihminen
 
Viestit: 1256
Liittynyt: 09.02.2005 3:00
Paikkakunta: Helsinki

ViestiKirjoittaja P.Kosunen » 31.08.2007 13:03

Nyt meni kaikki putkeen, mutta ylellä ei näy tekstit.

Edit: Subit toimiikin pelkällä purkkapaikalla, ei tarvitse tuota ketjun 4. viestin pätsiä.

Edit2: DVB-subit pimentää osd:n eli ei ihan täysin toimikaan.
Viimeksi muokannut P.Kosunen päivämäärä 01.09.2007 14:14, muokattu yhteensä 1 kerran
P.Kosunen
Yli-ihminen
 
Viestit: 1131
Liittynyt: 06.11.2005 14:08
Paikkakunta: Helsinki

ViestiKirjoittaja phi » 01.09.2007 12:29

P.Kosunen kirjoitti:Tarvitseeko xineliboutin uutta (31.8.-07) cvs-versiota vielä pätsäillä?

Patchi löytyy nyt CVS:stä pienin muutoksin (toivotaan että kääntyy vielä ...).

EDIT:
phelin kirjoitti:VDR:n mukana tuleva i18n-gettext.pl skripti, jolla vanhoista i18n.c tiedostoista koostetaan uudet kielitiedostot, ei toimi sellaisenaan xineliboutputin kanssa

Muutin myös i18n.c :n (toivottavasti) paremmin yhteensopivaan muotoon (löytyy myös CVS:stä).
Viimeksi muokannut phi päivämäärä 01.09.2007 16:23, muokattu yhteensä 2 kertaa
phi
Vanhempi asiantuntija
 
Viestit: 179
Liittynyt: 12.09.2006 17:11

Seuraava

Paluu Patchit

Paikallaolijat

Käyttäjiä lukemassa tätä aluetta: Ei rekisteröityneitä käyttäjiä ja 2 vierailijaa

cron