Dspack - Multimédia keret Delphi - directshow orosz

Dspack - Multimédia keret Delphi - directshow orosz

Ábra. 13. A szerkezet a csomag osztályok DSPack

Természetesen anélkül, hogy egy jó ismerete DirectShow API nehéz felmérni a minőségét és hasznosságát az osztály wrapper. De még mindig próbálja kezelni ezeket osztályokba.

TFilterGraph

Ez az összetevő - a burkolat alatt a menedzser DirectShow szűrőgrafikon és különleges helyet foglal el a DirectShow és DSPack'e. Bármely alkalmazás, amely foglalkozik a DirectShow, biztos, hogy egy ajánlatot, és szűrőgrafikon vezetője. Arra használják, hogy építeni, és grafikon ellenőrzések, valamint hogy ellenőrizzék az időzítés, esemény értesítést, és egyéb szempontok a gráf ellenőrzés.

Amikor az API használatával DirectShow szűrőgrafikon hogy hozzon létre egy menedzsernek szüksége van a telefonálási CoCreateInstance funkciót. valamint az átruházás vagy osztályazonosítójára CLSID_FilterGraph vagy CLSID_FilterGraphNoThread. CLSID_FilterGraph felelős létre egy szűrőgrafikon manager (MGF) közös munkafolyamat (látszólag még, hogy egy ötlet, hogyan kell használni a DirectShow patakok), és CLSID_FilterGraphNoThread - létrehozására IFG alkalmazásáról szóló menet.

alkalmazások jellemzően CLSID_FilterGraph. De mind CLSID_ létrehozásához használt ugyanazt a tárgyat, de egy másik áramlási modellek:

  • CLSID_FilterGraph MGF létrehozásához használt dolgozó patak, amely osztozik minden esetben CLSID_FilterGraph egyetlen folyamatban. Takarmány dispetchereziruet küldött üzenetek szűrők és ellenőrzi az életciklus minden ablak által létrehozott szűrőket.
  • CLSID_FilterGraphNoThread szolgál, hogy egy patak IFG alkalmazásáról. Ha ezt az azonosítónak, a menet, hogy felhívja a CoCreateInstance, kell egy üzenetet hurok. Ellenkező esetben előfordulhat különféle zár (holtpont). Mielőtt leállítaná ezt az áramot, hogy le kell (release) MGF és objektumok grafikon (például a szűrőket, névjegyek, óra, referencia, stb.)

A fentiek alapján úgy tűnik, hogy nincs különösebb ok létrehozásakor használandó MGF CLSID_FilterGraphNoThread.

Azonban TFilterGraph komponens a CLSID_FilterGraphNoThread, ezért nem említi többé.

IFG a következő röviden leírt interfészek. Annak ellenére, hogy sok közülük, nem vagyok lusta írni őket, és azt tanácsolom, hogy ne legyen lusta, és olvassa el ezt a jelet. Ezt követően, akkor lesz sokkal világosabb jogait és kötelességeit szűrőgrafikon vezetője.

Ez az interfész biztosítja módszerek pzvolyayuschie alkalmazás építeni egy szűrőgrafikon. Ez az interfész megvalósítja MGF.Etot felület örökli a IFilterGraph (amely az alapvető műveletek - mint például a hozzáadásával a szűrő grafikon, vagy kapcsolat két érintkezők). és hozzáteszi módszerek létrehozása egy grafikont részleges információkat.

IFG támogatására használták az építőiparban a dinamikus gráf. Ez a felület lehetővé teszi, hogy az alkalmazások és szűrők állítani a grafikon, amely az elhanyagoltság, megállás nélkül, és anélkül, hogy adatvesztés.

Értesíti a szűrőgrafikon menedzserrel események zajlanak a grafikonon. Szűrők használja ezt a felületet, hogy számoljon be eseményeket. Alkalmazások nem használják azt.

Controls streaming szűrőfeltételnek. Minden DirectShow szűrők végre ezt a felületet. Ez biztosítja módszerek kapcsolási állapotok (szünet, start) az aktuális állapot és meg kell határozni a referencia órajel. Az alkalmazások nem okoznak IMediaFilter módszereket. IFG biztosít ezen a felületen. Az alkalmazások hívja a módszerek és e felületen SetSyncSource GetSyncSource beállítására és lekérdezésére a referencia órajel. Az alkalmazások nem hívja más módszerek ezen a felületen, és helyette az örökölt metódusok IMediaControl.Sam IMediaFilter IPersist és IBaseFilter felület örökli, amelyek viszont a IMediaFilter.

