Mplayer má bohužel strašné množství bugů. Někdy dokonce
autoři věděli o možnosti pádu a nic s tím nedělali. Např.
libmpdemux/demux_asf.c, řádek 250:
if(p>=p_end) mp_msg(MSGT_DEMUX,MSGL_V,"Warning! invalid packet 1, sig11 coming soon...\n");
Pokud si mplayer slinkujete s Electric Fence, tak bude na
mnohých souborech padat (např. MOV nebo DivX v ASF), protože
hrabe za konec alokované paměti.
A spoustu drobných obtížností, například nedokáže přehrát
soubor menší než je velikost bufferu zvukové karty. Při
přehrávání delšího audio souboru posledních pár sekund
(velikost bufferu) usekne.
Nevíte někdo o nějakém podobném přehrávači, který by běžel
na svgalib, byl stejně rychlý jako mplayer a byl napsán
pořádně?
(např. MOV nebo DivX v ASF), .... neni to nahodou problem nektereho binarniho codecu ? Za to autori mplayeru opravdu nemuzou ... myslim, ze nema smysl tristit sily a psat dalsi prehravac, spis to chce vylepsit mplayer. Reportoval jste ty chyby ?
Neni to problem binarnich modulu --- sam jsem ty bugy nasel,
napsal patche, reportoval --- a jsou tam porad. Tak uz na
reportovani autorum mplayeru kaslu a udrzuju si vlastni
patchset.
Kdyby nekdo udelal mplayer fork, kde by tyhle problemy resil,
bylo by to dobre. Ale prostym uzivatelum se mplayer libi, ze
jim to obcas spadne, jim nevadi, takze poradneho programovani
se zde asi nedockame :-/
Tak co ten patchset zverejnit tady na rootovi ? Treba bys mel alespon par uzivatelu :-). Nebo to zkus nahazet do gentoo bugzilly i s tema patchema, treba je pak pridaji do ebuildu.
Fuj to je osklivy diff. Kdyz delas diff ze dvou stromu, je lepsi dat na OBOU make clean. A jak to ze jsou vsechny nazvy souboru uppercase ? Jestli jsi tohle posilal mplayeru, nedivim se ze to zahodili ... takze dobre, aplikovat hned to nebudu, ale az narazim na nejakou z tech chyb zkusim se podivat jesti v tom neni reseni ... ta oprava zvuku je treba kde ?
Uppercase je to, protoze to bylo delano na systemu, co ma
pouze uppercase pismena.
Do mplayeru jsem to posilal rozrezany na kousky a
s lowercase pismenama.
Oprava useknuteho konce audio souboru je v souboru mplayer.c,
- if(d_audio->eof) eof = PT_NEXT_ENTRY;
+ if(d_audio->eof) {
+ if (!audio_out->get_delay()) eof = PT_NEXT_ENTRY;
+ else usec_sleep(100000);
+ }
plus jeste v ao_oss.c: (to zpusobovalo, ze to male soubory
ani nezacalo prehravat)
static int play(void* data,int len,int flags){
- len/=ao_data.outburst;
- len=write(audio_fd,data,len*ao_data.outburst);
+ /*len/=ao_data.outburst;
+ len=write(audio_fd,data,len*ao_data.outburst);*/
+ len=write(audio_fd,data,len);
return len;
}
... a dale je v nem jeste oprava spatne A/V synchronizace,
pokud uz skoncilo dekodovani audia a hraje se pouze
z bufferu. (ktera je ovsem prorostla do dalsi zmeny ---
uvolneni CPU pri prepnuti na jinou konzoli) --- Na to mam
jeste puvodni patch, ktery jsem jim tam posilal --- vypada
takhle:
time_frame+=frame_time; // for nosound
// check for frame-drop:
current_module="check_framedrop";
- if(sh_audio && !d_audio->eof){
+ if(sh_audio && (!d_audio->eof || audio_out->get_delay())){
float delay=playback_speed*audio_out->get_delay();
float d=delay-sh_audio->delay;
// we should avoid dropping to many frames in sequence unless we
Diky, takhle to vypada mnohem lepsi. Jestli mas i dalsi opravy jeste v tech puvodnich rozrezanych patchich (kazda chyba zvlast), mohl bys je sem taky pridat ? Nebo zverejnit jako .tar archiv.
Uz mi spoustu lidi rikalo s patchi na mplayer podobnou zkusenost - ja sam vyvoj mplayeru ted moc nesleduju, ale jak se projevuje to, ze ty patche odmitli? Proste je ignoruji, nebo je odmitnou s nejakymi nesmyslnymi nebo neurcitymi namitkami?
Konec koncu, s forkovanim uz mam nejake zkusenosti... ;-)))
Žádný komentář k tomu nemají --- ani neodpoví. Tři (asi z 10)
patche tam po delší době dali, taky bez komentáře. Jediný
komentář jsem dostal byl k tomu patchi na čtení za konec
mallocované oblasti --- nejde aplikovat na CVS verzi
(že si ty rejecty nemohou vyřešit sami --- navíc je potřeba,
aby to prošel ten člověk, co to rozhraní mezi kodeky
v mplayeru dělal --- je možné, že jsem na něco zapomněl nebo
tam dal naopak něco navíc).