[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. amit tudnia kell: megfelelő 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 scatornák bufferelt package-nké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. A hozza tartozo struktura a demuxer_t. osszesen egy demuxer van. 2.a. demuxer stream, azaz ds. struct: demux_stream_t minden egyes csatornahoz (a/v) tartozik egy ilyen. egyelore demuxer-enkent 2 ilyen lehet, egy a hanghoz es egy a kephez. 2.b. demux_packet_t, azaz dp. ez egy darab chunk-ot (avi) vagy packet-et (asf,mpg) tartalmaz. memoriaban ezek lancolt listaban vannak, mivel kulonbozo meretuek. hogy is muxik ez a beolvasosdi? - 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 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 tovabb a filet, es a talalt csomagokat rakja be a megfelelo bufferbe. na ha mondjuk audio csomagot szeretennk, 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. Eddig kb tiszta ugy, ezt akarom majd atrakni kulon lib-be. na nezzuk tovabb: 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