Ez tartalmazza módszereket találni a helyét a falon. IMediaSeeking felület alapján a felületen. Írt alkalmazások C / C ++, fel lehet használni helyett inteerfeys IMediaSeeking IMediaPosition. De IMediaSeeking az automatizálás, így írt alkalmazások, például a Visual Basic kell használni IMediaPosition.Etot felületet biztosítunk a MGF és egyéni szűrőket. Pályázatot szerezni egy mutatót a felületet IMediaPosition MGF, nem a szűrőt. IFG forgalmaz eljárás meghívásával minden rendering szűrőket. Fltry rendering terjed hívás upstream a szűrők forrásokból. Ez az eseménysorozat biztosítja szinkronizálása minden potokov.Esli egy raspedelennyh hívás hibát ad vissza, az első hiba MGF visszatér általa kapott. Néhány hívások lehet osztani, és eredményes. Ha azonban legalább egy elosztott hívás visszatér E_NOTIMPL nem, akkor MGF visszatér E_NOTIMPL. Csak akkor, ha az összes forgalmazott hívások visszatért E_NOTIMPL, MGF visszaút E_NOTIMPL.Zamechanie szűrő fejlesztők. Nem kell végrehajtani ezt a felületet. Ehelyett meg kell ismernünk, IMediaSeeking. Ha a szűrő támogatja IMediaSeeking, IFG automatikusan kezeli IMediaPosition felület.

Ez hozza a csapat a sorban feldolgozására azt egy bizonyos ideig. Egy alkalmazás tudja használni, hogy előre a vezérlő parancsokat a gráf (?). Ez az interfész módszerek mintájára eljárás IDispatch :: InvokeAt. A kérelem meghatározza a felület, interfész módszerrel, a paramétereket a módszer és a referencia-időpontban. MGF hozza ezt az információt egy sorban, majd meghívja ezt a módszert a megadott időpontban. Szükséges interfészek kell örökölni IDispatch és kell biztosítani MGF. Ilyen interfészek IMediaControl, IMediaEventEx és IMediaPosition.Posle átmeneti csapatok minden MGF IDefferedCommand visszaad egy pointert a felület. Egy alkalmazás használhatja ezt a felületet, hogy megszünteti vagy modifkatsii csapat.

Regisztrál egy tárgy, mint szolgáltatás.

Ez az interfész feladata megoldására verseny resursy.Filtry rendszer ezt az interfészt használhatja kérni erőforrások lehet használni más tárgyak. Például az audio átalakító (szűrők, amelyek reprodukálják a hangot) használja ezt a felületet a konfliktusok megoldása audio vyvoda.Prilozheniya eszközt, általában, ne használja ezt a felületet.

Ez az interfész segítségével a DirectShow nincs leírva.

Mint látható, sok interfészek. Emiatt úgy tekintjük őket részletesebben csak ha szükséges.

Szükségünk lesz még két interfész: IAMGraphBuilderCallback és IAMFilterGraphCallback. Ezek közül az első egy olyan mechanizmust biztosít visszahívás az építőiparban a grafikonon. Használatához meg kell végrehajtani a technikák alkalmazásával vagy a kliens oldalon. Kérjen IFG a IObjectWithSize felület és hívja a módszer IObjectWithSize :: setSize, átadva a végrehajtásáról ezt a felületet mutató. IFG meghívja a módszerek ezen a felületen az építkezés során a grafikon, amely (interface) biztosít egy ügyfél számára a módosítása céljából építése során a grafikon. A fő alkalmazása ezen a felületen - konfigurálása VMR szűrő csatlakoztatása előtt. Ezt fel lehet használni továbbá elutasításának a használata bizonyos szűrők (például, dekóderek). Spetsifichekie módszerek ezen a felületen - SelectedFilter (hívni az MGF egy szűrő jelölt, de létrehozása előtt a szűrőt) és CreatedFilter (az úgynevezett után MGF létrehoz egy szűrőt, de mielőtt csatlakoztatja). A második interfész - IAMFilterGraphCallback, - továbbá a visszahívás-mechanizmus az építőiparban a grafikon. Ha az építőiparban a grafikon MGF hibaüzenetet kap, amikor megpróbál tenni néhány kapcsolatot, ez az egyetlen módszer, amely UnableToRender felület.

Tehát TFilterGraph osztály utódja TComponent és IAMGraphBuilderCallback interfészek, IAMFilterGraphCallback és IServiceProvider:

TFilterGraph = osztály (TComponent, IAMGraphBuilderCallback, IAMFilterGraphCallback, IServiceProvider)

IFG működhet három mód - gmNormal, gmCapture és gmDVD. Ha gmNormal mód teremt COM-objektum IGraphBuilder (FFilterGraph) alkalmazásával gmCapture - hozzon létre COM-objektumok ICaptureGraphBuilder2 (FCaptureGraph) és IGraphBuilder (FFilterGraph) alkalmazásával gmDVD - COM-objektum IDvdGraphBuilder (FDvdGraph). Nézzük először nézd meg ezeket a kapcsolódási pontokat, majd tovább tanulni az osztály TFilterGraph.

