Mercurial > mplayer.hg
changeset 861:c80faaa2c2c1
some updates
author | arpi_esp |
---|---|
date | Thu, 24 May 2001 18:33:51 +0000 |
parents | edc6758694ed |
children | 8a13167660f5 |
files | DOCS/AUTHORS DOCS/TODO DOCS/tech/tech-hun.txt |
diffstat | 3 files changed, 89 insertions(+), 49 deletions(-) [+] |
line wrap: on
line diff
--- a/DOCS/AUTHORS Thu May 24 16:22:18 2001 +0000 +++ b/DOCS/AUTHORS Thu May 24 18:33:51 2001 +0000 @@ -3,6 +3,9 @@ ====================== The MPlayer project: =========================== +NOTE: Do NOT send bugreports, help & feature requests directly to the authors! +===== Read DOCS/BUGREPORTS and subscribe to mplayer-users mailing lists. + Árpád Gereöffy (A'rpi/ESP-team): <arpi@thot.banki.hu> - player code (mpeg stream demultiplexer and avi/asf parser, A-V sync, seek...) - mp3lib, based on mpg123 sources [MP3 audio decoder] @@ -14,7 +17,6 @@ - hacking DivX/Mpeg4 VfW codecs to get YUV output - opendivx decoder speed optimizations (see opendivx/ChangeLog) - OSD & SUB display code -- everything that isn't listed elsewhere Zoltán Ponekker (Pontscho/Fresh!): <pontscho@makacs.poliod.hu> - configure script and Makefiles for easy compile @@ -32,14 +34,15 @@ - another GUI code (is that so..?) Gábor Bérczi (Gabucino): <gabucino@k2.jozsef.kando.hu> -- documentation maintainer, hun-eng translator +- documentation maintainer - documentation hungarian translation - webpage maintainer - testing, codecs quality & speed comparsions - IRC channel #MPlayer operator Szabolcs Berecz: <szabi@inf.elte.hu> -- codecs.conf file, config file and command line parser +- codecs.conf file parser +- config file and command line parser - mga_vid fixes, module option stc. - fbdev support in libvo @@ -79,7 +82,7 @@ Nick Kurshev: <nickols_k@mail.ru> - memcpy optimizations for AMD K7 and Intel Pentium III (fastmemcpy.h) - CDROM tune info -- further 3DNow! optimizations into mp3lib +- further 3DNow! optimizations into mp3lib and libac3 - russian DOCS translation German Gomez Garcia: <german@piraos.com> @@ -123,7 +126,7 @@ - mpg123 author [free mpeg audio player, isn't used directly but in mp3lib] Mark Podlipec: -- xanim author [I'm using its aLaw audio decoder] +- xanim author [I'm using its aLaw+uLaw audio decoder] Jutta Degener and Carsten Bormann: - xa_gsm.c authors [MS-GSM audio codec]
--- a/DOCS/TODO Thu May 24 16:22:18 2001 +0000 +++ b/DOCS/TODO Thu May 24 18:33:51 2001 +0000 @@ -1,27 +1,19 @@ TO DO: ~~~~~~ -Urgent: -- support for more codecs (sample .avi files and .dll needed!) - HELP! -- make a release! -- change to libxmm + +High Priority: +- finish ASF seeking (find next keyframe) - audio playback rate setting [Jelmer Feenstra] +- asterix.avi audio delays after 5-10 mins (bps mode only) - DONE? +- fix x11 driver to work without SHM (for remote playing etc) - further optimizations -They Have Been Around For A Long Time: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -High Priority: -- finish ASF seeking (find next keyframe) -- asterix.avi audio delays after 5-10 mins (bps mode only) -- fix mp3lib to avoid segfault with some damaged .avi files (DONE!?) - Medium Priority: -- seeking support for broken avi files without index chunk (DONE!) -- fix x11 driver to work without SHM (for remote playing etc) - show current frame number [Gabucino] - seek_to_frame and seek_to_index options - audio copy/encoding capability Low Priority: -- fix X4.0.x/DRI OpenGL (doesn't really work, at least mga & tdfx & nvidia) +- fix X4.0.x/DRI OpenGL - DONE? mga works with 4.0.3 - support for MPEG TS (transport streams) - I need sample files! -- integrating the gui? +- integrating the gui? - DONE?
--- a/DOCS/tech/tech-hun.txt Thu May 24 16:22:18 2001 +0000 +++ b/DOCS/tech/tech-hun.txt Thu May 24 18:33:51 2001 +0000 @@ -1,22 +1,14 @@ -[yes, this is hungarian. maybe someone will translate this to russian or -something else...] - Nos, akkor leirom, hogyan is működik ez az egész. -Az ékezetekkel majd lesz valami, nem nagyon vagyok hozzászokva az -ékezetes gépeléshez... - -A program felépítése alapjaiban logikus, de eleg gányul van megirva :) - A fő modulok: -1. streamer.c: ez az input, azaz ez olvassa a filet vagy VCD-t. +1. streamer.c: ez az input layer, azaz ez olvassa a filet, VCD-t vagy stdin-t. amit tudnia kell: megfelelő sectoronkenti bufferelés, seek, skip funkciók, byte-onkénti ill. tetszőleges méretű blockonkénti olvasás. Egy stream (input device/file) leírására a stream_t struktura szolgál. 2. demuxer.c: ez végzi az input szétszedését audio és video csatornákra, - és a kiválasztott csatornák bufferelt package-nkénti olvasását. + és a kiválasztott csatornák bufferelt package-enkénti olvasását. A demuxer.c inkább csak egy framework, ami közös minden input formátumra, és az egyes formátumokhoz (mpeg-es,mpeg-ps, avi, avi-ni, asf) külön parser van, ezek a demux_*.c fileokban vannak. @@ -26,10 +18,14 @@ ez egy darab chunk-ot (avi) vagy packet-et (asf,mpg) tartalmaz. memoriaban ezek lancolt listaban vannak, mivel kulonbozo meretuek. -2.b. demuxer stream, azaz ds. struct: demux_stream_t +2.b. demuxer stream, azaz ds. + struct: demux_stream_t minden egyes csatornahoz (a/v) tartozik egy ilyen. ez tartalmazza a stream-hez tartozo packeteket (lasd. 2.a.) - egyelore demuxer-enkent 2 ilyen lehet, egy a hanghoz es egy a kephez. + egyelore demuxer-enkent 3 ilyen lehet: + - hang (d_audio) + - kep (d_video) + - DVD felirat (d_dvdsub) 2.c. stream header. 2 fele van (egyelore): sh_audio_t es sh_video_t ez tartalmaz minden, a dekodolashoz szukseges parametert, igy az input @@ -47,7 +43,8 @@ Pelda: van egy .asf fileunk, abban 6 db stream, ebbol 1 audio es 5 video. A header beolvasasakor letre fog jonni 6 db sh struct, 1 audio es 5 video. - Amikor elkezdi olvasni a packeteket, az elso talalt audio es video streamet + Amikor elkezdi olvasni a packeteket, az elso talalt audio es video + packethez tartozo streamet kivalasztja, es ezekre allitja be a d_audio es d_video sh pointereit. Igy kesobbiekben mar csak ezeket a streameket olvassa, a tobbit nem. Persze ha az user masik streameket szeretne kivalasztani, akkor @@ -60,15 +57,15 @@ - meghivodik a demuxer.c/demux_read_data(), megkapja melyik ds-bol (audio vagy video), mennyi byteot es hova (memoriacim) szeretnenk beolvasni. ezt hivogatjak gyakorlatilag a codec-ek. - - ez megenzi,hogy az adott ds bufferében van-e valami, ha igen akkor + - ez megnezi,hogy az adott ds bufferében van-e valami, ha igen akkor onnan olvas amennyit kell. ha nincs/nincs eleg, akkor meghivja a ds_fill_buffer()-t ami: - megnezi hogy az adott ds-ben vannak-e bufferelve csomagok (dp-k) ha igen, akkor a legregebbit atrakja a bufferbe es olvas tovabb. ha ures a lancolt lista, akkor meghivja a demux_fill_buffer()-t: - - ez az input formatumnak megfelelo parset meghivja ami olvassa + - ez az input formatumnak megfelelo parser-t meghivja ami olvassa tovabb a filet, es a talalt csomagokat rakja be a megfelelo bufferbe. - na ha mondjuk audio csomagot szeretennk, de csak egy rakat video csomag + na ha mondjuk audio csomagot szeretnenk, de csak egy rakat video csomag van, akkor jon elobb-utobb a DEMUXER: Too many (%d in %d bytes) audio packets in the buffer... hibauzenet. @@ -79,14 +76,30 @@ 3. mplayer.c - igen, o a fonok :) az idozites eleg erdekesen van megoldva, foleg azert mert minden fileformatumnal maskepp kell/celszeru, es neha tobbfele keppen is lehet. + van egy a_frame es egy v_frame nevu float valtozo, ez tarolja az epp lathato/hallhato a/v poziciojat masodpercben. - akkor jelenit meg ujabb video frame-t, ha v_frame<a_frame, es akkor - dekodol tovabb hangot ha a_frame<v_frame. + + A lejatszo ciklus felepitese: + while(not EOF) { + fill audio buffer (read & decode audio) + increase a_frame + read & decode a single video frame + increase v_frame + sleep (wait until a_frame>=v_frame) + display the frame + apply A-V PTS correction to a_frame + check for keys -> pause,seek,... + } + amikor lejatszik (hang/kep) akkor a lejatszott valami idotartamaval - noveli a megfelelo valtozot. videonal ez altalaban 1.0/fps, persze - meg kell jegyeznem hogy videonal nem igazna szamit az fps, asf-nel - pl. nincs is olyan, ahelyett duration van es framenkent valtozhat. + noveli a megfelelo valtozot: + - audional ez a lejatszott byteok / sh_audio->o_bps + megj: i_bps = tomoritett byteok szama egy masodpercnyi hanghoz + o_bps = tomoritetlen byteok szama egy masodpercnyi hanghoz + (ez utobbi == bps*samplerate*channels) + - videonal ez altalaban az sh_video->frametime. + Ez altalaban == 1.0/fps, persze meg kell jegyeznem hogy videonal nem + igazan szamit az fps, asf-nel pl. nincs is olyan, ahelyett duration + van es framenkent valtozhat. mpeg2-nel pedig repeat_count van ami 1-2.5 idotartamban elnyujtja a framet... avi-nal van talan egyedul fix fps, meg mpeg1-nel. @@ -102,14 +115,20 @@ persze ez meg nem minden szinkron ugyben, van meg nemi gaz. pl. az hogy a hangkartya eleg rendesen kesleltet, ezt az mplayernek - korrigalnia kell: ezert kell neki az audio buffer merete. amit a - select()-e tud lemerni amit viszont nem tud minden kartya... - ilyenkor kell a -abs opcioval megadni. + korrigalnia kell! Az osszes audio kesleltetes masodpercben ezek osszege: + - az utolso timestamp (PTS) ota beolvasott byteok: + t1 = d_audio->pts_bytes/sh_audio->i_bps + - Win32/ACM eseten az audio input bufferben tarolt byteok: + t2 = a_in_buffer_len/sh_audio->i_bps + - az audio out bufferben tarolt tomoritetlen byteok: + t3 = a_buffer_len/sh_audio->o_bps + - a hangkartya buffereben (vagy DMA bufferben) tarolt, meg nem + lejatszott byteok: + t4 = get_audio_delay()/sh_audio->o_bps - aztan van olyan gond is, hogy pl. mpegnel nem framenkent van PTS - hanem szektoronkent, ami tartalmazhat 10 framet is de 0.1-et is. - hogy ez ne csessze el az idozitest, atlagoljuk 5 framenkent a - PTS-t es ezt az atlag erteket vesszuk figyelembe korrekcional. + Ezekbol kiszamolhato egeszen pontosan, hogy az epp hallhato hanghoz + milyen PTS tartozik, majd ezt osszevetve a video-hoz tartozo PTS-el + meg is kapjuk az A-V eltereset! avi-nal sem egyszeru az elet. ott a 'hivatalos' idozitesi mod a BPS-alapu, azaz a headerben le van tarolva hany tomoritett audio @@ -125,7 +144,28 @@ ilyen persze 2 is van, az egyik a headerben le is van irva, es nem nagyon hasznlajak :) a masik sehol nincs leirva de hasznaljak, ezt csak merni lehet... - + +3.a. audio playback: + par szo az audio lejatszasrol: + az egeszben nem maga a lejatszas a nehez, hanem: + 1. hogy tudjuk mikor lehet irni a bufferbe, blocking nelkul + 2. hogy tudjuk, mennyit jatszott mar le abbol amit a bufferbe irtunk + Az 1. az audio dekodolashoz kell, valamint hogy a buffert mindig teli + allapotban tudjuk tartani (igy sose fog megakadni a hang). + A 2. pedig a korrekt idoziteshez szukseges, ugyanis nemely hangkartya + akar 3-7 masodpercet is kesleltet, ami azert nem elhanyagolhato! + Ezek megvalositasara az OSS tobbfele lehetoseget is kinal: + - ioctl(SNDCTL_DSP_GETODELAY): megmondja hany lejatszatlan byte + varakozik a hangkartya bufferjeben -> idoziteshez kivallo, + de nem minden driver tamogatja :( + - ioctl(SNDCTL_DSP_GETOSPACE): megmondja mennyit irhatunk a kartya + bufferebe blocking nelkul. ha a driver nem tudja a GETODELAY-t, + akkor ezt hasznalhatjuk arra is, hogy megtudjuk a kesleltetest. + - select(): meg kene mondja, hogy irhatunk-e a kartya bufferebe + blocking nelkul. azt, hogy emnnyit irhatunk, nem mondja meg :( + valamint sok driverrel egyaltalan nem, vagy rosszul mukodik :(( + csak akkor hasznalom, ha egyik fenti ioctl() sem mukodik. + 4. codecek. ezek kulonbozo lib-ek szanaszet mindenfelol. mint pl. libac3, libmpeg2, xa/*, alaw.c, opendivx/*, loader, mp3lib. az mplayer.c hivogatja oket amikor egy egy darab hangot vagy framet @@ -173,6 +213,11 @@ init() - ez hivodik meg a legelso frame kirakasa elott - bufferek foglalasa stb a celja. + van egy flags parameter is (regen fullscreen volt a neve): + 0x01 - fullscreen (-fs) + 0x02 - vidmode switch (-vm) + 0x04 - scaling enabled (-zoom) + 0x08 - flip image (upside-down) draw_slice(): ez planar YV12 kepet rak ki (3 db plane, egy teljes meretu ami a fenyerot (Y) tartalmazza, es 2 negyedakkora, ami a