mirror of https://github.com/mpv-player/mpv
updated
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@1485 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
56cb8a2d3a
commit
5a09680795
|
@ -74,11 +74,13 @@ Eddig kb. tiszta
|
||||||
na nézzuk tovább:
|
na nézzuk tovább:
|
||||||
|
|
||||||
3. mplayer.c - igen, ő a főnök :)
|
3. mplayer.c - igen, ő a főnök :)
|
||||||
az időzítes élég érdekesen van megoldva, főleg azért mert minden file-
|
|
||||||
formátumnál másképp kell/célszerű, és néha többféle képpen is lehet.
|
|
||||||
|
|
||||||
van egy a_frame és egy v_frame nevű float változó, ez tárolja az épp
|
Fő feladata a különböző modulok összekapcsolása, illetve az A-V
|
||||||
látható/hallható a/v pozícióját másodpercben.
|
szinkron biztosítása.
|
||||||
|
|
||||||
|
Az adott stream aktuális pozíciója a megfelelo stream header
|
||||||
|
(sh_audio / sh_video) timer field-ben van.
|
||||||
|
(Régen ez volt az a_frame és egy v_frame nevű float változó)
|
||||||
|
|
||||||
A lejátszó ciklus felépítése:
|
A lejátszó ciklus felépítése:
|
||||||
while(not EOF) {
|
while(not EOF) {
|
||||||
|
@ -132,19 +134,29 @@ na n
|
||||||
|
|
||||||
Avi-nál sem egyszerű az élet. Ott a 'hivatalos' időzítési mód a
|
Avi-nál sem egyszerű az élet. Ott a 'hivatalos' időzítési mód a
|
||||||
BPS-alapú, azaz a headerben le van tárolva, hány tömörített audio
|
BPS-alapú, azaz a headerben le van tárolva, hány tömörített audio
|
||||||
byte tartozik egy másodpercnyi (fps darab) képhez.
|
byte vagy chunk tartozik egy másodpercnyi (fps darab) képhez.
|
||||||
ez persze nem mindig működik... miért is működne :)
|
Az AVI stream headerben van 2 fontos mezo, a dwSampleSize, es
|
||||||
Ezért én megcsináltam, hogy az mpeg-nél használatos sectoronkénti
|
a dwRate/dwScale aránypár:
|
||||||
PTS értéket emulálom avi-ra is, azaz az AVI parser minden beolvasott
|
- Ha a dwSampleSize 0, akkor VBR stream, tehat nem konstans a
|
||||||
chunk-nál számol egy kamu PTS-t a frame-ek típusa alapján, és ez
|
bitrate. Ilyenkor 1 chunk tarol 1 sample-t, es a masodpercenkenti
|
||||||
alapjan idozitek. És van amikor ez működik jobban.
|
chunkok szamat adja a dwRate/dwScale.
|
||||||
Persze itt még bejátszik az is, hogy AVI-nál általában előre
|
- Ha a dwSampleSize>0, akkor constant bitrate van, es az ido igy
|
||||||
letárolnak egy nagyobb adag hangot, és csak utána kezdődik a kép.
|
szamolhato: time = (bytepos/dwSampleSize) / (dwRate/dwScale)
|
||||||
Ezt persze bele kell számolni a késleltetésbe, ez az Initial PTS delay.
|
(tehat a sample sorszamat elosztjuk a samplerate-el)
|
||||||
Ilyen persze 2 is van, az egyik a headerben le is van írva, és
|
Ilyenkor stream-kent kezelheto az audio, ami tetszolegesen
|
||||||
nem nagyon használják. :) A másik sehol nincs leírva, de használják,
|
chunk-okra van darabolva, de lehet akar 1 db chunk is az egesz.
|
||||||
ezt csak mérni lehet...
|
|
||||||
|
A másik lehetőség csak az interleaved fileoknál használható: a
|
||||||
|
chunk-ok sorrendjéből számolható egy timestamp (PTS) érték.
|
||||||
|
A video chunkok PTS-e egyszerű: chunk száma * fps
|
||||||
|
Az audio pedig az előtte levő video chunk-éval azonos.
|
||||||
|
Ilyenkor viszont szamolni kell az ugynev. "audio preload"-al is,
|
||||||
|
azaz van egy fix kesleltetes az audio es video stream-ek kozott.
|
||||||
|
Ez altalaban 0.5-1.0 sec, de van amikor egeszen mas.
|
||||||
|
A pontos erteket regen mertuk, most a demux_avi.c kezeli le:
|
||||||
|
az elso video utani audio chunknal kiszamolja az A-V elterest,
|
||||||
|
es ezt veszi az audio preload mertekenek.
|
||||||
|
|
||||||
3.a. audio playback:
|
3.a. audio playback:
|
||||||
pár szó az audio lejátszásról:
|
pár szó az audio lejátszásról:
|
||||||
az egészben nem maga a lejátszás a nehéz, hanem:
|
az egészben nem maga a lejátszás a nehéz, hanem:
|
||||||
|
@ -168,18 +180,11 @@ na n
|
||||||
|
|
||||||
4. codecek. ezek különböző lib-ek szanaszét mindenfelől.
|
4. codecek. ezek különböző lib-ek szanaszét mindenfelől.
|
||||||
mint pl. libac3, libmpeg2, xa/*, alaw.c, opendivx/*, loader, mp3lib.
|
mint pl. libac3, libmpeg2, xa/*, alaw.c, opendivx/*, loader, mp3lib.
|
||||||
az mplayer.c hívogatja őket, amikor egy-egy darab hangot vagy frame-et
|
|
||||||
kell lejátszani (lásd 3. pont elején).
|
Az mplayer.c nem kozvetlenul hivja oket, hanem a dec_audio.c es a
|
||||||
ezek pedig hívják a megfelelő demuxert, hogy megkapják a tömörített
|
dec_video.c fileokon keresztul, igy az mplayer.c-nek nem kell semmit
|
||||||
adatokat (lásd 2. pont).
|
sem tudnia a codecrol.
|
||||||
paraméterként a megfelelő stream headert (sh_audio/sh_video) kell
|
|
||||||
átadni, ez elvileg tartalmaz minden infót, ami szükséges a
|
|
||||||
dekódoláshoz (többek között a demuxert is: sh->ds).
|
|
||||||
A codecek szeparálasa folyamatban van, az audio már el van különítve
|
|
||||||
(lásd. dec_audio.c), a videon még dolgozunk. Cél, hogy ne az mplayer.c
|
|
||||||
kelljen tudja, milyen codecek vannak és hogy kell őket használni, hanem
|
|
||||||
egy közös init/decode audio/video functiont kelljen csak meghívnia.
|
|
||||||
|
|
||||||
5. libvo: ez végzi a kép kirakását.
|
5. libvo: ez végzi a kép kirakását.
|
||||||
|
|
||||||
Az img_format.h-ban definiálva vannak konstansok a különböző pixel-
|
Az img_format.h-ban definiálva vannak konstansok a különböző pixel-
|
||||||
|
|
Loading…
Reference in New Issue