|
From: Vaclav S. <vac...@ma...> - 2002-11-06 00:41:00
|
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Ahoj,
* Strucne vcerejsi (vlastne predvcerejsi) schuzka
- - je potreba prepsat vase filtry do OpenVIP frameworku
- - dohodli jsme se, ze rozsirime strukturu ParamInfo o seznam
akceptovanych hodnot. Je-li prazdny, vsechny hodnoty jsou
akceptovany, jinak jsou pripustne jenom hodnoty ze seznamu (zjistili
jsme, ze to s Tondou potrebujeme pro nase pluginy: napr. FlipFilter
potrebuje jako parametr string "direction", ktery muze nabyvat pouze
hodnot "horizontal" a "vertical").
- - logovani chyb: pouzijeme nasledujici zpusob hlaseni chyb: pri chybe
funkce vrati false (resp. chybovy kod), ale blize to nespecifikuje.
Misto toho zapise do logu (nejaky objekt) lidsky citelny popis chyby
(napr. "PNG soubor foo.png ma poskozenou hlavicku."), ktery se
zobrazi uzivateli.
* Problem se zjistovanim parametru z filtru/prechodu:
Soucasne schema (zavola se EnumParams, naplni se hodnoty a zavola se
SetParams) nefunguje v pripade, ze seznam akceptovanych parametru
_zavisi na hodnote nektereho z parametru_. Priklad: resize filtr by
mohl mit jeden boolean parametr "use_filter" a pokud je tento
parametr true, tak by akceptoval string parametr "filtr_name", jinak
ale ne. Realny pripad je filtrovaci modul, ktery akceptuje parametr
"filter" se jmenem filtru, ktery ma aplikovat a pak vlastni parametry
filtru -- ty ale zavisi na tom, jaky filtr se pouzije (jaka je
hodnota parametru "filter")! Zkuste se zamyslet nad nejakym hezkym
API, ktere to vyresi. Dekuji ;)
* Dokumentace UPF
Tondo, rikal jsi, ze je dost strucna -- mas nejake konkretni pozadavky
na to, co opravit/vylepsit/pridat?
* HOWTO pro prepsani filtru do noveho frameworku:
- - v popisu tridy (UPF_DEFINE_CLASS) pouzivejte
UPF_PROPERTY("Description", "Lidsky citelne jmeno filtru")
- - ukazatele ukladejte vzdy do upf::Ptr<T>. Konkretne misto promnenych
typu IVideoFrame* pouzivejte Ptr<IVideoFrame>
- - objekty neni treba mazat pomoci delete (_nesmi_ se to delat). Stara
se o to automaticky Ptr<T> (smaze ho, jenom pokud uz ho nikdo jiny
nepotrebuje).
- - novy object IVideoFrame se nevytvari pomoci IVideoFrame::New(), ale
upf::create<IVideoFrame>();
- - metoda SimpleTransition::DoProcess mela argument "length". Ten uz
tam neni, delka prechodu se nastavuje pomoci SetLength a je dostupna
v promnene m_length. Staci tedy nahradit "length" "m_length".
- - pixelove buffery maji zase jiny typ (bijte me, zaslouzim si to :( --
staci udelat substituci "uint8_t" za "pixel_t". Duvod je ten, ze
uint8_t def. v namespace openvip se tlouklo s ::uint8_t. Misto "const
uint8_t*" muzete take pouzit "PixelBufRO" a misto "uint8_t*"
"PixelBufRW", to je kvuli IDL.
- - v pripade problemu vac...@ma... ;-)
* MS Visual C++
Nasel jsem zpusob, jak znasilnit MSVC, aby generovalo spravny kod pro
sablony tak, jak je prinejmensim ja a Tonda pouzivame ve filtrech.
Pro ty, co nebyli na schuzce: mam-li napr. takovouto sablonu
(vsimnete si, ze Bytes neni v parametrech DoFlip -- pochopitelne,
neni to totiz typ ale konstanta):
template<int Bytes> void DoFlip(const pixel_t *src, pixel_t *dst,
unsigned w, unsigned h, FlipDirection dir)
{
...
}
a pouziji-li ji napr. takto:
if (format =3D=3D FORMAT_RGB24)
DoFlip<3>(src, dst, w, h, m_direction);
else if (format =3D=3D FORMAT_RGB32)
DoFlip<4>(src, dst, w, h, m_direction);
tak se do .obj souboru ulozi kod funkci DoFlip<3> a DoFlip<4> pod
stejnym mangled jmenem a tudiz se v obou pripadech vola stejny kod!
To pochopitelne zpusobi, ze filtr nefunguje jak ma. Zde je reseni:
template<int Bytes> void DoFlip(const pixel_t *src, pixel_t *dst,
unsigned w, unsigned h, FlipDirection dir
MSVC_TEMPLATE_FIX(int,Bytes) )
{
...
}
Vsimnete si, ze chybi carka pred MSVC_TEMPLATE_FIX. Makro musi byt
uvedene pro vsechny argumenty sablony, ktere se nevyskytuji v seznamu
parametru, jeho prvni argument je typ, druhy hodnota (u typovych
parametru sablony napr. NULL). Zde je zbesilejsi priklad pouziti:
template<typename T1, typename T2, int Num>
void Foo(T1 *t1Ptr, int dat // T1 pouzito!
MSVC_TEMPLATE_FIX(T2, NULL)
MSVC_TEMPLATE_FIX(int, Num) )
Uff.
Vasek
- --
PGP key ID: 0x465264C9 (get it from wwwkeys.pgp.net)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.7 (GNU/Linux)
iD8DBQE9yF3pxDYa/UZSZMkRAuE9AJ4k+GRWEDHMzuPg+md29x4QQgF+qACggsq3
KU7G8g3bGEcIDZMk9eJLDmo=3D
=3D62Jp
-----END PGP SIGNATURE-----
|