Patch idea (jollei jo olemassa)

Juttua VDR:n ja VDR pluginien patcheistä

Patch idea (jollei jo olemassa)

ViestiKirjoittaja Zero » 16.03.2010 14:35

Itselläni tulee usein tulee katsottua jotain ohjelmaa pienellä ajansiirrolla niin että tallennus on jo käynnissä ja sitten kun tulen telkkarin ääreen niin mainokset eivät olekaan vielä loppuneet, joten voi ohjelmaa voi alkaa katsoa livenä. Mutta sitten ensimmäisellä mainoskatkolla voisi lähteä jääkaapille, joten painan pausea. Nyt on siis kaksi tallennusta käynnissä samalle ohjelmalle.

Mietin että periaatteessa pausen painaminen voisi tsekata että tallennus on jo käynnissä ko. kanavalta (ja ohjelmalle) joten vdr voisi siirtyä tallenteen toistoon ko. kohdassa ja pausettaa siihen, sen sijaan että tehdään uusi tallenne.

Löytyyköhän valmiina jotain tällaista tai onko joku tutkinut aihetta, onko mahdollista tehdä ilman suuria ongelmia?
Zero
Vanhempi asiantuntija
 
Viestit: 187
Liittynyt: 24.08.2006 12:08
Paikkakunta: Kokkola

ViestiKirjoittaja mal-- » 16.03.2010 15:00

En ole ainakaan törmännyt tuollaiseen patchiin. Kyllä tuon periaatteessa pitäisi olla ihan mahdollinen tehdä kohtuullisella vaivalla. Eli vdr hyppäisi tuossa tapauksessa sitä tallennetta näyttämään ja laittaisi sen pysäytetyksi oikeaan kohtaan. Vilkaisen vaikka lähdekoodista kuinka monimutkaiseksi tuo menisi.
mal--
Isäntä
 
Viestit: 96
Liittynyt: 13.02.2010 10:54

ViestiKirjoittaja phelin » 16.03.2010 15:14

Nopeasti ajateltuna uusi livebuffer-pätsi/plugini voisi täyttää tarpeesi, vaikkei olekaan juuri sitä mitä haet takaa. Se vain ei käsittääkseni ole vielä valmis eikä tekijä ole julkaissut keskeneräistä versiota.

http://www.vdrportal.de/board/thread.php?threadid=91664
Avatar
phelin
Yli-ihminen
 
Viestit: 1256
Liittynyt: 09.02.2005 3:00
Paikkakunta: Helsinki

ViestiKirjoittaja bulldozer » 17.03.2010 17:00

Nimimerkillä "entinen topfield-käyttäjä" voisin kompata tätä toivomusta :)

Lisäisin vielä (samalla nimimerkillä) sellaisen pienemmän toivomuksen, että kun katsotaan viivästettynä meneillään olevaa ohjelmaa, ja esim. mainostauon aikana eteenpäin kelaamalla saadaan live-lähetys kiinni, niin sen sijaan että toisto loppuisi ja palattaisiin sille kanavalle millä oltiin toistoa aloitettaessa jäätäisinkiin kanavalle, jolta tallennettakin katsottiin. (Olipa sekava lause, näinköhän on ymmärrettävissä.... :) )
HTPC: Gigabyte GA-E7AUM-DS2H, Intel E8400, Antec Fusion Remote Silver, 2 * Satelco EasyWatch PCI DVB-C, yaVDR 0.6
bulldozer
Vanhempi harrastaja
 
Viestit: 79
Liittynyt: 02.04.2008 10:43
Paikkakunta: Nokia

ViestiKirjoittaja mal-- » 17.03.2010 22:00

Olen vähän tutkinut lähdekoodia ja saanut aikaiseksi ainakin jossain määrin hyvin toimivan patchin. Ainoa ongelma johon olen välillä törmännyt on että välillä pysäytyksen jälkeen kuvaksi ei ehdi tulla oikea kuva vaan videon alusta kuva. Tätä voisi yrittää estää pidentämällä sleep-aikaa ennen pause-komennon lähettämistä. Tein tuolle vielä valikkoon kohdan "Setup->Recording->Always create new recording on pause", mistä ominaisuus täytyy ottaa käyttöön (oletus on nykyisen vdr:n tapa). Palautetta otetaan vastaan mikäli ilmenee ongelmia, kysymyksiä tai kehitysehdotuksia.

