osdpip ja dxr3

VDR ja DVB aiheista keskustelua
joukoy
Vanhempi asiantuntija
Viestit: 178
Liittynyt: 11.05.2006 8:46

osdpip ja dxr3

Viesti Kirjoittaja joukoy » 11.05.2006 10:19

Onko osdpip mahdollista saada toimimaan dxr3:n kanssa vai onko se pelkästään FF-korteille?

Avatar
dj
Yli-ihminen
Viestit: 668
Liittynyt: 22.08.2004 3:00

Viesti Kirjoittaja dj » 11.05.2006 10:47

Joskus sitä kokeilin niin ei oikein onnistunut. DXR3:sen OSD:ssä on kait käytössä vain 16 väriä vs. FF-kortin OSD:n 256 väriä. Saahan silläkin paletilla jonkinlaista kuvaa aikaan mutta minä sain aikaiseksi vain pelkkää sotkua näytölle.

joukoy
Vanhempi asiantuntija
Viestit: 178
Liittynyt: 11.05.2006 8:46

Viesti Kirjoittaja joukoy » 11.05.2006 18:39

Niin... 16 harmaasävyäkin kelpaisi, mutta ilmeisesti sitäkään ei saa toimimaan?

nm
Johtava konsultti
Viestit: 3160
Liittynyt: 22.07.2005 3:00

Viesti Kirjoittaja nm » 11.05.2006 19:06

Enpä usko että saa millään konstilla Dxr3:n OSD:llä. Muistaakseni VDR:n menujenkin liian nopea päivitys aiheuttaa kortille ongelmia, ja tästä oli seurauksena epävakautta Dxr3-pluginin joissain versioissa.

Itse olisin kiinnostunut OSD:n liittämisestä suoraan toistettavaan MPEG-1/2-videoon. Tämä mahdollistaa huomattavasti monipuolisemman kuvaruutunäytön ja muitakin efektejä, jos koneteho vain riittää. PIP toimisi täysvärisenä, koko kuvanopeudella ja haluttaessa läpinäkyvänä. Myös kaikki muxin kanavat, tai enemmänkin voitaisiin esittää mosaiikkina. Tämähän onnistuu toki helpoiten unohtamalla FF-kortin ulostulon tai Dxr3:n ja käyttämällä näytönohjainta, mutta kuvaputkitelevisioiden käyttäjiäkin on vielä aika paljon. Myös monissa verkkostreamausratkaisuissa videon editoinnista lennossa palvelinpuolella olisi apua. Esimerkkinä vaikkapa vdr-streamdev ja DVB-tekstitys. Jos tekstit saadaan ympättyä lähetettävään streamiin jo palvelimessa, asiakasohjelman tai -laitteen ei tarvitse tukea niitä.

MMSv2:ssa ja Freevossa Dxr3-tuki on itse asiassa toteutettu juuri niin, että koko OSD pakataan videoksi ja näytetään normaalisti purkupiirin avulla. Kortin varsinaista OSD-tukea ei käytetä lainkaan. Vielä parempi vaihtoehto on compressed domain editing, eli taustalla esitettävä videokuva puretaan vain osittain ja OSD liitetään siihen DCT-domainissa. Tällaisen editointikirjaston kirjoittaminen on ehdottomasti projekti, jonka toteuttamisesta olen kiinnostunut, jos aikaa opiskelulta ja muilta töiltä liikenee. Tämän vuoden osalta näyttää kyllä aika tiukalta.

Avatar
dj
Yli-ihminen
Viestit: 668
Liittynyt: 22.08.2004 3:00

Viesti Kirjoittaja dj » 12.05.2006 9:17

joukoy kirjoitti:Niin... 16 harmaasävyäkin kelpaisi, mutta ilmeisesti sitäkään ei saa toimimaan?
Siinähän pitää käyttää niitä värejä jotka ovat jo ruudulla + sekä muutamaa vapaata väriä joita jää yli. Saisi varmaan toimimaan mutta vaatii koodaamista sillä pluginia ei ole tehty dxr3:a silmälläpitäen.

Avatar
dj
Yli-ihminen
Viestit: 668
Liittynyt: 22.08.2004 3:00

Viesti Kirjoittaja dj » 12.05.2006 9:31

nm kirjoitti:Enpä usko että saa millään konstilla Dxr3:n OSD:llä. Muistaakseni VDR:n menujenkin liian nopea päivitys aiheuttaa kortille ongelmia, ja tästä oli seurauksena epävakautta Dxr3-pluginin joissain versioissa.
dxr3 plugari kaatuu siihen jos siihen ei syötetä jatkuvasti signaalia. Eli tyhjä kanava ilman kuvaa kaataa plugarin jossain vaiheessa. Tämähän voitaisiin kiertää syöttämällä dxr3:seen aina jotain, vaikka mustaa ruutua tai VDR-logoa tai Linux pingviiniä tms.

Toinen paikka missä plugari kaatuu on kun VDR:n käynnistää niin riippuen ilmeisesti ruudunpäivityksen nopeudesta se kaatuu muutaman minuutin -vartin sisällä ja sitten kun se on sen tehnyt ja plugari on resetoinut itsensä tms. niin se toimii "ikuisesti".

Jos osdpip koodattaisiin kunnolla dxr3:sta varten niin uskon että se pelaisi ihan ok.

nm
Johtava konsultti
Viestit: 3160
Liittynyt: 22.07.2005 3:00

Viesti Kirjoittaja nm » 12.05.2006 12:36

Tarkoitin n. vuoden takaisia pluginin versioita. Koodin perusteella 40 ms on kuitenkin toimiva päivitysväli, eli kyllä se saattaisi näyttää jopa täydet 25 kuvaa sekunnissa, ellei OSD:n kokoa tai kaistaa ole muuten rajoitettu.

Avatar
dj
Yli-ihminen
Viestit: 668
Liittynyt: 22.08.2004 3:00

Viesti Kirjoittaja dj » 14.05.2006 15:41

Kokeilin tuota osdpip plugaria vdr-1.4.0:llä ja kyllä se mustavalkoisena toimii jotenkin. Tossa aikaisemmin puhuin, että pitää käytellä niitä värejä, jotka on vapaana, mutta eihän siinä ole muita värejä silloin näytöllä kun pikkukuvaa näytetään.

Näyttäis siltä että kuvassa musta väri on läpinäkyvä ja valkoinen vuotaa yli eli pitäis varmaan siirtää palettia niin että värit on nollasta viiteentoista tai sitten yhdestä kuuteentoista tms. Koitin tutkia miten se onnistuisi mutta en valaistunut.

kurg
Vanhempi asiantuntija
Viestit: 175
Liittynyt: 13.04.2006 17:17

Viesti Kirjoittaja kurg » 12.06.2006 21:27

En tiedä onko aiheeseen aikaisemmin korjausta, mutta tässä "ruma" korjaus (ihan herjalla vaan rupesin kokeileen, saisinko mitään aikaseks):

Rivin 242 paikkeilla osd.c tiedostossa:
----------------------------------------------------------------------------------------------------
for (int x = 0; x < m_Width; x++)
{
value = outputImage[y * m_Width + x];
value = value & 0xF0;
value = value & 0xC0; //LISÄÄ TÄMÄ RIVI TÄNNE VÄLIIN
value = m_AlphaBase | (value << 16) | (value <<8>DrawPixel(x, y + (m_Height - height) / 2, value);
----------------------------------------------------------------------------------------------------

Tietenkin edeltävän rivin (0xF0:n) voi kanssa muuttaa, mutta ompi helpompi palauttaa takaisin jos ei tykkää.

Mun arvaukseni on, että dxr3 tykkää vaan 4:sta väristä, joten siksi kyseinen rivi (kokeilin 8 jne. väriä (harmaasävyä), mutta ei pelannu).

Nyt kun jaksais tutustua tuohon patch-ohjelmaan ja sitten vielä jos tekis hienon, ni tulis valikkoon valinta 4 harmaasävyä.

Kuvahan ei ole mikään laadunriemuvoitto, mutta toimiipahan ilman skägää.

edit:
nonii, tietysti vielä välillä tulee skägää, varsinkin tekstityksien kohdalle. täytynee jatkaa summamutikassatestailua.

edit2:
sovitaan sitten että kukaan ei ota mallia mistään koodista, mitä tässä viestissä näkyy (varmaan malliesimerkkejä että "ei näin").
Muutetaan tilanne 3:ksi harmaasävyksi (eli ton rivin tilalle missä lukee että "LISÄÄ TÄMÄ RIVI TÄNNE"). Yhtään skägää ei oo nyt näkyny:
if(value < 0x3f) value = 0; else
if(value < 0x3f*2) value = 64; else
value = 128;

sitten kommentoi rivi (eli kaksi kauttaviivaa alkuun):
// value = value & 0xF0;

edit3:
Ei tajuu. Mut ei se mitään.
Tälläsen näkösellä jutulla käytössä on samat värit (3 harmaasävyä + läpinäkyvä(jota ei tässä käytetä)) kun subtitles pluginilla dxr3-yhteensopivuusominaisuudella:
---------------------------------------------------------
for (int x = 0; x < m_Width; x++)
{
value = outputImage[y * m_Width + x];
// value = value & 0xF0;
if(value < 0x55) value = 0xff000000; else
if(value < 0x55*2) value = 0xff808080; else
value = 0xffffffff;
// value = m_AlphaBase | (value << 16) | (value <<8>DrawPixel(x, y + (m_Height - height) / 2, value);
}
-----------------------------------------------------------

Mulla on jotenkin semmonen tutina, että tästä sais kuvanlaadullisesti paremmankin. Pari ajatusta:
-Sillon kun kuvassa on "skägää" 8 harmaasävyllä, siinä on silti selvästi enemmän kun 3 harmaasävyä. "Skägä" on varmaan jotain purkukortin overlayn kontrollikoodeja tms., jotka olis älyttömän siisti saada selville.
-Nämäkin harmaasävyt riittäis (jopa pelkkä musta ja valkonen), jos sais ditheröinnin jostakin päälle (ties vaikka olis kuinka helppoo, jos vaan tietäs mitä tekis).

Avatar
dj
Yli-ihminen
Viestit: 668
Liittynyt: 22.08.2004 3:00

Viesti Kirjoittaja dj » 13.06.2006 1:16

Hyvää työtä!

Ne OSD:n värit on tosiaan mysteeri mullekkin, esim. jotkut kuvat OSD:ssa toimii vaikka kuudella värillä ja toiset vain kahdella. Ja luulempa että eri korttiversioillakin on merkitystä.

Mun käsittääkseni FFMPEG hoitaa MPEG2 purkamisen. Sitä purkua huudellaan sieltä koodista suoraan tietyllä funktiolla kun ffmpegin headerit on käännösvaiheessa annettu. Olen melko varma, että sen ditheröinnin sais päälle käyttämällä jotain ffmpegin funktiota tai kutsumalla sitä mpeg2funktiota tietyllä tavalla.

Ehkä ymmärsit mitä tarkoitin, olen huono koodamaan mutta itsekin tutkin tota samaa :-)

joukoy
Vanhempi asiantuntija
Viestit: 178
Liittynyt: 11.05.2006 8:46

Viesti Kirjoittaja joukoy » 13.06.2006 7:46

Ei se minulla toimi ollenkaan...
Ihan sama teenkö noita muutoksia vai en, vdr kaatuu heti kun yritän käynnistää osdpipiä.

/var/log/user.log:
Jun 13 07:09:39 vdr1 vdr: [4149] dxr3: cSPUEncoder::Flush: OSD data size: 10830
Jun 13 07:09:40 vdr1 last message repeated 3 times
Jun 13 07:09:40 vdr1 vdr: [4659] osdpip: receiver thread started (pid=4149)
Jun 13 07:09:40 vdr1 vdr: [4660] osdpip: decoder thread started (pid = 4149)
Jun 13 07:09:43 vdr1 runvdr: restarting VDR
Jun 13 07:10:00 vdr1 vdr: [4804] VDR version 1.4.0 started
Jun 13 07:10:00 vdr1 vdr: [4804] loading plugin: /usr/lib/vdr/plugins/libvdr-dxr3.so.1.4.0

kurg
Vanhempi asiantuntija
Viestit: 175
Liittynyt: 13.04.2006 17:17

Viesti Kirjoittaja kurg » 13.06.2006 13:46

joukoy kirjoitti:Ei se minulla toimi ollenkaan...
Ihan sama teenkö noita muutoksia vai en, vdr kaatuu heti kun yritän käynnistää osdpipiä.

/var/log/user.log:
Jun 13 07:09:39 vdr1 vdr: [4149] dxr3: cSPUEncoder::Flush: OSD data size: 10830
Jun 13 07:09:40 vdr1 last message repeated 3 times
Jun 13 07:09:40 vdr1 vdr: [4659] osdpip: receiver thread started (pid=4149)
Jun 13 07:09:40 vdr1 vdr: [4660] osdpip: decoder thread started (pid = 4149)
Jun 13 07:09:43 vdr1 runvdr: restarting VDR
Jun 13 07:10:00 vdr1 vdr: [4804] VDR version 1.4.0 started
Jun 13 07:10:00 vdr1 vdr: [4804] loading plugin: /usr/lib/vdr/plugins/libvdr-dxr3.so.1.4.0
Toi on jotain muuta juttua. Ei luultavasti liity tähän värihommaan. Ehkä.
Mulla käytössä vdr 1.4.1, osdpip 0.0.8 ja osdpip-0.0.8.patch, dxr3-0.2.6 ja toimii. Onko varma, että asetuksista on laitettu 16 harmaasävyä ja pieni kuva (jos liittyy johonkin että tulee liian paljon muistia vievä overlay).

joukoy
Vanhempi asiantuntija
Viestit: 178
Liittynyt: 11.05.2006 8:46

Viesti Kirjoittaja joukoy » 13.06.2006 16:26

kurg kirjoitti: Toi on jotain muuta juttua. Ei luultavasti liity tähän värihommaan. Ehkä.
Mulla käytössä vdr 1.4.1, osdpip 0.0.8 ja osdpip-0.0.8.patch, dxr3-0.2.6 ja toimii. Onko varma, että asetuksista on laitettu 16 harmaasävyä ja pieni kuva (jos liittyy johonkin että tulee liian paljon muistia vievä overlay).
Oli/on 16 harmaasävyä.
Kuva oli säädetty isoksi, mutta ei auttanut vaikka säädin pieneksi.
Joskus olen kokeillut e-tobin binaarilla tuota pluginia ja silloin se toimi muuten, mutta kuva "levisi" osittain koko ruudun levyiseksi.
Itse käännetynä en saa pelaamaan. Jotain häikkää käännöksessä?

kurg
Vanhempi asiantuntija
Viestit: 175
Liittynyt: 13.04.2006 17:17

Viesti Kirjoittaja kurg » 13.06.2006 18:26

joukoy kirjoitti: Joskus olen kokeillut e-tobin binaarilla tuota pluginia ja silloin se toimi muuten, mutta kuva "levisi" osittain koko ruudun levyiseksi.
Tää on se ongelma, minkä kanssa painin.

kurg
Vanhempi asiantuntija
Viestit: 175
Liittynyt: 13.04.2006 17:17

Viesti Kirjoittaja kurg » 13.06.2006 20:56

[b]edit4:[/b]
Todella monen mielestä googlen mukaan värejä saa 4, joista yksi on läpinäkyvä.

Mahdollisiin prosessorikuormitusongelmiin huomasin että auttaa, kun laittaa "Hylkää kehyksiä: 1 kehys". Itselläni oli prossakuormitus 97% ja sitten ton jälkeen tippu 4%:aan, ilman näkyvää nopeuden tippumista.

Tässä uusi versio. 1 pikselin ditheröinti:

for (int x = 0; x < m_Width; x++)
{
value = outputImage[y * m_Width + x];
// value = value & 0xF0;

c1 = value & 0xff; c1 = c1+e;
if(c1<0x55) c2=0xff000000; else if(c1<0x55*2) c2=0xff808080; else c2=0xffffffff;
e=c1-(c2&0xff); value=c2;

// value = m_AlphaBase | (value << 16) | (value <<8>DrawPixel(x, y + (m_Height - height) / 2, value);
m_Bitmap->DrawPixel(x, y + (m_Height - height) / 2, value);
}

[b]edit5:[/b]

Gruig!. Floyd-Steinberg ditheröinti tai jotain sinnepäin.
-komposiittina pikkuruutu on melkoista revontulta, mutta ditheröinti aiheuttaa sitä pakosti. selvän saa silti hyvin.
-jotakin haaleita pystyviivoja olis vähän niinkun kuvassa, mutta ne tulee ilmeisesti jostakin skaalauksesta (yhdistettynä ditheröintiin tekee näkyvää jälkeä).

outputImage = decoder.PicResample()->data[0];
int e=0,c1,c2,a;
for (int y = 0; y < height; y++)
for (int x = 0; x < m_Width; x++)
outputImage[y * m_Width + x] = outputImage[y * m_Width + x] & 0xff;

for (int y = 0; y < height-1; y++)
{
for (int x = 0; x < m_Width-1; x++)
{
a = y * m_Width + x;
c1 = outputImage[a];
//if(c1>0xff) c1=0xff; if(c1<0) c1=0x0;
if(c1<0x55) c2=0xff000000; else if(c1<0x55*2) c2=0xff808080; else c2=0xffffffff;
e=c1-(c2&0xff);
outputImage[a+1]+=(int)(e*7>>4);
outputImage[a+m_Width-1]+=(int)(e*3>>4);
outputImage[a+m_Width]+=(int)(e*5>>4);
outputImage[a+m_Width+1]+=(int)(e>>4);
value = c2;

m_Bitmap->DrawPixel(x, y + (m_Height - height) / 2, value);
}
}

Vastaa Viestiin