Mint már említettük (lásd a táblázatot biztosított felületeket MGF.), IGraphBuilder örökli IFilterGraph (amely az alapvető műveletek - mint például a hozzáadásával a szűrő grafikon, vagy kapcsolat két érintkezők). és hozzáteszi módszerek létrehozására egy grafikont részinformációval (az egyetlen módszer - Render - automatikusan befejezi a számolást a megadott kimenő érintkező).

COM-objektum „Builder Count capture” (Capture Diagramszerkesztővel) hajtja végre egységes felület - ICaptureGraphBuilder2 (nekem továbbra sem világos, a név eredete - talán helyébe lépett, és kiterjesztette a korábban használt azonos célra ICaptureGraphBuilder Interface), amely módszereket építése gróf leválasztás és más egyéni szűrő grafikonok. Általában a használatát támogató tárgy, amelynek megvannak a maga sajátosságai, de nem hiszem, hogy le kell állítania (Jó lenne megérteni, hogy ez helper-objektum működik, és hogy lehetséges-e, hogy nélküle).

Végül IDvdGraphBuilder használt dolgozni, nyilván, dvd, de ez a téma egy másik beszélgetés, és igyekszem a jövőben a DVD egyáltalán nem említi.

A túlnyomó többsége más módszereket és TFilterGraph osztály tulajdonságait kapcsolódnak az üzenetek feldolgozása által kapott szűrőgrafikon. Nézzük meg, hogy ez hogyan történik (legalábbis annak érdekében, hogy képes legyen rá magukat abban az esetben nem DSPack, hanem közvetlenül a DirectShow API). Tehát TFilterGraph osztály privát-szakaszok találhatók IMediaEventEx interfész (FMediaEventEx tag). Ha aktív szűrőgrafikon manager (a végrehajtás TFilterGraph.SetActive módszer) QueryInterface módszer érvényesíthető IMediaEventEx felület. Most van egy részletesebb interface kapcsolatot, de kezdjük IMediaEvent interfész (IMediaEventEx örökli és bővíti funkciók). Tehát IMediaEvent felület tartalmaz módszerek visszatérő bejelentése események és rakodók felülírni ezeket a bejelentéseket alapértelmezésben MGF. Mint már említettük, a felület által biztosított IFG. Az alkalmazás tudja használni, hogy a reakció a eseményekre a szűrő oszlopon, mint például a végén egy falon vagy a leképezési hiba (rendering). Szűrők események kerülnek a szűrőgrafikon segítségével IMediaEventSink felületen. További információ a bekövetkezett események szűrőgrafikon érdemes egy pillantást a megfelelő szakaszok a Súgó.

IMediaEvent interfész biztosítja a következő módszerek:

Visszaadja a következő esemény értesítést az üzenetsorból.

Visszaadja az eseménykezelő a kézi-reset (kézi visszaállítás esetén) (Ha elfelejtette, vagy nem tudom, mi ez, olvasson tovább MSDN vagy Rihera), amely továbbra is foglalt (jelezte), míg a sorban tartalmaz eseményértesítéseket. MGF tart utasítás-reset esemény, amely tükrözi az állam az üzenet sorban. Ha a sor tartalmazza eseményértesítéseket, esemény, kézi visszaállítás egy forgalmas állapotban. Ha a sor üres, akkor a módszer IMediaEvent :: GetEvent visszaállítja sobytie.Prilozhenie használhatja ezt az eseményt, hogy meghatározza a helyzetét a sorban. Először az úgynevezett GetEventHandle módszer, hogy egy fogantyú eseményeket. Akkor meg kell várni az esemény, riasztani fog, ehhez funkciók, mint a WaitForSingleObject. Akkor meg kell, hogy seduyuschee eseményértesítési a sorból hívja a IMediaEvent :: GetEvent. MGF tartja esemény jelezte állapotban, míg a sor üres; akkor az esemény dobni. Nem szabad zárja a fogantyút az esemény által visszaadott ezzel a módszerrel, mert használják belül szűrőgrafikon. Nem kell használni a fogantyút, miután megjelenése után IFG, mert ebben az esetben ez a fogantyú nem érvényes. (A hiba elkerülése érdekében, akkor két példányban a fogantyút DuplicateHandle kihívás, és ezt a példányt az eredeti helyett Miután a végén egy fogantyú másolattal hogy zárja ..) másik módja alkalmazásának ellenőrzéséről üzenetsort - metódushívással IMediaEventEx :: SetNotifyWindow (ez a későbbiekben még kitérünk).

Várakozás a szűrőgrafikon feldolgozza az összes rendelkezésre álló adat.