Edit: Virheellinen patch poistettu. Linkki alempana.
Viimeksi muokannut mal-- päivämäärä 18.03.2010 21:21, muokattu yhteensä 1 kerran
mal--
Isäntä
 
Viestit: 96
Liittynyt: 13.02.2010 10:54

ViestiKirjoittaja Zero » 18.03.2010 14:49

Hienoa, pitääpä testata illalla.
Zero
Vanhempi asiantuntija
 
Viestit: 187
Liittynyt: 24.08.2006 12:08
Paikkakunta: Kokkola

ViestiKirjoittaja Zero » 18.03.2010 20:08

Näyttää että foorumi on syönyt patchista jotain oleellista, ainakin tästä puuttuu tavaraa:

Koodi: Valitse kaikki
   VideoDiskSpace(&FreeMB);
   if (FreeMB <MINFREEDISK> NODISKSPACEDELTA) {


Mutta suurempi ongelma on ylempänä:

Koodi: Valitse kaikki
           for (int i = 0; i <MAXRECORDCONTROLS>Timer()->Channel() == t->Channel()) {


Enkä keksinyt ainakaan nyt ihan heti että mitä tuosta puuttuu.

Koodi: Valitse kaikki
menu.c: In static member function 'static bool cRecordControls::Start(cTimer*, bool)':
menu.c:4216: error: 'Timer' cannot be used as a function
menu.c:4216: error: expected ';'  before ')' token
menu.c:4203: warning: unused variable 'LastNoDiskSpaceMessage'
menu.c:4204: warning: unused variable 'FreeMB'
menu.c: At global scope:
menu.c:4224: error: expected constructor, destructor, or type conversion before '(' token
menu.c:4225: error: expected unqualified-id before 'if'
Zero
Vanhempi asiantuntija
 
Viestit: 187
Liittynyt: 24.08.2006 12:08
Paikkakunta: Kokkola

ViestiKirjoittaja mal-- » 18.03.2010 21:00

Selvästi foorumi ei tykkää ottaa vastaan tuota patchia oikein joten laitoin sen näkyviin toisaalle http://users.tkk.fi/mlehtima/vdr-1.7.13-pause-new-recorging-handling.diff. Huomasin myös että tuo nykyinen versio patchista vaatii liemikuutio-patchin, mutta se vaatimus on helppo kiertää tarvittaessa.
mal--
Isäntä
 
Viestit: 96
Liittynyt: 13.02.2010 10:54

ViestiKirjoittaja Zero » 19.03.2010 8:23

Naputtelin patchin 1.6.0-2:een ja pienen ihmettelyn jälkeen (piti tehdä clean vdr:lle ja plugineille, jotta osd toimi kunnolla) sain toimimaan.

Perusjuttu näyttäisi toimivan, mutta en ehtinyt erikoisempia tapauksia tutkia tarkemmin vielä. Ainakin sellainen tuli mieleen että tuo ei taida ottaa huomioon ajastinmarginaaleja. Eli esim. itselläni ajastimet alkavat 1 minuutin aiemmin ja päättyy 10min myöhemmin kuin epg:n tiedoissa on. Joten nyt näytti hyppäävän minuutin taaksepäin kun painoi pausea. Mutta tosiaan en ehtinyt tarkemmin vielä tutkia eilen.
Zero
Vanhempi asiantuntija
 
Viestit: 187
Liittynyt: 24.08.2006 12:08
Paikkakunta: Kokkola

ViestiKirjoittaja mal-- » 19.03.2010 14:06

Olet oikeassa tuon alkuajan vaikutuksesta. En ollut sitä huomannut, koska en itse käytä marginaalia tallennusten alussa. Tarkemmin lähdekoodia katsellessa huomasin, että ajastimissa onkin olemassa kaksi eri funktiota alkuajan selvittämiseen, toinen antaa todellisen ajan ja toinen epg:stä otetun ajan. En ollut huomannut tuota ja käytin väärää funktiota. Funktion vaihtaminen vaatii myös muita muutoksia koodiin, joten teen korjauksen kunhan olen taas kotona.
mal--
Isäntä
 
Viestit: 96
Liittynyt: 13.02.2010 10:54

ViestiKirjoittaja mal-- » 19.03.2010 20:47

Tein patchiin korjauksen alkuajan selvittämiseen ja tein myös patchista version vdr-1.6.0-2:lle. Vaatimuksena on edelleen liemikuutio-patch. Uudet versiot löytyvät osoitteesta http://users.tkk.fi/mlehtima/vdr/patches. Tein myös muutoksen, jonka pitäisi korjata ruudussa näkyvä pysäytyskuva oikeaksi.
mal--
Isäntä
 
Viestit: 96
Liittynyt: 13.02.2010 10:54

ViestiKirjoittaja rofafor » 19.03.2010 21:09

Pari ehdotusta pätsiin, jotta Klaus hyväksyisi sen pienellä nikotuksella:

- pätsin nimi: recorging -> recording
- difftimen voisi konvertoida käyttämään cTimeMs()-luokkaa (kaipaisi vain uuden yksinkertaisen metodin)
- PauseNewIfRecording voitaisiin poistaa ja lisätä tämä toiminto PauseKeyHandling:iin: pauseKeyHandlingTexts[3] = tr("switch to replay mode"); -> "vaihda toistotilaan"
- tämän jälkeen kuvaruutuviesti on turha ja voidaan myöskin poistaa: tr("Channel already recording! Changing to replay recording and pause.")
Avatar
rofafor
Optikkoliikkeen kopiovastaava
 
Viestit: 1365
Liittynyt: 26.03.2004 3:00
Paikkakunta: Internet

ViestiKirjoittaja mal-- » 19.03.2010 22:01

Nimi korjattu (mitenköhän en ole tuota huomannut missään vaiheessa). Periaatteessa difftime:n voisi korvata toisella, mutta onko sille niin suurta tarvetta? Ymmärrän kyllä, että nyt pysäytysaika on vain sekuntin tarkkuudella. Tuosta muuttujan poistamisesta tuli sellainen mieleen, että jos muuttujan poiston jälkeen haluaa pitää vahvistuksen pysäytykselle niin pitäisi tehdä jotain muutoksia muuallekin, ei kuitenkaan kovin suuria (itse asiassa vain yksi ehtolause muuttuu vdr.c:ssä ja tällöin saisi myös halutun vahvistuskysymyksenkin). Itse haluaisin säilyttää mahdollisuuden pysäytyksen vahvistukselle. Muutoin ylimääräisen muuttujan poistaminen ei ole huono ajatus.
mal--
Isäntä
 
Viestit: 96
Liittynyt: 13.02.2010 10:54

ViestiKirjoittaja rofafor » 19.03.2010 22:19

mal-- kirjoitti:Periaatteessa difftime:n voisi korvata toisella, mutta onko sille niin suurta tarvetta?

Jos aiot saada tämän vdr:n kehitysversioon mukaan, niin tuo muutos olisi kiva. Tuota metodia kaipaisi muuallakin.

mal-- kirjoitti:Itse haluaisin säilyttää mahdollisuuden pysäytyksen vahvistukselle.

pauseKeyHandlingTexts[4] = tr("confirm pause and switch to replay mode");
Avatar
rofafor
Optikkoliikkeen kopiovastaava
 
Viestit: 1365
Liittynyt: 26.03.2004 3:00
Paikkakunta: Internet

ViestiKirjoittaja mal-- » 20.03.2010 1:41

Muokkasin patchin 1.7.13-version käyttämään pauseKeyHandling-muuttujaa erillisen muuttujan sijaan, mutta en vielä laittanut muutoksia esille muiden ongelmien takia. Eli tein myös uuden funktion uint64_t cTimeMs::DiffTime(uint64_t time1, uint64_t time0) ja olen ottamassa sitä käyttöön tuossa katselukohdan laskennassa, mutta jokin ei nyt toimi. Jostain syystä cTimeMs::Now() ei palauta järkevää arvoa. Senhän pitäisi palauttaa aika (unix epochista) millisekunteina, mutta saan esim arvon 23637526, joka ei ole ainakaan oikein.
mal--
Isäntä
 
Viestit: 96
Liittynyt: 13.02.2010 10:54

Seuraava

Paluu Patchit

Paikallaolijat

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