Figyelemmel kíséri üzeneteknek azonban nagyobb lesz érdekelt IMediaEventEx interfész, amely örökli IMediaEvent felület és ezen felül van módszereket visszatérő esemény értesítések és kényszerítő üzenet rakodók alapértelmezésben MGF. IMediaEventEx kitágul IMediaEvent felület módszereket, amelyek lehetővé teszik alkalmazás ablakot kap a bekövetkezett eseményekkel kapcsolatban a MGF. Teljes lista specifikus rendszer üzenetek itt lehet megtekinteni. Azt viszont, hogy új módszereket IMediaEventEx. Már csak három:

Visszaadja a kapcsolatot az említett azonosító

Értesíti a szűrőt, hogy kötött vagy balra (?) Gróf filtrov.Kogda MGF hozzáad egy szűrőt a szűrőgrafikon arra kéri ezt a módszert olyan mutatót is. szűrő például nevéhez a második paraméter. Amikor MGF eltávolítja a szűrőt a grafikonon, ez hív ez a módszer, átadva a mutatót a szám értéke nulla. Alkalmazások, ezt a módszert nem szabad hívják. A grafikonon hozzá egy szűrőt kell hívni eljárás AddFilter felület IFilterGraph, ami IFG

Információkat ad a szűrő

Visszaadja egy karakterlánc, amely információkat tartalmaz a gyártó

Ez általában minden akartam mondani IBaseFilter felület, és ennek megfelelően TFilter osztály, mivel az utóbbi felismeri az egyszerű és nyilvánvaló dolgok, amelyeket meg kell nevezni wrapper ezen a felületen. Ha érdekelnek a részletek, a felületek a fent említett, illetve azok módszerei, nézni őket MSDN.

TVideoWindow

IVideoWindow

Amellett, hogy a módszerek örökölt IDispatch, IVideoWindow interfész biztosítja a leírt módszerek daleeiduschey lemez:

Mint látható, IVideoWindow felületen van egy csomó módszert (a részletek megtalálhatók az azonos MSDN'a), amelyek többsége a kristálytiszta értelme, és csak néhány (pl put_FullScreenMode) jellemzi fontos részlet.

VMR Ablaktalan Mode

Itt - VMR Ablaktalan Mode

IVMR WindowlessControl9

IVMRWindowlessControl9 módszerek mellett, amelyek örökölt IUnknown, és azt is előírja, a következő:

VMR tájékoztat arról, hogy a kérelmet kapott egy üzenetet WM_DISPLAYCHANGE.Prilozhenie hívjanak ezt a módszert, ha kap egy ablakot üzenetet a WM_DISPLAYCHANGE, de csak akkor, ha a VMR van egy ablak (ablaktalan) üzemmód

Visszaadja az aktuális méretarány megjelenítési mód

Visszaadja az aktuális szín a határ használt VMR'om

Visszaadja egy másolatot az aktuális képet mutatja VMR'om. A kép visszatér a csomagolt Windows-DIB formátumban. Ez a módszer lehet nevezni bármikor, függetlenül a szűrő állapotát. A hívó felelős megjelenése iránt memória keresztül coTaskMemFree hívást. Ezen funkció használata lassítja a lejátszást

Beállítja a jelenlegi méretarány megjelenítési módot

Videoleképező Filter

Az alábbi táblázat ismerteti a tulajdonságokat a szűrő Videó Megjelenítő:

Kapcsolatos további részleteket a szűrő tulajdonságait működés és a hibakeresés támogatására quartz.dll alkalmazások kell kinéznie MSDN.

Videó Keverés leképező Filter 9

Tulajdonságok, módszerek és interfészek TVideoWindow

Class TCustomContol ott örökös TWinControl, így érthető, hogy TVideoWindow lehetővé teszi, többek között, a munka vele, mint egy ablakot. Azt feltételezzük, hogy az őse minden ez világos, és elsősorban a felületek és IFilter IEvent. Ezek nyilvánították

Azt is fontolóra további kapcsolódási pontok, amelyek fontosak a megértése a kijelző folyamat. Közülük - IVMRSurfaceAllocator, IVMRSurfaceAllocatorNotify, IVMRImagePresenter.

IVMRSurfaceAllocator

Az interfészen IVMRSurfaceAllocator allocator műsorvezető (allocator műsorvezető), adja meg az alapértelmezett szűrő VMR-7. Meg kell végrehajtani plug-in allocator műsorvezető, hogy az alkalmazás biztosítja a szűrő VMR-7. VMR-7 használ módszerek ezen az interfészen izolálására, előállítására és engedje DirectDraw felülete. Alkalmazások nem használják ezt a felületet. A VMR-9 alkalmazunk IVMRSurfaceAllocator9. Amellett, hogy a IUnknown módszerek, IVMRSurfaceAllocator interfész a következő módszerek: