12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998 |
- /* ************************************************************************** */
- /* * For conditions of distribution and use, * */
- /* * see copyright notice in libmng.h * */
- /* ************************************************************************** */
- /* * * */
- /* * project : libmng * */
- /* * file : libmng_object_prc.c copyright (c) 2000-2007 G.Juyn * */
- /* * version : 1.0.10 * */
- /* * * */
- /* * purpose : Object processing routines (implementation) * */
- /* * * */
- /* * author : G.Juyn * */
- /* * * */
- /* * comment : implementation of the internal object processing routines * */
- /* * * */
- /* * changes : 0.5.1 - 05/08/2000 - G.Juyn * */
- /* * - changed strict-ANSI stuff * */
- /* * 0.5.1 - 05/12/2000 - G.Juyn * */
- /* * - changed trace to macro for callback error-reporting * */
- /* * * */
- /* * 0.5.2 - 05/20/2000 - G.Juyn * */
- /* * - fixed to support JNG objects * */
- /* * 0.5.2 - 05/24/2000 - G.Juyn * */
- /* * - added support for global color-chunks in animation * */
- /* * - added support for global PLTE,tRNS,bKGD in animation * */
- /* * - added SAVE & SEEK animation objects * */
- /* * 0.5.2 - 05/29/2000 - G.Juyn * */
- /* * - added initialization of framenr/layernr/playtime * */
- /* * - changed ani_object create routines not to return the * */
- /* * created object (wasn't necessary) * */
- /* * 0.5.2 - 05/30/2000 - G.Juyn * */
- /* * - added object promotion routine (PROM handling) * */
- /* * - added ani-object routines for delta-image processing * */
- /* * - added compression/filter/interlace fields to * */
- /* * object-buffer for delta-image processing * */
- /* * * */
- /* * 0.5.3 - 06/17/2000 - G.Juyn * */
- /* * - changed support for delta-image processing * */
- /* * 0.5.3 - 06/20/2000 - G.Juyn * */
- /* * - fixed some small things (as precaution) * */
- /* * 0.5.3 - 06/21/2000 - G.Juyn * */
- /* * - added processing of PLTE/tRNS & color-info for * */
- /* * delta-images in the ani_objects chain * */
- /* * 0.5.3 - 06/22/2000 - G.Juyn * */
- /* * - added support for PPLT chunk * */
- /* * * */
- /* * 0.9.1 - 07/07/2000 - G.Juyn * */
- /* * - added support for freeze/restart/resume & go_xxxx * */
- /* * 0.9.1 - 07/16/2000 - G.Juyn * */
- /* * - fixed support for mng_display() after mng_read() * */
- /* * * */
- /* * 0.9.2 - 07/29/2000 - G.Juyn * */
- /* * - fixed small bugs in display processing * */
- /* * 0.9.2 - 08/05/2000 - G.Juyn * */
- /* * - changed file-prefixes * */
- /* * * */
- /* * 0.9.3 - 08/07/2000 - G.Juyn * */
- /* * - B111300 - fixup for improved portability * */
- /* * 0.9.3 - 08/26/2000 - G.Juyn * */
- /* * - added MAGN chunk * */
- /* * 0.9.3 - 09/10/2000 - G.Juyn * */
- /* * - fixed DEFI behavior * */
- /* * 0.9.3 - 10/17/2000 - G.Juyn * */
- /* * - added valid-flag to stored objects for read() / display()* */
- /* * - added routine to discard "invalid" objects * */
- /* * 0.9.3 - 10/18/2000 - G.Juyn * */
- /* * - fixed delta-processing behavior * */
- /* * 0.9.3 - 10/19/2000 - G.Juyn * */
- /* * - added storage for pixel-/alpha-sampledepth for delta's * */
- /* * * */
- /* * 0.9.4 - 1/18/2001 - G.Juyn * */
- /* * - removed "old" MAGN methods 3 & 4 * */
- /* * - added "new" MAGN methods 3, 4 & 5 * */
- /* * * */
- /* * 0.9.5 - 1/22/2001 - G.Juyn * */
- /* * - B129681 - fixed compiler warnings SGI/Irix * */
- /* * * */
- /* * 1.0.2 - 06/23/2001 - G.Juyn * */
- /* * - added optimization option for MNG-video playback * */
- /* * * */
- /* * 1.0.5 - 08/15/2002 - G.Juyn * */
- /* * - completed PROM support * */
- /* * 1.0.5 - 08/16/2002 - G.Juyn * */
- /* * - completed MAGN support (16-bit functions) * */
- /* * 1.0.5 - 08/19/2002 - G.Juyn * */
- /* * - B597134 - libmng pollutes the linker namespace * */
- /* * 1.0.5 - 09/13/2002 - G.Juyn * */
- /* * - fixed read/write of MAGN chunk * */
- /* * 1.0.5 - 09/15/2002 - G.Juyn * */
- /* * - added event handling for dynamic MNG * */
- /* * 1.0.5 - 09/20/2002 - G.Juyn * */
- /* * - added support for PAST * */
- /* * 1.0.5 - 09/23/2002 - G.Juyn * */
- /* * - fixed reset_object_detail to clear old buffer * */
- /* * - added in-memory color-correction of abstract images * */
- /* * 1.0.5 - 10/05/2002 - G.Juyn * */
- /* * - fixed problem with cloned objects marked as invalid * */
- /* * - fixed problem cloning frozen object_buffers * */
- /* * 1.0.5 - 10/07/2002 - G.Juyn * */
- /* * - fixed DISC support * */
- /* * 1.0.5 - 11/04/2002 - G.Juyn * */
- /* * - fixed goframe/golayer/gotime processing * */
- /* * 1.0.5 - 11/07/2002 - G.Juyn * */
- /* * - fixed magnification bug with object 0 * */
- /* * 1.0.5 - 01/19/2003 - G.Juyn * */
- /* * - B664911 - fixed buffer overflow during init * */
- /* * * */
- /* * 1.0.6 - 04/19/2003 - G.Juyn * */
- /* * - fixed problem with infinite loops during readdisplay() * */
- /* * 1.0.6 - 05/25/2003 - G.R-P * */
- /* * - added MNG_SKIPCHUNK_cHNK footprint optimizations * */
- /* * 1.0.6 - 06/09/2003 - G. R-P * */
- /* * - added conditionals around 8-bit magn routines * */
- /* * 1.0.6 - 07/07/2003 - G.R-P * */
- /* * - added conditionals around some JNG-supporting code * */
- /* * - removed conditionals around 8-bit magn routines * */
- /* * - added conditionals around delta-png and 16-bit code * */
- /* * 1.0.6 - 07/14/2003 - G.R-P * */
- /* * - added MNG_NO_LOOP_SIGNALS_SUPPORTED conditional * */
- /* * 1.0.6 - 07/29/2003 - G.Juyn * */
- /* * - fixed invalid test in promote_imageobject * */
- /* * 1.0.6 - 07/29/2003 - G.R-P. * */
- /* * - added conditionals around PAST chunk support * */
- /* * 1.0.6 - 08/17/2003 - G.R-P. * */
- /* * - added conditionals around MAGN chunk support * */
- /* * * */
- /* * 1.0.7 - 03/21/2004 - G.Juyn * */
- /* * - fixed some 64-bit platform compiler warnings * */
- /* * * */
- /* * 1.0.9 - 10/10/2004 - G.R-P. * */
- /* * - added MNG_NO_1_2_4BIT_SUPPORT support * */
- /* * 1.0.9 - 12/05/2004 - G.Juyn * */
- /* * - added conditional MNG_OPTIMIZE_OBJCLEANUP * */
- /* * 1.0.9 - 12/11/2004 - G.Juyn * */
- /* * - added conditional MNG_OPTIMIZE_DISPLAYCALLS * */
- /* * 1.0.9 - 12/31/2004 - G.R-P. * */
- /* * - fixed warnings about possible uninitialized pointers * */
- /* * 1.0.9 - 01/02/2005 - G.Juyn * */
- /* * - fixing some compiler-warnings * */
- /* * * */
- /* * 1.0.10 - 02/07/2005 - G.Juyn * */
- /* * - fixed some compiler-warnings * */
- /* * 1.0.10 - 07/30/2005 - G.Juyn * */
- /* * - fixed problem with CLON object during readdisplay() * */
- /* * 1.0.10 - 04/08/2007 - G.Juyn * */
- /* * - added support for mPNG proposal * */
- /* * 1.0.10 - 04/12/2007 - G.Juyn * */
- /* * - added support for ANG proposal * */
- /* * * */
- /* ************************************************************************** */
- #include "libmng.h"
- #include "libmng_data.h"
- #include "libmng_error.h"
- #include "libmng_trace.h"
- #ifdef __BORLANDC__
- #pragma hdrstop
- #endif
- #include "libmng_memory.h"
- #include "libmng_chunks.h"
- #include "libmng_objects.h"
- #include "libmng_display.h"
- #include "libmng_pixels.h"
- #include "libmng_object_prc.h"
- #include "libmng_cms.h"
- #if defined(__BORLANDC__) && defined(MNG_STRICT_ANSI)
- #pragma option -A /* force ANSI-C */
- #endif
- /* ************************************************************************** */
- #ifdef MNG_INCLUDE_DISPLAY_PROCS
- /* ************************************************************************** */
- /* * * */
- /* * Generic object routines * */
- /* * * */
- /* ************************************************************************** */
- mng_retcode mng_drop_invalid_objects (mng_datap pData)
- {
- mng_objectp pObject;
- mng_objectp pNext;
- mng_cleanupobject fCleanup;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_DROP_INVALID_OBJECTS, MNG_LC_START);
- #endif
- pObject = pData->pFirstimgobj; /* get first stored image-object (if any) */
- while (pObject) /* more objects to check ? */
- {
- pNext = ((mng_object_headerp)pObject)->pNext;
- /* invalid ? */
- if (!((mng_imagep)pObject)->bValid)
- { /* call appropriate cleanup */
- fCleanup = ((mng_object_headerp)pObject)->fCleanup;
- fCleanup (pData, pObject);
- }
- pObject = pNext; /* neeeext */
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_DROP_INVALID_OBJECTS, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- MNG_LOCAL mng_retcode create_obj_general (mng_datap pData,
- mng_size_t iObjsize,
- mng_cleanupobject fCleanup,
- mng_processobject fProcess,
- mng_ptr *ppObject)
- {
- mng_object_headerp pWork;
- MNG_ALLOC (pData, pWork, iObjsize);
- pWork->fCleanup = fCleanup;
- pWork->fProcess = fProcess;
- pWork->iObjsize = iObjsize;
- *ppObject = (mng_ptr)pWork;
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- MNG_LOCAL mng_retcode mng_free_obj_general (mng_datap pData,
- mng_objectp pObject)
- {
- MNG_FREEX (pData, pObject, ((mng_object_headerp)pObject)->iObjsize);
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- /* * * */
- /* * Image-data-object routines * */
- /* * * */
- /* * these handle the "object buffer" as defined by the MNG specification * */
- /* * * */
- /* ************************************************************************** */
- mng_retcode mng_create_imagedataobject (mng_datap pData,
- mng_bool bConcrete,
- mng_bool bViewable,
- mng_uint32 iWidth,
- mng_uint32 iHeight,
- mng_uint8 iBitdepth,
- mng_uint8 iColortype,
- mng_uint8 iCompression,
- mng_uint8 iFilter,
- mng_uint8 iInterlace,
- mng_imagedatap *ppObject)
- {
- mng_imagedatap pImagedata;
- mng_uint32 iSamplesize = 0;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_IMGDATAOBJECT, MNG_LC_START);
- #endif
- /* get a buffer */
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- {
- mng_ptr pTemp;
- mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_imagedata),
- (mng_cleanupobject)mng_free_imagedataobject,
- MNG_NULL, &pTemp);
- if (iRetcode)
- return iRetcode;
- pImagedata = (mng_imagedatap)pTemp;
- }
- #else
- MNG_ALLOC (pData, pImagedata, sizeof (mng_imagedata));
- /* fill the appropriate fields */
- pImagedata->sHeader.fCleanup = (mng_cleanupobject)mng_free_imagedataobject;
- pImagedata->sHeader.fProcess = MNG_NULL;
- #endif
- pImagedata->iRefcount = 1;
- pImagedata->bFrozen = MNG_FALSE;
- pImagedata->bConcrete = bConcrete;
- pImagedata->bViewable = bViewable;
- pImagedata->iWidth = iWidth;
- pImagedata->iHeight = iHeight;
- pImagedata->iBitdepth = iBitdepth;
- pImagedata->iColortype = iColortype;
- pImagedata->iCompression = iCompression;
- pImagedata->iFilter = iFilter;
- pImagedata->iInterlace = iInterlace;
- pImagedata->bCorrected = MNG_FALSE;
- pImagedata->iAlphabitdepth = 0;
- pImagedata->iJHDRcompression = 0;
- pImagedata->iJHDRinterlace = 0;
- pImagedata->iPixelsampledepth = iBitdepth;
- pImagedata->iAlphasampledepth = iBitdepth;
- /* determine samplesize from color_type/bit_depth */
- switch (iColortype) /* for < 8-bit samples we just reserve 8 bits */
- {
- case 0 : ; /* gray */
- case 8 : { /* JPEG gray */
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth > 8)
- iSamplesize = 2;
- else
- #endif
- iSamplesize = 1;
- break;
- }
- case 2 : ; /* rgb */
- case 10 : { /* JPEG rgb */
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth > 8)
- iSamplesize = 6;
- else
- #endif
- iSamplesize = 3;
- break;
- }
- case 3 : { /* indexed */
- iSamplesize = 1;
- break;
- }
- case 4 : ; /* gray+alpha */
- case 12 : { /* JPEG gray+alpha */
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth > 8)
- iSamplesize = 4;
- else
- #endif
- iSamplesize = 2;
- break;
- }
- case 6 : ; /* rgb+alpha */
- case 14 : { /* JPEG rgb+alpha */
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth > 8)
- iSamplesize = 8;
- else
- #endif
- iSamplesize = 4;
- break;
- }
- }
- /* make sure we remember all this */
- pImagedata->iSamplesize = iSamplesize;
- pImagedata->iRowsize = iSamplesize * iWidth;
- pImagedata->iImgdatasize = pImagedata->iRowsize * iHeight;
- if (pImagedata->iImgdatasize) /* need a buffer ? */
- { /* so allocate it */
- MNG_ALLOCX (pData, pImagedata->pImgdata, pImagedata->iImgdatasize);
- if (!pImagedata->pImgdata) /* enough memory ? */
- {
- MNG_FREEX (pData, pImagedata, sizeof (mng_imagedata));
- MNG_ERROR (pData, MNG_OUTOFMEMORY);
- }
- }
- /* check global stuff */
- pImagedata->bHasGAMA = pData->bHasglobalGAMA;
- #ifndef MNG_SKIPCHUNK_cHRM
- pImagedata->bHasCHRM = pData->bHasglobalCHRM;
- #endif
- pImagedata->bHasSRGB = pData->bHasglobalSRGB;
- #ifndef MNG_SKIPCHUNK_iCCP
- pImagedata->bHasICCP = pData->bHasglobalICCP;
- #endif
- #ifndef MNG_SKIPCHUNK_bKGD
- pImagedata->bHasBKGD = pData->bHasglobalBKGD;
- #endif
- if (pData->bHasglobalGAMA) /* global gAMA present ? */
- pImagedata->iGamma = pData->iGlobalGamma;
- #ifndef MNG_SKIPCHUNK_cHRM
- if (pData->bHasglobalCHRM) /* global cHRM present ? */
- {
- pImagedata->iWhitepointx = pData->iGlobalWhitepointx;
- pImagedata->iWhitepointy = pData->iGlobalWhitepointy;
- pImagedata->iPrimaryredx = pData->iGlobalPrimaryredx;
- pImagedata->iPrimaryredy = pData->iGlobalPrimaryredy;
- pImagedata->iPrimarygreenx = pData->iGlobalPrimarygreenx;
- pImagedata->iPrimarygreeny = pData->iGlobalPrimarygreeny;
- pImagedata->iPrimarybluex = pData->iGlobalPrimarybluex;
- pImagedata->iPrimarybluey = pData->iGlobalPrimarybluey;
- }
- #endif
- if (pData->bHasglobalSRGB) /* glbal sRGB present ? */
- pImagedata->iRenderingintent = pData->iGlobalRendintent;
- #ifndef MNG_SKIPCHUNK_iCCP
- if (pData->bHasglobalICCP) /* glbal iCCP present ? */
- {
- pImagedata->iProfilesize = pData->iGlobalProfilesize;
- if (pImagedata->iProfilesize)
- {
- MNG_ALLOCX (pData, pImagedata->pProfile, pImagedata->iProfilesize);
- if (!pImagedata->pProfile) /* enough memory ? */
- {
- MNG_FREEX (pData, pImagedata->pImgdata, pImagedata->iImgdatasize);
- MNG_FREEX (pData, pImagedata, sizeof (mng_imagedata));
- MNG_ERROR (pData, MNG_OUTOFMEMORY);
- }
- MNG_COPY (pImagedata->pProfile, pData->pGlobalProfile, pImagedata->iProfilesize);
- }
- }
- #endif
- #ifndef MNG_SKIPCHUNK_bKGD
- if (pData->bHasglobalBKGD) /* global bKGD present ? */
- {
- pImagedata->iBKGDred = pData->iGlobalBKGDred;
- pImagedata->iBKGDgreen = pData->iGlobalBKGDgreen;
- pImagedata->iBKGDblue = pData->iGlobalBKGDblue;
- }
- #endif
- *ppObject = pImagedata; /* return it */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_IMGDATAOBJECT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- mng_retcode mng_free_imagedataobject (mng_datap pData,
- mng_imagedatap pImagedata)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_IMGDATAOBJECT, MNG_LC_START);
- #endif
- if (pImagedata->iRefcount) /* decrease reference count */
- pImagedata->iRefcount--;
- if (!pImagedata->iRefcount) /* reached zero ? */
- {
- #ifndef MNG_SKIPCHUNK_iCCP
- if (pImagedata->iProfilesize) /* stored an iCCP profile ? */
- MNG_FREEX (pData, pImagedata->pProfile, pImagedata->iProfilesize);
- #endif
- if (pImagedata->iImgdatasize) /* sample-buffer present ? */
- MNG_FREEX (pData, pImagedata->pImgdata, pImagedata->iImgdatasize);
- /* drop the buffer */
- MNG_FREEX (pData, pImagedata, sizeof (mng_imagedata));
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_IMGDATAOBJECT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- mng_retcode mng_clone_imagedataobject (mng_datap pData,
- mng_bool bConcrete,
- mng_imagedatap pSource,
- mng_imagedatap *ppClone)
- {
- mng_imagedatap pNewdata;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CLONE_IMGDATAOBJECT, MNG_LC_START);
- #endif
- /* get a buffer */
- MNG_ALLOC (pData, pNewdata, sizeof (mng_imagedata));
- /* blatently copy the original buffer */
- MNG_COPY (pNewdata, pSource, sizeof (mng_imagedata));
- pNewdata->iRefcount = 1; /* only the reference count */
- pNewdata->bConcrete = bConcrete; /* and concrete-flag are different */
- pNewdata->bFrozen = MNG_FALSE;
- if (pNewdata->iImgdatasize) /* sample buffer present ? */
- {
- MNG_ALLOCX (pData, pNewdata->pImgdata, pNewdata->iImgdatasize);
- if (!pNewdata->pImgdata) /* not enough memory ? */
- {
- MNG_FREEX (pData, pNewdata, sizeof (mng_imagedata));
- MNG_ERROR (pData, MNG_OUTOFMEMORY);
- }
- /* make a copy */
- MNG_COPY (pNewdata->pImgdata, pSource->pImgdata, pNewdata->iImgdatasize);
- }
- #ifndef MNG_SKIPCHUNK_iCCP
- if (pNewdata->iProfilesize) /* iCCP profile present ? */
- {
- MNG_ALLOCX (pData, pNewdata->pProfile, pNewdata->iProfilesize);
- if (!pNewdata->pProfile) /* enough memory ? */
- {
- MNG_FREEX (pData, pNewdata, sizeof (mng_imagedata));
- MNG_ERROR (pData, MNG_OUTOFMEMORY);
- }
- /* make a copy */
- MNG_COPY (pNewdata->pProfile, pSource->pProfile, pNewdata->iProfilesize);
- }
- #endif
- *ppClone = pNewdata; /* return the clone */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CLONE_IMGDATAOBJECT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- /* * * */
- /* * Image-object routines * */
- /* * * */
- /* * these handle the "object" as defined by the MNG specification * */
- /* * * */
- /* ************************************************************************** */
- mng_retcode mng_create_imageobject (mng_datap pData,
- mng_uint16 iId,
- mng_bool bConcrete,
- mng_bool bVisible,
- mng_bool bViewable,
- mng_uint32 iWidth,
- mng_uint32 iHeight,
- mng_uint8 iBitdepth,
- mng_uint8 iColortype,
- mng_uint8 iCompression,
- mng_uint8 iFilter,
- mng_uint8 iInterlace,
- mng_int32 iPosx,
- mng_int32 iPosy,
- mng_bool bClipped,
- mng_int32 iClipl,
- mng_int32 iClipr,
- mng_int32 iClipt,
- mng_int32 iClipb,
- mng_imagep *ppObject)
- {
- mng_imagep pImage;
- mng_imagep pPrev, pNext;
- mng_retcode iRetcode;
- mng_imagedatap pImgbuf;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_IMGOBJECT, MNG_LC_START);
- #endif
- /* get a buffer */
- MNG_ALLOC (pData, pImage, sizeof (mng_image));
- /* now get a new "object buffer" */
- iRetcode = mng_create_imagedataobject (pData, bConcrete, bViewable,
- iWidth, iHeight, iBitdepth, iColortype,
- iCompression, iFilter, iInterlace,
- &pImgbuf);
- if (iRetcode) /* on error bail out */
- {
- MNG_FREEX (pData, pImage, sizeof (mng_image));
- return iRetcode;
- }
- /* fill the appropriate fields */
- pImage->sHeader.fCleanup = (mng_cleanupobject)mng_free_imageobject;
- pImage->sHeader.fProcess = MNG_NULL;
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- pImage->sHeader.iObjsize = sizeof (mng_image);
- #endif
- pImage->iId = iId;
- pImage->bFrozen = MNG_FALSE;
- pImage->bVisible = bVisible;
- pImage->bViewable = bViewable;
- pImage->bValid = (mng_bool)((pData->bDisplaying) &&
- ((pData->bRunning) || (pData->bSearching)) &&
- (!pData->bFreezing));
- pImage->iPosx = iPosx;
- pImage->iPosy = iPosy;
- pImage->bClipped = bClipped;
- pImage->iClipl = iClipl;
- pImage->iClipr = iClipr;
- pImage->iClipt = iClipt;
- pImage->iClipb = iClipb;
- #ifndef MNG_SKIPCHUNK_MAGN
- pImage->iMAGN_MethodX = 0;
- pImage->iMAGN_MethodY = 0;
- pImage->iMAGN_MX = 0;
- pImage->iMAGN_MY = 0;
- pImage->iMAGN_ML = 0;
- pImage->iMAGN_MR = 0;
- pImage->iMAGN_MT = 0;
- pImage->iMAGN_MB = 0;
- #endif
- #ifndef MNG_SKIPCHUNK_PAST
- pImage->iPastx = 0;
- pImage->iPasty = 0;
- #endif
- pImage->pImgbuf = pImgbuf;
- if (iId) /* only if not object 0 ! */
- { /* find previous lower object-id */
- pPrev = (mng_imagep)pData->pLastimgobj;
- while ((pPrev) && (pPrev->iId > iId))
- pPrev = (mng_imagep)pPrev->sHeader.pPrev;
- if (pPrev) /* found it ? */
- {
- pImage->sHeader.pPrev = pPrev; /* than link it in place */
- pImage->sHeader.pNext = pPrev->sHeader.pNext;
- pPrev->sHeader.pNext = pImage;
- }
- else /* if not found, it becomes the first ! */
- {
- pImage->sHeader.pNext = pData->pFirstimgobj;
- pData->pFirstimgobj = pImage;
- }
- pNext = (mng_imagep)pImage->sHeader.pNext;
- if (pNext)
- pNext->sHeader.pPrev = pImage;
- else
- pData->pLastimgobj = pImage;
-
- }
- *ppObject = pImage; /* and return the new buffer */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_IMGOBJECT, MNG_LC_END);
- #endif
- return MNG_NOERROR; /* okido */
- }
- /* ************************************************************************** */
- mng_retcode mng_free_imageobject (mng_datap pData,
- mng_imagep pImage)
- {
- mng_retcode iRetcode;
- mng_imagep pPrev = pImage->sHeader.pPrev;
- mng_imagep pNext = pImage->sHeader.pNext;
- mng_imagedatap pImgbuf = pImage->pImgbuf;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_IMGOBJECT, MNG_LC_START);
- #endif
- if (pImage->iId) /* not for object 0 */
- {
- if (pPrev) /* unlink from the list first ! */
- pPrev->sHeader.pNext = pImage->sHeader.pNext;
- else
- pData->pFirstimgobj = pImage->sHeader.pNext;
- if (pNext)
- pNext->sHeader.pPrev = pImage->sHeader.pPrev;
- else
- pData->pLastimgobj = pImage->sHeader.pPrev;
- }
- /* unlink the image-data buffer */
- iRetcode = mng_free_imagedataobject (pData, pImgbuf);
- /* drop its own buffer */
- MNG_FREEX (pData, pImage, sizeof (mng_image));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_IMGOBJECT, MNG_LC_END);
- #endif
- return iRetcode;
- }
- /* ************************************************************************** */
- mng_imagep mng_find_imageobject (mng_datap pData,
- mng_uint16 iId)
- {
- mng_imagep pImage = (mng_imagep)pData->pFirstimgobj;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACEX (pData, MNG_FN_FIND_IMGOBJECT, MNG_LC_START);
- #endif
- /* look up the right id */
- while ((pImage) && (pImage->iId != iId))
- pImage = (mng_imagep)pImage->sHeader.pNext;
- #ifdef MNG_INCLUDE_MPNG_PROPOSAL
- if ((!pImage) && (pData->eImagetype == mng_it_mpng))
- pImage = pData->pObjzero;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACEX (pData, MNG_FN_FIND_IMGOBJECT, MNG_LC_END);
- #endif
- return pImage;
- }
- /* ************************************************************************** */
- mng_retcode mng_clone_imageobject (mng_datap pData,
- mng_uint16 iId,
- mng_bool bPartial,
- mng_bool bVisible,
- mng_bool bAbstract,
- mng_bool bHasloca,
- mng_uint8 iLocationtype,
- mng_int32 iLocationx,
- mng_int32 iLocationy,
- mng_imagep pSource,
- mng_imagep *ppClone)
- {
- mng_imagep pNew;
- mng_imagep pPrev, pNext;
- mng_retcode iRetcode;
- mng_imagedatap pImgbuf;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CLONE_IMGOBJECT, MNG_LC_START);
- #endif
- #ifndef MNG_SKIPCHUNK_MAGN
- if ((pSource->iId) && /* needs magnification ? */
- ((pSource->iMAGN_MethodX) || (pSource->iMAGN_MethodY)))
- {
- iRetcode = mng_magnify_imageobject (pData, pSource);
- if (iRetcode) /* on error bail out */
- return iRetcode;
- }
- #endif
- /* get a buffer */
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- {
- mng_ptr pTemp;
- mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_image),
- (mng_cleanupobject)mng_free_imageobject,
- MNG_NULL, &pTemp);
- if (iRetcode)
- return iRetcode;
- pNew = (mng_imagep)pTemp;
- }
- #else
- MNG_ALLOC (pData, pNew, sizeof (mng_image));
- /* fill or copy the appropriate fields */
- pNew->sHeader.fCleanup = (mng_cleanupobject)mng_free_imageobject;
- pNew->sHeader.fProcess = MNG_NULL;
- #endif
- pNew->iId = iId;
- pNew->bFrozen = MNG_FALSE;
- pNew->bVisible = bVisible;
- pNew->bViewable = pSource->bViewable;
- pNew->bValid = MNG_TRUE;
- if (bHasloca) /* location info available ? */
- {
- if (iLocationtype == 0) /* absolute position ? */
- {
- pNew->iPosx = iLocationx;
- pNew->iPosy = iLocationy;
- }
- else /* relative */
- {
- pNew->iPosx = pSource->iPosx + iLocationx;
- pNew->iPosy = pSource->iPosy + iLocationy;
- }
- }
- else /* copy from source */
- {
- pNew->iPosx = pSource->iPosx;
- pNew->iPosy = pSource->iPosy;
- }
- /* copy clipping info */
- pNew->bClipped = pSource->bClipped;
- pNew->iClipl = pSource->iClipl;
- pNew->iClipr = pSource->iClipr;
- pNew->iClipt = pSource->iClipt;
- pNew->iClipb = pSource->iClipb;
- #ifndef MNG_SKIPCHUNK_MAGN
- /* copy magnification info */
- /* pNew->iMAGN_MethodX = pSource->iMAGN_MethodX; LET'S NOT !!!!!!
- pNew->iMAGN_MethodY = pSource->iMAGN_MethodY;
- pNew->iMAGN_MX = pSource->iMAGN_MX;
- pNew->iMAGN_MY = pSource->iMAGN_MY;
- pNew->iMAGN_ML = pSource->iMAGN_ML;
- pNew->iMAGN_MR = pSource->iMAGN_MR;
- pNew->iMAGN_MT = pSource->iMAGN_MT;
- pNew->iMAGN_MB = pSource->iMAGN_MB; */
- #endif
- #ifndef MNG_SKIPCHUNK_PAST
- pNew->iPastx = 0; /* initialize PAST info */
- pNew->iPasty = 0;
- #endif
- if (iId) /* not for object 0 */
- { /* find previous lower object-id */
- pPrev = (mng_imagep)pData->pLastimgobj;
- while ((pPrev) && (pPrev->iId > iId))
- pPrev = (mng_imagep)pPrev->sHeader.pPrev;
- if (pPrev) /* found it ? */
- {
- pNew->sHeader.pPrev = pPrev; /* than link it in place */
- pNew->sHeader.pNext = pPrev->sHeader.pNext;
- pPrev->sHeader.pNext = pNew;
- }
- else /* if not found, it becomes the first ! */
- {
- pNew->sHeader.pNext = pData->pFirstimgobj;
- pData->pFirstimgobj = pNew;
- }
- pNext = (mng_imagep)pNew->sHeader.pNext;
- if (pNext)
- pNext->sHeader.pPrev = pNew;
- else
- pData->pLastimgobj = pNew;
- }
- if (bPartial) /* partial clone ? */
- {
- pNew->pImgbuf = pSource->pImgbuf; /* use the same object buffer */
- pNew->pImgbuf->iRefcount++; /* and increase the reference count */
- }
- else /* create a full clone ! */
- {
- mng_bool bConcrete = MNG_FALSE; /* it's abstract by default (?) */
- if (!bAbstract) /* determine concreteness from source ? */
- bConcrete = pSource->pImgbuf->bConcrete;
- /* create a full clone ! */
- iRetcode = mng_clone_imagedataobject (pData, bConcrete, pSource->pImgbuf, &pImgbuf);
- if (iRetcode) /* on error bail out */
- {
- MNG_FREEX (pData, pNew, sizeof (mng_image));
- return iRetcode;
- }
- pNew->pImgbuf = pImgbuf; /* and remember it */
- }
- *ppClone = pNew; /* return it */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CLONE_IMGOBJECT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- mng_retcode mng_renum_imageobject (mng_datap pData,
- mng_imagep pSource,
- mng_uint16 iId,
- mng_bool bVisible,
- mng_bool bAbstract,
- mng_bool bHasloca,
- mng_uint8 iLocationtype,
- mng_int32 iLocationx,
- mng_int32 iLocationy)
- {
- mng_imagep pPrev, pNext;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_RENUM_IMGOBJECT, MNG_LC_START);
- #endif
- pSource->bVisible = bVisible; /* store the new visibility */
- if (bHasloca) /* location info available ? */
- {
- if (iLocationtype == 0) /* absolute position ? */
- {
- pSource->iPosx = iLocationx;
- pSource->iPosy = iLocationy;
- }
- else /* relative */
- {
- pSource->iPosx = pSource->iPosx + iLocationx;
- pSource->iPosy = pSource->iPosy + iLocationy;
- }
- }
- if (iId) /* not for object 0 */
- { /* find previous lower object-id */
- pPrev = (mng_imagep)pData->pLastimgobj;
- while ((pPrev) && (pPrev->iId > iId))
- pPrev = (mng_imagep)pPrev->sHeader.pPrev;
- /* different from current ? */
- if (pPrev != (mng_imagep)pSource->sHeader.pPrev)
- {
- if (pSource->sHeader.pPrev) /* unlink from current position !! */
- ((mng_imagep)pSource->sHeader.pPrev)->sHeader.pNext = pSource->sHeader.pNext;
- else
- pData->pFirstimgobj = pSource->sHeader.pNext;
- if (pSource->sHeader.pNext)
- ((mng_imagep)pSource->sHeader.pNext)->sHeader.pPrev = pSource->sHeader.pPrev;
- else
- pData->pLastimgobj = pSource->sHeader.pPrev;
- if (pPrev) /* found the previous ? */
- { /* than link it in place */
- pSource->sHeader.pPrev = pPrev;
- pSource->sHeader.pNext = pPrev->sHeader.pNext;
- pPrev->sHeader.pNext = pSource;
- }
- else /* if not found, it becomes the first ! */
- {
- pSource->sHeader.pNext = pData->pFirstimgobj;
- pData->pFirstimgobj = pSource;
- }
- pNext = (mng_imagep)pSource->sHeader.pNext;
- if (pNext)
- pNext->sHeader.pPrev = pSource;
- else
- pData->pLastimgobj = pSource;
- }
- }
- pSource->iId = iId; /* now set the new id! */
- if (bAbstract) /* force it to abstract ? */
- pSource->pImgbuf->bConcrete = MNG_FALSE;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_RENUM_IMGOBJECT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- mng_retcode mng_reset_object_details (mng_datap pData,
- mng_imagep pImage,
- mng_uint32 iWidth,
- mng_uint32 iHeight,
- mng_uint8 iBitdepth,
- mng_uint8 iColortype,
- mng_uint8 iCompression,
- mng_uint8 iFilter,
- mng_uint8 iInterlace,
- mng_bool bResetall)
- {
- mng_imagedatap pBuf = pImage->pImgbuf;
- mng_uint32 iSamplesize = 0;
- mng_uint32 iRowsize;
- mng_uint32 iImgdatasize;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_RESET_OBJECTDETAILS, MNG_LC_START);
- #endif
- pBuf->iWidth = iWidth; /* set buffer characteristics */
- pBuf->iHeight = iHeight;
- pBuf->iBitdepth = iBitdepth;
- pBuf->iColortype = iColortype;
- pBuf->iCompression = iCompression;
- pBuf->iFilter = iFilter;
- pBuf->iInterlace = iInterlace;
- pBuf->bCorrected = MNG_FALSE;
- pBuf->iAlphabitdepth = 0;
- /* determine samplesize from color_type/bit_depth */
- switch (iColortype) /* for < 8-bit samples we just reserve 8 bits */
- {
- case 0 : ; /* gray */
- case 8 : { /* JPEG gray */
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth > 8)
- iSamplesize = 2;
- else
- #endif
- iSamplesize = 1;
- break;
- }
- case 2 : ; /* rgb */
- case 10 : { /* JPEG rgb */
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth > 8)
- iSamplesize = 6;
- else
- #endif
- iSamplesize = 3;
- break;
- }
- case 3 : { /* indexed */
- iSamplesize = 1;
- break;
- }
- case 4 : ; /* gray+alpha */
- case 12 : { /* JPEG gray+alpha */
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth > 8)
- iSamplesize = 4;
- else
- #endif
- iSamplesize = 2;
- break;
- }
- case 6 : ; /* rgb+alpha */
- case 14 : { /* JPEG rgb+alpha */
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth > 8)
- iSamplesize = 8;
- else
- #endif
- iSamplesize = 4;
- break;
- }
- }
- iRowsize = iSamplesize * iWidth;
- iImgdatasize = iRowsize * iHeight;
- /* buffer size changed ? */
- if (iImgdatasize != pBuf->iImgdatasize)
- { /* drop the old one */
- MNG_FREE (pData, pBuf->pImgdata, pBuf->iImgdatasize);
- if (iImgdatasize) /* allocate new sample-buffer ? */
- MNG_ALLOC (pData, pBuf->pImgdata, iImgdatasize);
- }
- else
- {
- if (iImgdatasize) /* clear old buffer */
- {
- mng_uint8p pTemp = pBuf->pImgdata;
- mng_uint32 iX;
-
- for (iX = 0; iX < (iImgdatasize & (mng_uint32)(~3L)); iX += 4)
- {
- *((mng_uint32p)pTemp) = 0x00000000l;
- pTemp += 4;
- }
- while (pTemp < (pBuf->pImgdata + iImgdatasize))
- {
- *pTemp = 0;
- pTemp++;
- }
- }
- }
- pBuf->iSamplesize = iSamplesize; /* remember new sizes */
- pBuf->iRowsize = iRowsize;
- pBuf->iImgdatasize = iImgdatasize;
- if (!pBuf->iPixelsampledepth) /* set delta sampledepths if empty */
- pBuf->iPixelsampledepth = iBitdepth;
- if (!pBuf->iAlphasampledepth)
- pBuf->iAlphasampledepth = iBitdepth;
- /* dimension set and clipping not ? */
- if ((iWidth) && (iHeight) && (!pImage->bClipped))
- {
- pImage->iClipl = 0; /* set clipping to dimension by default */
- pImage->iClipr = iWidth;
- pImage->iClipt = 0;
- pImage->iClipb = iHeight;
- }
- #ifndef MNG_SKIPCHUNK_MAGN
- if (pImage->iId) /* reset magnification info ? */
- {
- pImage->iMAGN_MethodX = 0;
- pImage->iMAGN_MethodY = 0;
- pImage->iMAGN_MX = 0;
- pImage->iMAGN_MY = 0;
- pImage->iMAGN_ML = 0;
- pImage->iMAGN_MR = 0;
- pImage->iMAGN_MT = 0;
- pImage->iMAGN_MB = 0;
- }
- #endif
- if (bResetall) /* reset the other characteristics ? */
- {
- #ifndef MNG_SKIPCHUNK_PAST
- pImage->iPastx = 0;
- pImage->iPasty = 0;
- #endif
- pBuf->bHasPLTE = MNG_FALSE;
- pBuf->bHasTRNS = MNG_FALSE;
- pBuf->bHasGAMA = pData->bHasglobalGAMA;
- #ifndef MNG_SKIPCHUNK_cHRM
- pBuf->bHasCHRM = pData->bHasglobalCHRM;
- #endif
- pBuf->bHasSRGB = pData->bHasglobalSRGB;
- #ifndef MNG_SKIPCHUNK_iCCP
- pBuf->bHasICCP = pData->bHasglobalICCP;
- #endif
- #ifndef MNG_SKIPCHUNK_bKGD
- pBuf->bHasBKGD = pData->bHasglobalBKGD;
- #endif
- #ifndef MNG_SKIPCHUNK_iCCP
- if (pBuf->iProfilesize) /* drop possibly old ICC profile */
- {
- MNG_FREE (pData, pBuf->pProfile, pBuf->iProfilesize);
- pBuf->iProfilesize = 0;
- }
- #endif
- if (pData->bHasglobalGAMA) /* global gAMA present ? */
- pBuf->iGamma = pData->iGlobalGamma;
- #ifndef MNG_SKIPCHUNK_cHRM
- if (pData->bHasglobalCHRM) /* global cHRM present ? */
- {
- pBuf->iWhitepointx = pData->iGlobalWhitepointx;
- pBuf->iWhitepointy = pData->iGlobalWhitepointy;
- pBuf->iPrimaryredx = pData->iGlobalPrimaryredx;
- pBuf->iPrimaryredy = pData->iGlobalPrimaryredy;
- pBuf->iPrimarygreenx = pData->iGlobalPrimarygreenx;
- pBuf->iPrimarygreeny = pData->iGlobalPrimarygreeny;
- pBuf->iPrimarybluex = pData->iGlobalPrimarybluex;
- pBuf->iPrimarybluey = pData->iGlobalPrimarybluey;
- }
- #endif
- if (pData->bHasglobalSRGB) /* global sRGB present ? */
- pBuf->iRenderingintent = pData->iGlobalRendintent;
- #ifndef MNG_SKIPCHUNK_iCCP
- if (pData->bHasglobalICCP) /* global iCCP present ? */
- {
- if (pData->iGlobalProfilesize)
- {
- MNG_ALLOC (pData, pBuf->pProfile, pData->iGlobalProfilesize);
- MNG_COPY (pBuf->pProfile, pData->pGlobalProfile, pData->iGlobalProfilesize);
- }
- pBuf->iProfilesize = pData->iGlobalProfilesize;
- }
- #endif
- #ifndef MNG_SKIPCHUNK_bKGD
- if (pData->bHasglobalBKGD) /* global bKGD present ? */
- {
- pBuf->iBKGDred = pData->iGlobalBKGDred;
- pBuf->iBKGDgreen = pData->iGlobalBKGDgreen;
- pBuf->iBKGDblue = pData->iGlobalBKGDblue;
- }
- #endif
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_RESET_OBJECTDETAILS, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- #if !defined(MNG_NO_DELTA_PNG) || !defined(MNG_SKIPCHUNK_PAST) || !defined(MNG_SKIPCHUNK_MAGN)
- mng_retcode mng_promote_imageobject (mng_datap pData,
- mng_imagep pImage,
- mng_uint8 iBitdepth,
- mng_uint8 iColortype,
- mng_uint8 iFilltype)
- {
- mng_retcode iRetcode = MNG_NOERROR;
- mng_imagedatap pBuf = pImage->pImgbuf;
- mng_uint32 iW = pBuf->iWidth;
- mng_uint32 iH = pBuf->iHeight;
- mng_uint8p pNewbuf;
- mng_uint32 iNewbufsize;
- mng_uint32 iNewrowsize;
- mng_uint32 iNewsamplesize = pBuf->iSamplesize;
- mng_uint32 iY;
- mng_uint8 iTempdepth;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROMOTE_IMGOBJECT, MNG_LC_START);
- #endif
- #ifdef MNG_NO_1_2_4BIT_SUPPORT
- if (iBitdepth < 8)
- iBitdepth=8;
- if (pBuf->iBitdepth < 8)
- pBuf->iBitdepth=8;
- #endif
- #ifdef MNG_NO_16BIT_SUPPORT
- if (iBitdepth > 8)
- iBitdepth=8;
- if (pBuf->iBitdepth > 8)
- pBuf->iBitdepth=8;
- #endif
- pData->fPromoterow = MNG_NULL; /* init promotion fields */
- pData->fPromBitdepth = MNG_NULL;
- pData->iPromColortype = iColortype;
- pData->iPromBitdepth = iBitdepth;
- pData->iPromFilltype = iFilltype;
- if (iBitdepth != pBuf->iBitdepth) /* determine bitdepth promotion */
- {
- if (pBuf->iColortype == MNG_COLORTYPE_INDEXED)
- iTempdepth = 8;
- else
- iTempdepth = pBuf->iBitdepth;
- #ifndef MNG_NO_DELTA_PNG
- if (iFilltype == MNG_FILLMETHOD_ZEROFILL)
- {
- switch (iTempdepth)
- {
- #ifndef MNG_NO_1_2_4BIT_SUPPORT
- case 1 : {
- switch (iBitdepth)
- {
- case 2 : { pData->fPromBitdepth = (mng_fptr)mng_promote_zerofill_1_2; break; }
- case 4 : { pData->fPromBitdepth = (mng_fptr)mng_promote_zerofill_1_4; break; }
- case 8 : { pData->fPromBitdepth = (mng_fptr)mng_promote_zerofill_1_8; break; }
- #ifndef MNG_NO_16BIT_SUPPORT
- case 16 : { pData->fPromBitdepth = (mng_fptr)mng_promote_zerofill_1_16; break; }
- #endif
- }
- break;
- }
- case 2 : {
- switch (iBitdepth)
- {
- case 4 : { pData->fPromBitdepth = (mng_fptr)mng_promote_zerofill_2_4; break; }
- case 8 : { pData->fPromBitdepth = (mng_fptr)mng_promote_zerofill_2_8; break; }
- #ifndef MNG_NO_16BIT_SUPPORT
- case 16 : { pData->fPromBitdepth = (mng_fptr)mng_promote_zerofill_2_16; break; }
- #endif
- }
- break;
- }
- case 4 : {
- switch (iBitdepth)
- {
- case 8 : { pData->fPromBitdepth = (mng_fptr)mng_promote_zerofill_4_8; break; }
- #ifndef MNG_NO_16BIT_SUPPORT
- case 16 : { pData->fPromBitdepth = (mng_fptr)mng_promote_zerofill_4_16; break; }
- #endif
- }
- break;
- }
- #endif /* MNG_NO_1_2_4BIT_SUPPORT */
- case 8 : {
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16)
- pData->fPromBitdepth = (mng_fptr)mng_promote_zerofill_8_16;
- #endif
- break;
- }
- }
- }
- else
- #endif
- {
- switch (iTempdepth)
- {
- #ifndef MNG_NO_1_2_4BIT_SUPPORT
- case 1 : {
- switch (iBitdepth)
- {
- case 2 : { pData->fPromBitdepth = (mng_fptr)mng_promote_replicate_1_2; break; }
- case 4 : { pData->fPromBitdepth = (mng_fptr)mng_promote_replicate_1_4; break; }
- case 8 : { pData->fPromBitdepth = (mng_fptr)mng_promote_replicate_1_8; break; }
- #ifndef MNG_NO_16BIT_SUPPORT
- case 16 : { pData->fPromBitdepth = (mng_fptr)mng_promote_replicate_1_16; break; }
- #endif
- }
- break;
- }
- case 2 : {
- switch (iBitdepth)
- {
- case 4 : { pData->fPromBitdepth = (mng_fptr)mng_promote_replicate_2_4; break; }
- case 8 : { pData->fPromBitdepth = (mng_fptr)mng_promote_replicate_2_8; break; }
- #ifndef MNG_NO_16BIT_SUPPORT
- case 16 : { pData->fPromBitdepth = (mng_fptr)mng_promote_replicate_2_16; break; }
- #endif
- }
- break;
- }
- case 4 : {
- switch (iBitdepth)
- {
- case 8 : { pData->fPromBitdepth = (mng_fptr)mng_promote_replicate_4_8; break; }
- #ifndef MNG_NO_16BIT_SUPPORT
- case 16 : { pData->fPromBitdepth = (mng_fptr)mng_promote_replicate_4_16; break; }
- #endif
- }
- break;
- }
- #endif /* MNG_NO_1_2_4BIT_SUPPORT */
- case 8 : {
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16)
- pData->fPromBitdepth = (mng_fptr)mng_promote_replicate_8_16;
- #endif
- break;
- }
- }
- }
- }
- /* g -> g */
- if ((pBuf->iColortype == MNG_COLORTYPE_GRAY) &&
- (iColortype == MNG_COLORTYPE_GRAY))
- {
- if (pBuf->iBitdepth <= 8) /* source <= 8 bits */
- {
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16)
- pData->fPromoterow = (mng_fptr)mng_promote_g8_g16;
- else
- #endif
- pData->fPromoterow = (mng_fptr)mng_promote_g8_g8;
- }
- iNewsamplesize = 1;
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16) /* 16-bit wide ? */
- iNewsamplesize = 2;
- #endif
- }
- else /* g -> ga */
- if ((pBuf->iColortype == MNG_COLORTYPE_GRAY) &&
- (iColortype == MNG_COLORTYPE_GRAYA))
- {
- if (pBuf->iBitdepth <= 8) /* source <= 8 bits */
- {
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16)
- pData->fPromoterow = (mng_fptr)mng_promote_g8_ga16;
- else
- #endif
- pData->fPromoterow = (mng_fptr)mng_promote_g8_ga8;
- }
- #ifndef MNG_NO_16BIT_SUPPORT
- else /* source = 16 bits */
- pData->fPromoterow = (mng_fptr)mng_promote_g16_ga16;
- #endif
- iNewsamplesize = 2;
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16) /* 16-bit wide ? */
- iNewsamplesize = 4;
- #endif
- }
- else /* g -> rgb */
- if ((pBuf->iColortype == MNG_COLORTYPE_GRAY) &&
- (iColortype == MNG_COLORTYPE_RGB))
- {
- if (pBuf->iBitdepth <= 8) /* source <= 8 bits */
- {
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16)
- pData->fPromoterow = (mng_fptr)mng_promote_g8_rgb16;
- else
- #endif
- pData->fPromoterow = (mng_fptr)mng_promote_g8_rgb8;
- }
- #ifndef MNG_NO_16BIT_SUPPORT
- else /* source = 16 bits */
- pData->fPromoterow = (mng_fptr)mng_promote_g16_rgb16;
- #endif
- iNewsamplesize = 3;
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16) /* 16-bit wide ? */
- iNewsamplesize = 6;
- #endif
- }
- else /* g -> rgba */
- if ((pBuf->iColortype == MNG_COLORTYPE_GRAY) &&
- (iColortype == MNG_COLORTYPE_RGBA))
- {
- if (pBuf->iBitdepth <= 8) /* source <= 8 bits */
- {
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16)
- pData->fPromoterow = (mng_fptr)mng_promote_g8_rgba16;
- else
- #endif
- pData->fPromoterow = (mng_fptr)mng_promote_g8_rgba8;
- }
- #ifndef MNG_NO_16BIT_SUPPORT
- else /* source = 16 bits */
- pData->fPromoterow = (mng_fptr)mng_promote_g16_rgba16;
- #endif
- iNewsamplesize = 4;
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16) /* 16-bit wide ? */
- iNewsamplesize = 8;
- #endif
- }
- else /* ga -> ga */
- if ((pBuf->iColortype == MNG_COLORTYPE_GRAYA) &&
- (iColortype == MNG_COLORTYPE_GRAYA))
- {
- iNewsamplesize = 2;
- #ifndef MNG_NO_16BIT_SUPPORT
- if (pBuf->iBitdepth <= 8) /* source <= 8 bits */
- if (iBitdepth == 16)
- pData->fPromoterow = (mng_fptr)mng_promote_ga8_ga16;
- if (iBitdepth == 16)
- iNewsamplesize = 4;
- #endif
- }
- else /* ga -> rgba */
- if ((pBuf->iColortype == MNG_COLORTYPE_GRAYA) &&
- (iColortype == MNG_COLORTYPE_RGBA))
- {
- if (pBuf->iBitdepth <= 8) /* source <= 8 bits */
- {
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16)
- pData->fPromoterow = (mng_fptr)mng_promote_ga8_rgba16;
- else
- #endif
- pData->fPromoterow = (mng_fptr)mng_promote_ga8_rgba8;
- }
- #ifndef MNG_NO_16BIT_SUPPORT
- else /* source = 16 bits */
- pData->fPromoterow = (mng_fptr)mng_promote_ga16_rgba16;
- #endif
- iNewsamplesize = 4;
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16) /* 16-bit wide ? */
- iNewsamplesize = 8;
- #endif
- }
- else /* rgb -> rgb */
- if ((pBuf->iColortype == MNG_COLORTYPE_RGB) &&
- (iColortype == MNG_COLORTYPE_RGB))
- {
- iNewsamplesize = 3;
- #ifndef MNG_NO_16BIT_SUPPORT
- if (pBuf->iBitdepth <= 8) /* source <= 8 bits */
- if (iBitdepth == 16)
- pData->fPromoterow = (mng_fptr)mng_promote_rgb8_rgb16;
- if (iBitdepth == 16)
- iNewsamplesize = 6;
- #endif
- }
- else /* rgb -> rgba */
- if ((pBuf->iColortype == MNG_COLORTYPE_RGB) &&
- (iColortype == MNG_COLORTYPE_RGBA))
- {
- if (pBuf->iBitdepth <= 8) /* source <= 8 bits */
- {
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16)
- pData->fPromoterow = (mng_fptr)mng_promote_rgb8_rgba16;
- else
- #endif
- pData->fPromoterow = (mng_fptr)mng_promote_rgb8_rgba8;
- }
- #ifndef MNG_NO_16BIT_SUPPORT
- else /* source = 16 bits */
- pData->fPromoterow = (mng_fptr)mng_promote_rgb16_rgba16;
- #endif
- iNewsamplesize = 4;
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16) /* 16-bit wide ? */
- iNewsamplesize = 8;
- #endif
- }
- else /* indexed -> rgb */
- if ((pBuf->iColortype == MNG_COLORTYPE_INDEXED) &&
- (iColortype == MNG_COLORTYPE_RGB))
- {
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16)
- pData->fPromoterow = (mng_fptr)mng_promote_idx8_rgb16;
- else
- #endif
- pData->fPromoterow = (mng_fptr)mng_promote_idx8_rgb8;
- iNewsamplesize = 3;
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16) /* 16-bit wide ? */
- iNewsamplesize = 6;
- #endif
- }
- else /* indexed -> rgba */
- if ((pBuf->iColortype == MNG_COLORTYPE_INDEXED) &&
- (iColortype == MNG_COLORTYPE_RGBA))
- {
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16)
- pData->fPromoterow = (mng_fptr)mng_promote_idx8_rgba16;
- else
- #endif
- pData->fPromoterow = (mng_fptr)mng_promote_idx8_rgba8;
- iNewsamplesize = 4;
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16) /* 16-bit wide ? */
- iNewsamplesize = 8;
- #endif
- }
- else /* rgba -> rgba */
- if ((pBuf->iColortype == MNG_COLORTYPE_RGBA) &&
- (iColortype == MNG_COLORTYPE_RGBA))
- {
- iNewsamplesize = 4;
- #ifndef MNG_NO_16BIT_SUPPORT
- if (pBuf->iBitdepth <= 8) /* source <= 8 bits */
- {
- if (iBitdepth == 16)
- pData->fPromoterow = (mng_fptr)mng_promote_rgba8_rgba16;
- }
- if (iBitdepth == 16) /* 16-bit wide ? */
- iNewsamplesize = 8;
- #endif
- }
- #ifdef MNG_INCLUDE_JNG
- else /* JPEG g -> g */
- if ((pBuf->iColortype == MNG_COLORTYPE_JPEGGRAY) &&
- (iColortype == MNG_COLORTYPE_JPEGGRAY))
- {
- if (pBuf->iBitdepth <= 8) /* source <= 8 bits */
- {
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16)
- pData->fPromoterow = (mng_fptr)mng_promote_g8_g16;
- else
- #endif
- pData->fPromoterow = (mng_fptr)mng_promote_g8_g8;
- }
- iNewsamplesize = 1;
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16) /* 16-bit wide ? */
- iNewsamplesize = 2;
- #endif
- }
- else /* JPEG g -> ga */
- if ((pBuf->iColortype == MNG_COLORTYPE_JPEGGRAY) &&
- (iColortype == MNG_COLORTYPE_JPEGGRAYA))
- {
- if (pBuf->iBitdepth <= 8) /* source <= 8 bits */
- {
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16)
- pData->fPromoterow = (mng_fptr)mng_promote_g8_ga16;
- else
- #endif
- pData->fPromoterow = (mng_fptr)mng_promote_g8_ga8;
- }
- #ifndef MNG_NO_16BIT_SUPPORT
- else /* source = 16 bits */
- pData->fPromoterow = (mng_fptr)mng_promote_g16_ga16;
- #endif
- iNewsamplesize = 2;
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16) /* 16-bit wide ? */
- iNewsamplesize = 4;
- #endif
- }
- else /* JPEG g -> rgb */
- if ((pBuf->iColortype == MNG_COLORTYPE_JPEGGRAY) &&
- (iColortype == MNG_COLORTYPE_JPEGCOLOR))
- {
- if (pBuf->iBitdepth <= 8) /* source <= 8 bits */
- {
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16)
- pData->fPromoterow = (mng_fptr)mng_promote_g8_rgb16;
- else
- #endif
- pData->fPromoterow = (mng_fptr)mng_promote_g8_rgb8;
- }
- #ifndef MNG_NO_16BIT_SUPPORT
- else /* source = 16 bits */
- pData->fPromoterow = (mng_fptr)mng_promote_g16_rgb16;
- #endif
- iNewsamplesize = 3;
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16) /* 16-bit wide ? */
- iNewsamplesize = 6;
- #endif
- }
- else /* JPEG g -> rgba */
- if ((pBuf->iColortype == MNG_COLORTYPE_JPEGGRAY) &&
- (iColortype == MNG_COLORTYPE_JPEGCOLORA))
- {
- if (pBuf->iBitdepth <= 8) /* source <= 8 bits */
- {
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16)
- pData->fPromoterow = (mng_fptr)mng_promote_g8_rgba16;
- else
- #endif
- pData->fPromoterow = (mng_fptr)mng_promote_g8_rgba8;
- }
- #ifndef MNG_NO_16BIT_SUPPORT
- else /* source = 16 bits */
- pData->fPromoterow = (mng_fptr)mng_promote_g16_rgba16;
- #endif
- iNewsamplesize = 4;
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16) /* 16-bit wide ? */
- iNewsamplesize = 8;
- #endif
- }
- else /* JPEG ga -> ga */
- if ((pBuf->iColortype == MNG_COLORTYPE_JPEGGRAYA) &&
- (iColortype == MNG_COLORTYPE_JPEGGRAYA))
- {
- iNewsamplesize = 2;
- #ifndef MNG_NO_16BIT_SUPPORT
- if (pBuf->iBitdepth <= 8) /* source <= 8 bits */
- if (iBitdepth == 16)
- pData->fPromoterow = (mng_fptr)mng_promote_ga8_ga16;
- if (iBitdepth == 16)
- iNewsamplesize = 4;
- #endif
- }
- else /* JPEG ga -> rgba */
- if ((pBuf->iColortype == MNG_COLORTYPE_JPEGGRAYA) &&
- (iColortype == MNG_COLORTYPE_JPEGCOLORA))
- {
- if (pBuf->iBitdepth <= 8) /* source <= 8 bits */
- {
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16)
- pData->fPromoterow = (mng_fptr)mng_promote_ga8_rgba16;
- else
- #endif
- pData->fPromoterow = (mng_fptr)mng_promote_ga8_rgba8;
- }
- #ifndef MNG_NO_16BIT_SUPPORT
- else /* source = 16 bits */
- pData->fPromoterow = (mng_fptr)mng_promote_ga16_rgba16;
- #endif
- iNewsamplesize = 4;
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16) /* 16-bit wide ? */
- iNewsamplesize = 8;
- #endif
- }
- else /* JPEG rgb -> rgb */
- if ((pBuf->iColortype == MNG_COLORTYPE_JPEGCOLOR) &&
- (iColortype == MNG_COLORTYPE_JPEGCOLOR))
- {
- iNewsamplesize = 3;
- #ifndef MNG_NO_16BIT_SUPPORT
- if (pBuf->iBitdepth <= 8) /* source <= 8 bits */
- if (iBitdepth == 16)
- pData->fPromoterow = (mng_fptr)mng_promote_rgb8_rgb16;
- if (iBitdepth == 16)
- iNewsamplesize = 6;
- #endif
- }
- else /* JPEG rgb -> rgba */
- if ((pBuf->iColortype == MNG_COLORTYPE_JPEGCOLOR) &&
- (iColortype == MNG_COLORTYPE_JPEGCOLORA))
- {
- if (pBuf->iBitdepth <= 8) /* source <= 8 bits */
- {
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16)
- pData->fPromoterow = (mng_fptr)mng_promote_rgb8_rgba16;
- else
- #endif
- pData->fPromoterow = (mng_fptr)mng_promote_rgb8_rgba8;
- }
- #ifndef MNG_NO_16BIT_SUPPORT
- else /* source = 16 bits */
- pData->fPromoterow = (mng_fptr)mng_promote_rgb16_rgba16;
- #endif
- iNewsamplesize = 4;
- #ifndef MNG_NO_16BIT_SUPPORT
- if (iBitdepth == 16) /* 16-bit wide ? */
- iNewsamplesize = 8;
- #endif
- }
- else /* JPEG rgba -> rgba */
- if ((pBuf->iColortype == MNG_COLORTYPE_JPEGCOLORA) &&
- (iColortype == MNG_COLORTYPE_JPEGCOLORA))
- {
- iNewsamplesize = 4;
- #ifndef MNG_NO_16BIT_SUPPORT
- if (pBuf->iBitdepth <= 8) /* source <= 8 bits */
- if (iBitdepth == 16)
- pData->fPromoterow = (mng_fptr)mng_promote_rgba8_rgba16;
- if (iBitdepth == 16)
- iNewsamplesize = 8;
- #endif
- }
- #endif /* JNG */
- /* found a proper promotion ? */
- if (pData->fPromoterow)
- {
- pData->pPromBuf = (mng_ptr)pBuf;
- pData->iPromWidth = pBuf->iWidth;
- iNewrowsize = iW * iNewsamplesize;
- iNewbufsize = iH * iNewrowsize;
- MNG_ALLOC (pData, pNewbuf, iNewbufsize);
- pData->pPromSrc = (mng_ptr)pBuf->pImgdata;
- pData->pPromDst = (mng_ptr)pNewbuf;
- iY = 0;
- while ((!iRetcode) && (iY < iH))
- {
- iRetcode = ((mng_promoterow)pData->fPromoterow) (pData);
- pData->pPromSrc = (mng_uint8p)pData->pPromSrc + pBuf->iRowsize;
- pData->pPromDst = (mng_uint8p)pData->pPromDst + iNewrowsize;
- /* pData->pPromSrc = (mng_ptr)((mng_uint32)pData->pPromSrc + pBuf->iRowsize); */
- /* pData->pPromDst = (mng_ptr)((mng_uint32)pData->pPromDst + iNewrowsize); */
- iY++;
- }
- MNG_FREEX (pData, pBuf->pImgdata, pBuf->iImgdatasize);
- pBuf->iBitdepth = iBitdepth;
- pBuf->iColortype = iColortype;
- pBuf->iSamplesize = iNewsamplesize;
- pBuf->iRowsize = iNewrowsize;
- pBuf->iImgdatasize = iNewbufsize;
- pBuf->pImgdata = pNewbuf;
- pBuf->bHasPLTE = MNG_FALSE;
- pBuf->iPLTEcount = 0;
- pBuf->bHasTRNS = MNG_FALSE;
- pBuf->iTRNScount = 0;
- if (iRetcode) /* on error bail out */
- return iRetcode;
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROMOTE_IMGOBJECT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_MAGN
- mng_retcode mng_magnify_imageobject (mng_datap pData,
- mng_imagep pImage)
- {
- mng_uint8p pNewdata;
- mng_uint8p pSrcline1;
- mng_uint8p pSrcline2;
- mng_uint8p pTempline;
- mng_uint8p pDstline;
- mng_uint32 iNewrowsize;
- mng_uint32 iNewsize;
- mng_uint32 iY;
- mng_int32 iS, iM;
- mng_retcode iRetcode;
- mng_imagedatap pBuf = pImage->pImgbuf;
- mng_uint32 iNewW = pBuf->iWidth;
- mng_uint32 iNewH = pBuf->iHeight;
- mng_magnify_x fMagnifyX = MNG_NULL;
- mng_magnify_y fMagnifyY = MNG_NULL;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_MAGNIFY_IMGOBJECT, MNG_LC_START);
- #endif
- if (pBuf->iColortype == MNG_COLORTYPE_INDEXED) /* indexed color ? */
- { /* concrete buffer ? */
- if ((pBuf->bConcrete) && (pImage->iId))
- MNG_ERROR (pData, MNG_INVALIDCOLORTYPE);
- #ifndef MNG_OPTIMIZE_FOOTPRINT_MAGN
- if (pBuf->iTRNScount) /* with transparency ? */
- iRetcode = mng_promote_imageobject (pData, pImage, 8, 6, 0);
- else
- iRetcode = mng_promote_imageobject (pData, pImage, 8, 2, 0);
- if (iRetcode) /* on error bail out */
- return iRetcode;
- #endif
- }
- #ifdef MNG_OPTIMIZE_FOOTPRINT_MAGN
- /* Promote everything to RGBA, using fill method 0 (LBR) */
- iRetcode = mng_promote_imageobject (pData, pImage, 8, 6, 0);
- if (iRetcode) /* on error bail out */
- return iRetcode;
- #endif
- if (pImage->iMAGN_MethodX) /* determine new width */
- {
- if (pImage->iMAGN_MethodX == 1)
- {
- iNewW = pImage->iMAGN_ML;
- if (pBuf->iWidth > 1)
- iNewW = iNewW + pImage->iMAGN_MR;
- if (pBuf->iWidth > 2)
- iNewW = iNewW + (pBuf->iWidth - 2) * (pImage->iMAGN_MX);
- }
- else
- {
- iNewW = pBuf->iWidth + pImage->iMAGN_ML - 1;
- if (pBuf->iWidth > 2)
- iNewW = iNewW + pImage->iMAGN_MR - 1;
- if (pBuf->iWidth > 3)
- iNewW = iNewW + (pBuf->iWidth - 3) * (pImage->iMAGN_MX - 1);
- }
- }
- if (pImage->iMAGN_MethodY) /* determine new height */
- {
- if (pImage->iMAGN_MethodY == 1)
- {
- iNewH = pImage->iMAGN_MT;
- if (pBuf->iHeight > 1)
- iNewH = iNewH + pImage->iMAGN_ML;
- if (pBuf->iHeight > 2)
- iNewH = iNewH + (pBuf->iHeight - 2) * (pImage->iMAGN_MY);
- }
- else
- {
- iNewH = pBuf->iHeight + pImage->iMAGN_MT - 1;
- if (pBuf->iHeight > 2)
- iNewH = iNewH + pImage->iMAGN_MB - 1;
- if (pBuf->iHeight > 3)
- iNewH = iNewH + (pBuf->iHeight - 3) * (pImage->iMAGN_MY - 1);
- }
- }
- /* get new buffer */
- iNewrowsize = iNewW * pBuf->iSamplesize;
- iNewsize = iNewH * iNewrowsize;
- MNG_ALLOC (pData, pNewdata, iNewsize);
- switch (pBuf->iColortype) /* determine magnification routines */
- {
- #ifndef MNG_OPTIMIZE_FOOTPRINT_MAGN
- case 0 : ;
- case 8 : {
- if (pBuf->iBitdepth <= 8)
- {
- switch (pImage->iMAGN_MethodX)
- {
- case 1 : { fMagnifyX = mng_magnify_g8_x1; break; }
- case 2 : { fMagnifyX = mng_magnify_g8_x2; break; }
- case 3 : { fMagnifyX = mng_magnify_g8_x3; break; }
- case 4 : { fMagnifyX = mng_magnify_g8_x2; break; }
- case 5 : { fMagnifyX = mng_magnify_g8_x3; break; }
- }
- switch (pImage->iMAGN_MethodY)
- {
- case 1 : { fMagnifyY = mng_magnify_g8_y1; break; }
- case 2 : { fMagnifyY = mng_magnify_g8_y2; break; }
- case 3 : { fMagnifyY = mng_magnify_g8_y3; break; }
- case 4 : { fMagnifyY = mng_magnify_g8_y2; break; }
- case 5 : { fMagnifyY = mng_magnify_g8_y3; break; }
- }
- }
- #ifndef MNG_NO_16BIT_SUPPORT
- else
- {
- switch (pImage->iMAGN_MethodX)
- {
- case 1 : { fMagnifyX = mng_magnify_g16_x1; break; }
- case 2 : { fMagnifyX = mng_magnify_g16_x2; break; }
- case 3 : { fMagnifyX = mng_magnify_g16_x3; break; }
- case 4 : { fMagnifyX = mng_magnify_g16_x2; break; }
- case 5 : { fMagnifyX = mng_magnify_g16_x3; break; }
- }
- switch (pImage->iMAGN_MethodY)
- {
- case 1 : { fMagnifyY = mng_magnify_g16_y1; break; }
- case 2 : { fMagnifyY = mng_magnify_g16_y2; break; }
- case 3 : { fMagnifyY = mng_magnify_g16_y3; break; }
- case 4 : { fMagnifyY = mng_magnify_g16_y2; break; }
- case 5 : { fMagnifyY = mng_magnify_g16_y3; break; }
- }
- }
- #endif
- break;
- }
- case 2 : ;
- case 10 : {
- if (pBuf->iBitdepth <= 8)
- {
- switch (pImage->iMAGN_MethodX)
- {
- case 1 : { fMagnifyX = mng_magnify_rgb8_x1; break; }
- case 2 : { fMagnifyX = mng_magnify_rgb8_x2; break; }
- case 3 : { fMagnifyX = mng_magnify_rgb8_x3; break; }
- case 4 : { fMagnifyX = mng_magnify_rgb8_x2; break; }
- case 5 : { fMagnifyX = mng_magnify_rgb8_x3; break; }
- }
- switch (pImage->iMAGN_MethodY)
- {
- case 1 : { fMagnifyY = mng_magnify_rgb8_y1; break; }
- case 2 : { fMagnifyY = mng_magnify_rgb8_y2; break; }
- case 3 : { fMagnifyY = mng_magnify_rgb8_y3; break; }
- case 4 : { fMagnifyY = mng_magnify_rgb8_y2; break; }
- case 5 : { fMagnifyY = mng_magnify_rgb8_y3; break; }
- }
- }
- #ifndef MNG_NO_16BIT_SUPPORT
- else
- {
- switch (pImage->iMAGN_MethodX)
- {
- case 1 : { fMagnifyX = mng_magnify_rgb16_x1; break; }
- case 2 : { fMagnifyX = mng_magnify_rgb16_x2; break; }
- case 3 : { fMagnifyX = mng_magnify_rgb16_x3; break; }
- case 4 : { fMagnifyX = mng_magnify_rgb16_x2; break; }
- case 5 : { fMagnifyX = mng_magnify_rgb16_x3; break; }
- }
- switch (pImage->iMAGN_MethodY)
- {
- case 1 : { fMagnifyY = mng_magnify_rgb16_y1; break; }
- case 2 : { fMagnifyY = mng_magnify_rgb16_y2; break; }
- case 3 : { fMagnifyY = mng_magnify_rgb16_y3; break; }
- case 4 : { fMagnifyY = mng_magnify_rgb16_y2; break; }
- case 5 : { fMagnifyY = mng_magnify_rgb16_y3; break; }
- }
- }
- #endif
- break;
- }
- case 4 : ;
- case 12 : {
- if (pBuf->iBitdepth <= 8)
- {
- switch (pImage->iMAGN_MethodX)
- {
- case 1 : { fMagnifyX = mng_magnify_ga8_x1; break; }
- case 2 : { fMagnifyX = mng_magnify_ga8_x2; break; }
- case 3 : { fMagnifyX = mng_magnify_ga8_x3; break; }
- case 4 : { fMagnifyX = mng_magnify_ga8_x4; break; }
- case 5 : { fMagnifyX = mng_magnify_ga8_x5; break; }
- }
- switch (pImage->iMAGN_MethodY)
- {
- case 1 : { fMagnifyY = mng_magnify_ga8_y1; break; }
- case 2 : { fMagnifyY = mng_magnify_ga8_y2; break; }
- case 3 : { fMagnifyY = mng_magnify_ga8_y3; break; }
- case 4 : { fMagnifyY = mng_magnify_ga8_y4; break; }
- case 5 : { fMagnifyY = mng_magnify_ga8_y5; break; }
- }
- }
- #ifndef MNG_NO_16BIT_SUPPORT
- else
- {
- switch (pImage->iMAGN_MethodX)
- {
- case 1 : { fMagnifyX = mng_magnify_ga16_x1; break; }
- case 2 : { fMagnifyX = mng_magnify_ga16_x2; break; }
- case 3 : { fMagnifyX = mng_magnify_ga16_x3; break; }
- case 4 : { fMagnifyX = mng_magnify_ga16_x4; break; }
- case 5 : { fMagnifyX = mng_magnify_ga16_x5; break; }
- }
- switch (pImage->iMAGN_MethodY)
- {
- case 1 : { fMagnifyY = mng_magnify_ga16_y1; break; }
- case 2 : { fMagnifyY = mng_magnify_ga16_y2; break; }
- case 3 : { fMagnifyY = mng_magnify_ga16_y3; break; }
- case 4 : { fMagnifyY = mng_magnify_ga16_y4; break; }
- case 5 : { fMagnifyY = mng_magnify_ga16_y5; break; }
- }
- }
- #endif
- break;
- }
- #endif
- case 6 : ;
- case 14 : {
- if (pBuf->iBitdepth <= 8)
- {
- switch (pImage->iMAGN_MethodX)
- {
- case 1 : { fMagnifyX = mng_magnify_rgba8_x1; break; }
- case 2 : { fMagnifyX = mng_magnify_rgba8_x2; break; }
- case 3 : { fMagnifyX = mng_magnify_rgba8_x3; break; }
- case 4 : { fMagnifyX = mng_magnify_rgba8_x4; break; }
- case 5 : { fMagnifyX = mng_magnify_rgba8_x5; break; }
- }
- switch (pImage->iMAGN_MethodY)
- {
- case 1 : { fMagnifyY = mng_magnify_rgba8_y1; break; }
- case 2 : { fMagnifyY = mng_magnify_rgba8_y2; break; }
- case 3 : { fMagnifyY = mng_magnify_rgba8_y3; break; }
- case 4 : { fMagnifyY = mng_magnify_rgba8_y4; break; }
- case 5 : { fMagnifyY = mng_magnify_rgba8_y5; break; }
- }
- }
- #ifndef MNG_NO_16BIT_SUPPORT
- #ifndef MNG_OPTIMIZE_FOOTPRINT_MAGN
- else
- {
- switch (pImage->iMAGN_MethodX)
- {
- case 1 : { fMagnifyX = mng_magnify_rgba16_x1; break; }
- case 2 : { fMagnifyX = mng_magnify_rgba16_x2; break; }
- case 3 : { fMagnifyX = mng_magnify_rgba16_x3; break; }
- case 4 : { fMagnifyX = mng_magnify_rgba16_x4; break; }
- case 5 : { fMagnifyX = mng_magnify_rgba16_x5; break; }
- }
- switch (pImage->iMAGN_MethodY)
- {
- case 1 : { fMagnifyY = mng_magnify_rgba16_y1; break; }
- case 2 : { fMagnifyY = mng_magnify_rgba16_y2; break; }
- case 3 : { fMagnifyY = mng_magnify_rgba16_y3; break; }
- case 4 : { fMagnifyY = mng_magnify_rgba16_y4; break; }
- case 5 : { fMagnifyY = mng_magnify_rgba16_y5; break; }
- }
- }
- #endif
- #endif
- break;
- }
- }
- pSrcline1 = pBuf->pImgdata; /* initialize row-loop variables */
- pDstline = pNewdata;
- /* allocate temporary row */
- MNG_ALLOC (pData, pTempline, iNewrowsize);
- for (iY = 0; iY < pBuf->iHeight; iY++)
- {
- pSrcline2 = pSrcline1 + pBuf->iRowsize;
- if (fMagnifyX) /* magnifying in X-direction ? */
- {
- iRetcode = fMagnifyX (pData, pImage->iMAGN_MX,
- pImage->iMAGN_ML, pImage->iMAGN_MR,
- pBuf->iWidth, pSrcline1, pDstline);
- if (iRetcode) /* on error bail out */
- {
- MNG_FREEX (pData, pTempline, iNewrowsize);
- MNG_FREEX (pData, pNewdata, iNewsize);
- return iRetcode;
- }
- }
- else
- {
- MNG_COPY (pDstline, pSrcline1, iNewrowsize);
- }
- pDstline += iNewrowsize;
- /* magnifying in Y-direction ? */
- if ((fMagnifyY) &&
- ((iY < pBuf->iHeight - 1) || (pBuf->iHeight == 1) || (pImage->iMAGN_MethodY == 1)))
- {
- if (iY == 0) /* first interval ? */
- {
- if (pBuf->iHeight == 1) /* single row ? */
- pSrcline2 = MNG_NULL;
- iM = (mng_int32)pImage->iMAGN_MT;
- }
- else /* last interval ? */
- if (((pImage->iMAGN_MethodY == 1) && (iY == (pBuf->iHeight - 1))) ||
- ((pImage->iMAGN_MethodY != 1) && (iY == (pBuf->iHeight - 2))) )
- iM = (mng_int32)pImage->iMAGN_MB;
- else /* middle interval */
- iM = (mng_int32)pImage->iMAGN_MY;
- for (iS = 1; iS < iM; iS++)
- {
- iRetcode = fMagnifyY (pData, iS, iM, pBuf->iWidth,
- pSrcline1, pSrcline2, pTempline);
- if (iRetcode) /* on error bail out */
- {
- MNG_FREEX (pData, pTempline, iNewrowsize);
- MNG_FREEX (pData, pNewdata, iNewsize);
- return iRetcode;
- }
- if (fMagnifyX) /* magnifying in X-direction ? */
- {
- iRetcode = fMagnifyX (pData, pImage->iMAGN_MX,
- pImage->iMAGN_ML, pImage->iMAGN_MR,
- pBuf->iWidth, pTempline, pDstline);
- if (iRetcode) /* on error bail out */
- {
- MNG_FREEX (pData, pTempline, iNewrowsize);
- MNG_FREEX (pData, pNewdata, iNewsize);
- return iRetcode;
- }
- }
- else
- {
- MNG_COPY (pDstline, pTempline, iNewrowsize);
- }
- pDstline += iNewrowsize;
- }
- }
- pSrcline1 += pBuf->iRowsize;
- }
- /* drop temporary row */
- MNG_FREEX (pData, pTempline, iNewrowsize);
- /* drop old pixel-data */
- MNG_FREEX (pData, pBuf->pImgdata, pBuf->iImgdatasize);
- pBuf->pImgdata = pNewdata; /* save new buffer dimensions */
- pBuf->iRowsize = iNewrowsize;
- pBuf->iImgdatasize = iNewsize;
- pBuf->iWidth = iNewW;
- pBuf->iHeight = iNewH;
- if (pImage->iId) /* real object ? */
- {
- pImage->iMAGN_MethodX = 0; /* it's done; don't do it again !!! */
- pImage->iMAGN_MethodY = 0;
- pImage->iMAGN_MX = 0;
- pImage->iMAGN_MY = 0;
- pImage->iMAGN_ML = 0;
- pImage->iMAGN_MR = 0;
- pImage->iMAGN_MT = 0;
- pImage->iMAGN_MB = 0;
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_MAGNIFY_IMGOBJECT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode mng_colorcorrect_object (mng_datap pData,
- mng_imagep pImage)
- {
- mng_imagedatap pBuf = pImage->pImgbuf;
- mng_retcode iRetcode;
- mng_uint32 iY;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_COLORCORRECT_OBJECT, MNG_LC_START);
- #endif
- #ifdef MNG_INCLUDE_JNG
- if ((pBuf->iBitdepth < 8) || /* we need 8- or 16-bit RGBA !!! */
- ((pBuf->iColortype != MNG_COLORTYPE_RGBA ) &&
- (pBuf->iColortype != MNG_COLORTYPE_JPEGCOLORA) ))
- #else
- if (pBuf->iBitdepth < 8) /* we need 8- or 16-bit RGBA !!! */
- #endif
- MNG_ERROR (pData, MNG_OBJNOTABSTRACT);
- if (!pBuf->bCorrected) /* only if not already done ! */
- { /* so the row routines now to find it */
- pData->pRetrieveobj = (mng_objectp)pImage;
- pData->pStoreobj = (mng_objectp)pImage;
- pData->pStorebuf = (mng_objectp)pImage->pImgbuf;
- #ifndef MNG_NO_16BIT_SUPPORT
- if (pBuf->iBitdepth > 8)
- {
- pData->fRetrieverow = (mng_fptr)mng_retrieve_rgba16;
- pData->fStorerow = (mng_fptr)mng_store_rgba16;
- }
- else
- #endif
- {
- pData->fRetrieverow = (mng_fptr)mng_retrieve_rgba8;
- pData->fStorerow = (mng_fptr)mng_store_rgba8;
- }
- pData->bIsOpaque = MNG_FALSE;
- pData->iPass = -1; /* these are the object's dimensions now */
- pData->iRow = 0;
- pData->iRowinc = 1;
- pData->iCol = 0;
- pData->iColinc = 1;
- pData->iRowsamples = pBuf->iWidth;
- pData->iRowsize = pData->iRowsamples << 2;
- pData->iPixelofs = 0;
- pData->bIsRGBA16 = MNG_FALSE;
- /* adjust for 16-bit object ? */
- #ifndef MNG_NO_16BIT_SUPPORT
- if (pBuf->iBitdepth > 8)
- {
- pData->bIsRGBA16 = MNG_TRUE;
- pData->iRowsize = pData->iRowsamples << 3;
- }
- #endif
- pData->fCorrectrow = MNG_NULL; /* default no color-correction */
- #ifdef MNG_NO_CMS
- iRetcode = MNG_NOERROR;
- #else
- #if defined(MNG_FULL_CMS) /* determine color-management routine */
- iRetcode = mng_init_full_cms (pData, MNG_FALSE, MNG_FALSE, MNG_TRUE);
- #elif defined(MNG_GAMMA_ONLY)
- iRetcode = mng_init_gamma_only (pData, MNG_FALSE, MNG_FALSE, MNG_TRUE);
- #elif defined(MNG_APP_CMS)
- iRetcode = mng_init_app_cms (pData, MNG_FALSE, MNG_FALSE, MNG_TRUE);
- #endif
- if (iRetcode) /* on error bail out */
- return iRetcode;
- #endif /* MNG_NO_CMS */
- if (pData->fCorrectrow) /* really correct something ? */
- { /* get a temporary row-buffer */
- MNG_ALLOC (pData, pData->pRGBArow, pData->iRowsize);
- pData->pWorkrow = pData->pRGBArow;
- iY = 0; /* start from the top */
- while ((!iRetcode) && (iY < pBuf->iHeight))
- { /* get a row */
- iRetcode = ((mng_retrieverow)pData->fRetrieverow) (pData);
- if (!iRetcode) /* color correct it */
- iRetcode = ((mng_correctrow)pData->fCorrectrow) (pData);
- if (!iRetcode) /* store it back ! */
- iRetcode = ((mng_storerow)pData->fStorerow) (pData);
- if (!iRetcode) /* adjust variables for next row */
- iRetcode = mng_next_row (pData);
- iY++; /* and next line */
- }
- /* drop the temporary row-buffer */
- MNG_FREEX (pData, pData->pRGBArow, pData->iRowsize);
- if (iRetcode) /* on error bail out */
- return iRetcode;
- #if defined(MNG_FULL_CMS) /* cleanup cms stuff */
- iRetcode = mng_clear_cms (pData);
- if (iRetcode) /* on error bail out */
- return iRetcode;
- #endif
- }
- pBuf->bCorrected = MNG_TRUE; /* let's not go through that again ! */
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_COLORCORRECT_OBJECT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- /* * * */
- /* * Animation-object routines * */
- /* * * */
- /* * these handle the animation objects used to re-run parts of a MNG. * */
- /* * eg. during LOOP or TERM processing * */
- /* * * */
- /* ************************************************************************** */
- void mng_add_ani_object (mng_datap pData,
- mng_object_headerp pObject)
- {
- mng_object_headerp pLast = (mng_object_headerp)pData->pLastaniobj;
- if (pLast) /* link it as last in the chain */
- {
- pObject->pPrev = pLast;
- pLast->pNext = pObject;
- }
- else
- {
- pObject->pPrev = MNG_NULL; /* be on the safe side */
- pData->pFirstaniobj = pObject;
- }
- pObject->pNext = MNG_NULL; /* be on the safe side */
- pData->pLastaniobj = pObject;
- /* keep track for jumping */
- pObject->iFramenr = pData->iFrameseq;
- pObject->iLayernr = pData->iLayerseq;
- pObject->iPlaytime = pData->iFrametime;
- /* save restart object ? */
- if ((pData->bDisplaying) && (!pData->bRunning) && (!pData->pCurraniobj))
- pData->pCurraniobj = pObject;
- return;
- }
- /* ************************************************************************** */
- /* ************************************************************************** */
- mng_retcode mng_create_ani_image (mng_datap pData)
- {
- mng_ani_imagep pImage;
- mng_imagep pCurrent;
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_IMAGE, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- #ifndef MNG_NO_DELTA_PNG
- if (pData->bHasDHDR) /* processing delta-image ? */
- pCurrent = (mng_imagep)pData->pObjzero;
- else /* get the current object */
- #endif
- pCurrent = (mng_imagep)pData->pCurrentobj;
- if (!pCurrent) /* otherwise object 0 */
- pCurrent = (mng_imagep)pData->pObjzero;
- /* now just clone the object !!! */
- iRetcode = mng_clone_imageobject (pData, 0, MNG_FALSE, pCurrent->bVisible,
- MNG_FALSE, MNG_FALSE, 0, 0, 0, pCurrent,
- &pImage);
- if (iRetcode) /* on error bail out */
- return iRetcode;
- pImage->sHeader.fCleanup = mng_free_ani_image;
- pImage->sHeader.fProcess = mng_process_ani_image;
- mng_add_ani_object (pData, (mng_object_headerp)pImage);
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_IMAGE, MNG_LC_END);
- #endif
- return MNG_NOERROR; /* okido */
- }
- /* ************************************************************************** */
- mng_retcode mng_free_ani_image (mng_datap pData,
- mng_objectp pObject)
- {
- mng_ani_imagep pImage = (mng_ani_imagep)pObject;
- mng_imagedatap pImgbuf = pImage->pImgbuf;
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_IMAGE, MNG_LC_START);
- #endif
- /* unlink the image-data buffer */
- iRetcode = mng_free_imagedataobject (pData, pImgbuf);
- /* drop its own buffer */
- MNG_FREEX (pData, pImage, sizeof (mng_ani_image));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_IMAGE, MNG_LC_END);
- #endif
- return iRetcode;
- }
- /* ************************************************************************** */
- mng_retcode mng_process_ani_image (mng_datap pData,
- mng_objectp pObject)
- {
- mng_retcode iRetcode = MNG_NOERROR;
- mng_ani_imagep pImage = (mng_imagep)pObject;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_IMAGE, MNG_LC_START);
- #endif
- #ifndef MNG_NO_DELTA_PNG
- if (pData->bHasDHDR) /* processing delta-image ? */
- {
- mng_imagep pDelta = (mng_imagep)pData->pDeltaImage;
- if (!pData->iBreakpoint) /* only execute if not broken before */
- { /* make sure to process pixels as well */
- pData->bDeltaimmediate = MNG_FALSE;
- /* execute the delta process */
- iRetcode = mng_execute_delta_image (pData, pDelta, (mng_imagep)pObject);
- if (iRetcode) /* on error bail out */
- return iRetcode;
- }
- /* now go and shoot it off (if required) */
- if ((pDelta->bVisible) && (pDelta->bViewable))
- iRetcode = mng_display_image (pData, pDelta, MNG_FALSE);
- if (!pData->bTimerset)
- pData->bHasDHDR = MNG_FALSE; /* this image signifies IEND !! */
- }
- else
- #endif
- if (pData->pCurrentobj) /* active object ? */
- {
- mng_imagep pCurrent = (mng_imagep)pData->pCurrentobj;
- mng_imagedatap pBuf = pCurrent->pImgbuf;
- if (!pData->iBreakpoint) /* don't copy it again ! */
- {
- if (pBuf->iImgdatasize) /* buffer present in active object ? */
- /* then drop it */
- MNG_FREE (pData, pBuf->pImgdata, pBuf->iImgdatasize);
- #ifndef MNG_SKIPCHUNK_iCCP
- if (pBuf->iProfilesize) /* iCCP profile present ? */
- /* then drop it */
- MNG_FREE (pData, pBuf->pProfile, pBuf->iProfilesize);
- #endif
- /* now blatently copy the animation buffer */
- MNG_COPY (pBuf, pImage->pImgbuf, sizeof (mng_imagedata));
- /* copy viewability */
- pCurrent->bViewable = pImage->bViewable;
- if (pBuf->iImgdatasize) /* sample buffer present ? */
- { /* then make a copy */
- MNG_ALLOC (pData, pBuf->pImgdata, pBuf->iImgdatasize);
- MNG_COPY (pBuf->pImgdata, pImage->pImgbuf->pImgdata, pBuf->iImgdatasize);
- }
- #ifndef MNG_SKIPCHUNK_iCCP
- if (pBuf->iProfilesize) /* iCCP profile present ? */
- { /* then make a copy */
- MNG_ALLOC (pData, pBuf->pProfile, pBuf->iProfilesize);
- MNG_COPY (pBuf->pProfile, pImage->pImgbuf->pProfile, pBuf->iProfilesize);
- }
- #endif
- }
- /* now go and shoot it off (if required) */
- if ((pCurrent->bVisible) && (pCurrent->bViewable))
- iRetcode = mng_display_image (pData, pCurrent, MNG_FALSE);
- }
- else
- {
- mng_imagep pObjzero = (mng_imagep)pData->pObjzero;
- mng_imagedatap pBuf = pObjzero->pImgbuf;
- if (!pData->iBreakpoint) /* don't copy it again ! */
- {
- if (pBuf->iImgdatasize) /* buffer present in active object ? */
- /* then drop it */
- MNG_FREE (pData, pBuf->pImgdata, pBuf->iImgdatasize);
- #ifndef MNG_SKIPCHUNK_iCCP
- if (pBuf->iProfilesize) /* iCCP profile present ? */
- /* then drop it */
- MNG_FREE (pData, pBuf->pProfile, pBuf->iProfilesize);
- #endif
- /* now blatently copy the animation buffer */
- MNG_COPY (pBuf, pImage->pImgbuf, sizeof (mng_imagedata));
- /* copy viewability */
- pObjzero->bViewable = pImage->bViewable;
- if (pBuf->iImgdatasize) /* sample buffer present ? */
- { /* then make a copy */
- MNG_ALLOC (pData, pBuf->pImgdata, pBuf->iImgdatasize);
- MNG_COPY (pBuf->pImgdata, pImage->pImgbuf->pImgdata, pBuf->iImgdatasize);
- }
- #ifndef MNG_SKIPCHUNK_iCCP
- if (pBuf->iProfilesize) /* iCCP profile present ? */
- { /* then make a copy */
- MNG_ALLOC (pData, pBuf->pProfile, pBuf->iProfilesize);
- MNG_COPY (pBuf->pProfile, pImage->pImgbuf->pProfile, pBuf->iProfilesize);
- }
- #endif
- }
- /* now go and show it */
- iRetcode = mng_display_image (pData, pObjzero, MNG_FALSE);
- }
- if (!iRetcode) /* all's well ? */
- {
- if (pData->bTimerset) /* timer break ? */
- pData->iBreakpoint = 99; /* fictive number; no more processing needed! */
- else
- pData->iBreakpoint = 0; /* else clear it */
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_IMAGE, MNG_LC_END);
- #endif
- return iRetcode;
- }
- /* ************************************************************************** */
- /* ************************************************************************** */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_retcode mng_create_ani_plte (mng_datap pData,
- mng_uint32 iEntrycount,
- mng_palette8ep paEntries)
- #else
- mng_retcode mng_create_ani_plte (mng_datap pData)
- #endif
- {
- mng_ani_pltep pPLTE;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_PLTE, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_ptr pTemp;
- mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_plte),
- mng_free_obj_general,
- mng_process_ani_plte,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pPLTE = (mng_ani_pltep)pTemp;
- #else
- MNG_ALLOC (pData, pPLTE, sizeof (mng_ani_plte));
- pPLTE->sHeader.fCleanup = mng_free_ani_plte;
- pPLTE->sHeader.fProcess = mng_process_ani_plte;
- #endif
- mng_add_ani_object (pData, (mng_object_headerp)pPLTE);
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pPLTE->iEntrycount = iEntrycount;
- MNG_COPY (pPLTE->aEntries, paEntries, sizeof (pPLTE->aEntries));
- #else
- pPLTE->iEntrycount = pData->iGlobalPLTEcount;
- MNG_COPY (pPLTE->aEntries, pData->aGlobalPLTEentries, sizeof (pPLTE->aEntries));
- #endif
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_PLTE, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- mng_retcode mng_free_ani_plte (mng_datap pData,
- mng_objectp pObject)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_PLTE, MNG_LC_START);
- #endif
- MNG_FREEX (pData, pObject, sizeof (mng_ani_plte));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_PLTE, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode mng_process_ani_plte (mng_datap pData,
- mng_objectp pObject)
- {
- mng_ani_pltep pPLTE = (mng_ani_pltep)pObject;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_PLTE, MNG_LC_START);
- #endif
- pData->bHasglobalPLTE = MNG_TRUE;
- pData->iGlobalPLTEcount = pPLTE->iEntrycount;
- MNG_COPY (pData->aGlobalPLTEentries, pPLTE->aEntries, sizeof (pPLTE->aEntries));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_PLTE, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- /* ************************************************************************** */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_retcode mng_create_ani_trns (mng_datap pData,
- mng_uint32 iRawlen,
- mng_uint8p pRawdata)
- #else
- mng_retcode mng_create_ani_trns (mng_datap pData)
- #endif
- {
- mng_ani_trnsp pTRNS;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_TRNS, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_ptr pTemp;
- mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_trns),
- mng_free_obj_general,
- mng_process_ani_trns,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pTRNS = (mng_ani_trnsp)pTemp;
- #else
- MNG_ALLOC (pData, pTRNS, sizeof (mng_ani_trns));
- pTRNS->sHeader.fCleanup = mng_free_ani_trns;
- pTRNS->sHeader.fProcess = mng_process_ani_trns;
- #endif
- mng_add_ani_object (pData, (mng_object_headerp)pTRNS);
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pTRNS->iRawlen = iRawlen;
- MNG_COPY (pTRNS->aRawdata, pRawdata, sizeof (pTRNS->aRawdata));
- #else
- pTRNS->iRawlen = pData->iGlobalTRNSrawlen;
- MNG_COPY (pTRNS->aRawdata, pData->aGlobalTRNSrawdata, sizeof (pTRNS->aRawdata));
- #endif
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_TRNS, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- mng_retcode mng_free_ani_trns (mng_datap pData,
- mng_objectp pObject)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_TRNS, MNG_LC_START);
- #endif
- MNG_FREEX (pData, pObject, sizeof (mng_ani_trns));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_TRNS, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode mng_process_ani_trns (mng_datap pData,
- mng_objectp pObject)
- {
- mng_ani_trnsp pTRNS = (mng_ani_trnsp)pObject;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_TRNS, MNG_LC_START);
- #endif
- pData->bHasglobalTRNS = MNG_TRUE;
- pData->iGlobalTRNSrawlen = pTRNS->iRawlen;
- MNG_COPY (pData->aGlobalTRNSrawdata, pTRNS->aRawdata, sizeof (pTRNS->aRawdata));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_TRNS, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_gAMA
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_retcode mng_create_ani_gama (mng_datap pData,
- mng_bool bEmpty,
- mng_uint32 iGamma)
- #else
- mng_retcode mng_create_ani_gama (mng_datap pData,
- mng_chunkp pChunk)
- #endif
- {
- mng_ani_gamap pGAMA;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_GAMA, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_ptr pTemp;
- mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_gama),
- mng_free_obj_general,
- mng_process_ani_gama,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pGAMA = (mng_ani_gamap)pTemp;
- #else
- MNG_ALLOC (pData, pGAMA, sizeof (mng_ani_gama));
- pGAMA->sHeader.fCleanup = mng_free_ani_gama;
- pGAMA->sHeader.fProcess = mng_process_ani_gama;
- #endif
- mng_add_ani_object (pData, (mng_object_headerp)pGAMA);
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pGAMA->bEmpty = bEmpty;
- pGAMA->iGamma = iGamma;
- #else
- pGAMA->bEmpty = ((mng_gamap)pChunk)->bEmpty;
- pGAMA->iGamma = ((mng_gamap)pChunk)->iGamma;
- #endif
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_GAMA, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- mng_retcode mng_free_ani_gama (mng_datap pData,
- mng_objectp pObject)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_GAMA, MNG_LC_START);
- #endif
- MNG_FREEX (pData, pObject, sizeof (mng_ani_gama));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_GAMA, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode mng_process_ani_gama (mng_datap pData,
- mng_objectp pObject)
- {
- mng_ani_gamap pGAMA = (mng_ani_gamap)pObject;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_GAMA, MNG_LC_START);
- #endif
- if (pGAMA->bEmpty) /* empty chunk ? */
- { /* clear global gAMA */
- pData->bHasglobalGAMA = MNG_FALSE;
- pData->iGlobalGamma = 0;
- }
- else
- { /* set global gAMA */
- pData->bHasglobalGAMA = MNG_TRUE;
- pData->iGlobalGamma = pGAMA->iGamma;
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_GAMA, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_cHRM
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_retcode mng_create_ani_chrm (mng_datap pData,
- mng_bool bEmpty,
- mng_uint32 iWhitepointx,
- mng_uint32 iWhitepointy,
- mng_uint32 iRedx,
- mng_uint32 iRedy,
- mng_uint32 iGreenx,
- mng_uint32 iGreeny,
- mng_uint32 iBluex,
- mng_uint32 iBluey)
- #else
- mng_retcode mng_create_ani_chrm (mng_datap pData,
- mng_chunkp pChunk)
- #endif
- {
- mng_ptr pTemp;
- mng_ani_chrmp pCHRM;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_CHRM, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_chrm),
- mng_free_obj_general,
- mng_process_ani_chrm,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pCHRM = (mng_ani_chrmp)pTemp;
- #else
- MNG_ALLOC (pData, pCHRM, sizeof (mng_ani_chrm));
- pCHRM->sHeader.fCleanup = mng_free_ani_chrm;
- pCHRM->sHeader.fProcess = mng_process_ani_chrm;
- #endif
- mng_add_ani_object (pData, (mng_object_headerp)pCHRM);
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pCHRM->bEmpty = bEmpty;
- pCHRM->iWhitepointx = iWhitepointx;
- pCHRM->iWhitepointy = iWhitepointy;
- pCHRM->iRedx = iRedx;
- pCHRM->iRedy = iRedy;
- pCHRM->iGreenx = iGreenx;
- pCHRM->iGreeny = iGreeny;
- pCHRM->iBluex = iBluex;
- pCHRM->iBluey = iBluey;
- #else
- pCHRM->bEmpty = ((mng_chrmp)pChunk)->bEmpty;
- pCHRM->iWhitepointx = ((mng_chrmp)pChunk)->iWhitepointx;
- pCHRM->iWhitepointy = ((mng_chrmp)pChunk)->iWhitepointy;
- pCHRM->iRedx = ((mng_chrmp)pChunk)->iRedx;
- pCHRM->iRedy = ((mng_chrmp)pChunk)->iRedy;
- pCHRM->iGreenx = ((mng_chrmp)pChunk)->iGreenx;
- pCHRM->iGreeny = ((mng_chrmp)pChunk)->iGreeny;
- pCHRM->iBluex = ((mng_chrmp)pChunk)->iBluex;
- pCHRM->iBluey = ((mng_chrmp)pChunk)->iBluey;
- #endif
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_CHRM, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- mng_retcode mng_free_ani_chrm (mng_datap pData,
- mng_objectp pObject)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_CHRM, MNG_LC_START);
- #endif
- MNG_FREEX (pData, pObject, sizeof (mng_ani_chrm));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_CHRM, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode mng_process_ani_chrm (mng_datap pData,
- mng_objectp pObject)
- {
- mng_ani_chrmp pCHRM = (mng_ani_chrmp)pObject;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_CHRM, MNG_LC_START);
- #endif
- if (pCHRM->bEmpty) /* empty chunk ? */
- { /* clear global cHRM */
- pData->bHasglobalCHRM = MNG_FALSE;
- pData->iGlobalWhitepointx = 0;
- pData->iGlobalWhitepointy = 0;
- pData->iGlobalPrimaryredx = 0;
- pData->iGlobalPrimaryredy = 0;
- pData->iGlobalPrimarygreenx = 0;
- pData->iGlobalPrimarygreeny = 0;
- pData->iGlobalPrimarybluex = 0;
- pData->iGlobalPrimarybluey = 0;
- }
- else
- { /* set global cHRM */
- pData->bHasglobalCHRM = MNG_TRUE;
- pData->iGlobalWhitepointx = pCHRM->iWhitepointx;
- pData->iGlobalWhitepointy = pCHRM->iWhitepointy;
- pData->iGlobalPrimaryredx = pCHRM->iRedx;
- pData->iGlobalPrimaryredy = pCHRM->iRedy;
- pData->iGlobalPrimarygreenx = pCHRM->iGreenx;
- pData->iGlobalPrimarygreeny = pCHRM->iGreeny;
- pData->iGlobalPrimarybluex = pCHRM->iBluex;
- pData->iGlobalPrimarybluey = pCHRM->iBluey;
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_CHRM, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_sRGB
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_retcode mng_create_ani_srgb (mng_datap pData,
- mng_bool bEmpty,
- mng_uint8 iRenderingintent)
- #else
- mng_retcode mng_create_ani_srgb (mng_datap pData,
- mng_chunkp pChunk)
- #endif
- {
- mng_ani_srgbp pSRGB;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_SRGB, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_ptr pTemp;
- mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_srgb),
- mng_free_obj_general,
- mng_process_ani_srgb,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pSRGB = (mng_ani_srgbp)pTemp;
- #else
- MNG_ALLOC (pData, pSRGB, sizeof (mng_ani_srgb));
- pSRGB->sHeader.fCleanup = mng_free_ani_srgb;
- pSRGB->sHeader.fProcess = mng_process_ani_srgb;
- #endif
- mng_add_ani_object (pData, (mng_object_headerp)pSRGB);
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pSRGB->bEmpty = bEmpty;
- pSRGB->iRenderingintent = iRenderingintent;
- #else
- pSRGB->bEmpty = ((mng_srgbp)pChunk)->bEmpty;
- pSRGB->iRenderingintent = ((mng_srgbp)pChunk)->iRenderingintent;
- #endif
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_SRGB, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- mng_retcode mng_free_ani_srgb (mng_datap pData,
- mng_objectp pObject)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_SRGB, MNG_LC_START);
- #endif
- MNG_FREEX (pData, pObject, sizeof (mng_ani_srgb));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_SRGB, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode mng_process_ani_srgb (mng_datap pData,
- mng_objectp pObject)
- {
- mng_ani_srgbp pSRGB = (mng_ani_srgbp)pObject;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_SRGB, MNG_LC_START);
- #endif
- if (pSRGB->bEmpty) /* empty chunk ? */
- { /* clear global sRGB */
- pData->bHasglobalSRGB = MNG_FALSE;
- pData->iGlobalRendintent = 0;
- }
- else
- { /* set global sRGB */
- pData->bHasglobalSRGB = MNG_TRUE;
- pData->iGlobalRendintent = pSRGB->iRenderingintent;
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_SRGB, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_iCCP
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_retcode mng_create_ani_iccp (mng_datap pData,
- mng_bool bEmpty,
- mng_uint32 iProfilesize,
- mng_ptr pProfile)
- #else
- mng_retcode mng_create_ani_iccp (mng_datap pData,
- mng_chunkp pChunk)
- #endif
- {
- mng_ptr pTemp;
- mng_ani_iccpp pICCP;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_ICCP, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_iccp),
- mng_free_ani_iccp,
- mng_process_ani_iccp,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pICCP = (mng_ani_iccpp)pTemp;
- #else
- MNG_ALLOC (pData, pICCP, sizeof (mng_ani_iccp));
- pICCP->sHeader.fCleanup = mng_free_ani_iccp;
- pICCP->sHeader.fProcess = mng_process_ani_iccp;
- #endif
- mng_add_ani_object (pData, (mng_object_headerp)pICCP);
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pICCP->bEmpty = bEmpty;
- pICCP->iProfilesize = iProfilesize;
- if (iProfilesize)
- {
- MNG_ALLOC (pData, pICCP->pProfile, iProfilesize);
- MNG_COPY (pICCP->pProfile, pProfile, iProfilesize);
- }
- #else
- pICCP->bEmpty = ((mng_iccpp)pChunk)->bEmpty;
- pICCP->iProfilesize = ((mng_iccpp)pChunk)->iProfilesize;
- if (pICCP->iProfilesize)
- {
- MNG_ALLOC (pData, pICCP->pProfile, pICCP->iProfilesize);
- MNG_COPY (pICCP->pProfile, ((mng_iccpp)pChunk)->pProfile, pICCP->iProfilesize);
- }
- #endif
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_ICCP, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- mng_retcode mng_free_ani_iccp (mng_datap pData,
- mng_objectp pObject)
- {
- mng_ani_iccpp pICCP = (mng_ani_iccpp)pObject;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_ICCP, MNG_LC_START);
- #endif
- if (pICCP->iProfilesize)
- MNG_FREEX (pData, pICCP->pProfile, pICCP->iProfilesize);
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- MNG_FREEX (pData, pObject, sizeof (mng_ani_iccp));
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_ICCP, MNG_LC_END);
- #endif
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- return MNG_NOERROR;
- #else
- return mng_free_obj_general(pData, pObject);
- #endif
- }
- /* ************************************************************************** */
- mng_retcode mng_process_ani_iccp (mng_datap pData,
- mng_objectp pObject)
- {
- mng_ani_iccpp pICCP = (mng_ani_iccpp)pObject;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_ICCP, MNG_LC_START);
- #endif
- if (pICCP->bEmpty) /* empty chunk ? */
- { /* clear global iCCP */
- pData->bHasglobalICCP = MNG_FALSE;
- if (pData->iGlobalProfilesize)
- MNG_FREEX (pData, pData->pGlobalProfile, pData->iGlobalProfilesize);
- pData->iGlobalProfilesize = 0;
- pData->pGlobalProfile = MNG_NULL;
- }
- else
- { /* set global iCCP */
- pData->bHasglobalICCP = MNG_TRUE;
- pData->iGlobalProfilesize = pICCP->iProfilesize;
- if (pICCP->iProfilesize)
- {
- MNG_ALLOC (pData, pData->pGlobalProfile, pICCP->iProfilesize);
- MNG_COPY (pData->pGlobalProfile, pICCP->pProfile, pICCP->iProfilesize);
- }
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_ICCP, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_bKGD
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_retcode mng_create_ani_bkgd (mng_datap pData,
- mng_uint16 iRed,
- mng_uint16 iGreen,
- mng_uint16 iBlue)
- #else
- mng_retcode mng_create_ani_bkgd (mng_datap pData)
- #endif
- {
- mng_ptr pTemp;
- mng_ani_bkgdp pBKGD;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_BKGD, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_bkgd),
- mng_free_obj_general,
- mng_process_ani_bkgd,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pBKGD = (mng_ani_bkgdp)pTemp;
- #else
- MNG_ALLOC (pData, pBKGD, sizeof (mng_ani_bkgd));
- pBKGD->sHeader.fCleanup = mng_free_ani_bkgd;
- pBKGD->sHeader.fProcess = mng_process_ani_bkgd;
- #endif
- mng_add_ani_object (pData, (mng_object_headerp)pBKGD);
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pBKGD->iRed = iRed;
- pBKGD->iGreen = iGreen;
- pBKGD->iBlue = iBlue;
- #else
- pBKGD->iRed = pData->iGlobalBKGDred;
- pBKGD->iGreen = pData->iGlobalBKGDgreen;
- pBKGD->iBlue = pData->iGlobalBKGDblue;
- #endif
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_BKGD, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- mng_retcode mng_free_ani_bkgd (mng_datap pData,
- mng_objectp pObject)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_BKGD, MNG_LC_START);
- #endif
- MNG_FREEX (pData, pObject, sizeof (mng_ani_bkgd));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_BKGD, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode mng_process_ani_bkgd (mng_datap pData,
- mng_objectp pObject)
- {
- mng_ani_bkgdp pBKGD = (mng_ani_bkgdp)pObject;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_BKGD, MNG_LC_START);
- #endif
- pData->bHasglobalBKGD = MNG_TRUE;
- pData->iGlobalBKGDred = pBKGD->iRed;
- pData->iGlobalBKGDgreen = pBKGD->iGreen;
- pData->iGlobalBKGDblue = pBKGD->iBlue;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_BKGD, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_LOOP
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_retcode mng_create_ani_loop (mng_datap pData,
- mng_uint8 iLevel,
- mng_uint32 iRepeatcount,
- mng_uint8 iTermcond,
- mng_uint32 iItermin,
- mng_uint32 iItermax,
- mng_uint32 iCount,
- mng_uint32p pSignals)
- #else
- mng_retcode mng_create_ani_loop (mng_datap pData,
- mng_chunkp pChunk)
- #endif
- {
- mng_ani_loopp pLOOP;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_LOOP, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_ptr pTemp;
- mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_loop),
- mng_free_ani_loop,
- mng_process_ani_loop,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pLOOP = (mng_ani_loopp)pTemp;
- #else
- MNG_ALLOC (pData, pLOOP, sizeof (mng_ani_loop));
- pLOOP->sHeader.fCleanup = mng_free_ani_loop;
- pLOOP->sHeader.fProcess = mng_process_ani_loop;
- #endif
- mng_add_ani_object (pData, (mng_object_headerp)pLOOP);
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pLOOP->iLevel = iLevel;
- pLOOP->iRepeatcount = iRepeatcount;
- pLOOP->iTermcond = iTermcond;
- pLOOP->iItermin = iItermin;
- pLOOP->iItermax = iItermax;
- pLOOP->iCount = iCount;
- #ifndef MNG_NO_LOOP_SIGNALS_SUPPORTED
- if (iCount)
- {
- MNG_ALLOC (pData, pLOOP->pSignals, (iCount << 1));
- MNG_COPY (pLOOP->pSignals, pSignals, (iCount << 1));
- }
- #endif
- #else /* MNG_OPTIMIZE_CHUNKREADER */
- pLOOP->iLevel = ((mng_loopp)pChunk)->iLevel;
- pLOOP->iRepeatcount = ((mng_loopp)pChunk)->iRepeat;
- pLOOP->iTermcond = ((mng_loopp)pChunk)->iTermination;
- pLOOP->iItermin = ((mng_loopp)pChunk)->iItermin;
- pLOOP->iItermax = ((mng_loopp)pChunk)->iItermax;
- pLOOP->iCount = ((mng_loopp)pChunk)->iCount;
- #ifndef MNG_NO_LOOP_SIGNALS_SUPPORTED
- if (pLOOP->iCount)
- {
- MNG_ALLOC (pData, pLOOP->pSignals, (pLOOP->iCount << 1));
- MNG_COPY (pLOOP->pSignals, ((mng_loopp)pChunk)->pSignals, (pLOOP->iCount << 1));
- }
- #endif
- #endif /* MNG_OPTIMIZE_CHUNKREADER */
- /* running counter starts with repeat_count */
- pLOOP->iRunningcount = pLOOP->iRepeatcount;
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_LOOP, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- mng_retcode mng_free_ani_loop (mng_datap pData,
- mng_objectp pObject)
- {
- #ifndef MNG_NO_LOOP_SIGNALS_SUPPORTED
- mng_ani_loopp pLOOP = (mng_ani_loopp)pObject;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_LOOP, MNG_LC_START);
- #endif
- #ifndef MNG_NO_LOOP_SIGNALS_SUPPORTED
- if (pLOOP->iCount) /* drop signal buffer ? */
- MNG_FREEX (pData, pLOOP->pSignals, (pLOOP->iCount << 1));
- #endif
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- MNG_FREEX (pData, pObject, sizeof (mng_ani_loop));
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_LOOP, MNG_LC_END);
- #endif
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- return MNG_NOERROR;
- #else
- return mng_free_obj_general(pData, pObject);
- #endif
- }
- /* ************************************************************************** */
- mng_retcode mng_process_ani_loop (mng_datap pData,
- mng_objectp pObject)
- {
- mng_ani_loopp pLOOP = (mng_ani_loopp)pObject;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_LOOP, MNG_LC_START);
- #endif
- /* just reset the running counter */
- pLOOP->iRunningcount = pLOOP->iRepeatcount;
- /* iteration=0 means we're skipping ! */
- if ((!pData->bSkipping) && (pLOOP->iRepeatcount == 0))
- pData->bSkipping = MNG_TRUE;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_LOOP, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- /* ************************************************************************** */
- mng_retcode mng_create_ani_endl (mng_datap pData,
- mng_uint8 iLevel)
- {
- mng_ani_endlp pENDL;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_ENDL, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- mng_retcode iRetcode;
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_ptr pTemp;
- iRetcode = create_obj_general (pData, sizeof (mng_ani_endl),
- mng_free_obj_general,
- mng_process_ani_endl,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pENDL = (mng_ani_endlp)pTemp;
- #else
- MNG_ALLOC (pData, pENDL, sizeof (mng_ani_endl));
- pENDL->sHeader.fCleanup = mng_free_ani_endl;
- pENDL->sHeader.fProcess = mng_process_ani_endl;
- #endif
- mng_add_ani_object (pData, (mng_object_headerp)pENDL);
- pENDL->iLevel = iLevel;
- iRetcode = mng_process_ani_endl (pData, (mng_objectp)pENDL);
- if (iRetcode)
- return iRetcode;
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_ENDL, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- mng_retcode mng_free_ani_endl (mng_datap pData,
- mng_objectp pObject)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_ENDL, MNG_LC_START);
- #endif
- MNG_FREEX (pData, pObject, sizeof (mng_ani_endl));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_ENDL, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode mng_process_ani_endl (mng_datap pData,
- mng_objectp pObject)
- {
- mng_ani_endlp pENDL = (mng_ani_endlp)pObject;
- mng_ani_loopp pLOOP;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_ENDL, MNG_LC_START);
- #endif
- if (((pData->bDisplaying) && ((pData->bRunning) || (pData->bSearching))) ||
- (pData->bReading) )
- {
- pLOOP = pENDL->pLOOP; /* determine matching LOOP */
- if (!pLOOP) /* haven't got it yet ? */
- { /* go and look back in the list */
- pLOOP = (mng_ani_loopp)pENDL->sHeader.pPrev;
- while ((pLOOP) &&
- ((pLOOP->sHeader.fCleanup != mng_free_ani_loop) ||
- (pLOOP->iLevel != pENDL->iLevel) ))
- pLOOP = pLOOP->sHeader.pPrev;
- }
- /* got it now ? */
- if ((pLOOP) && (pLOOP->iLevel == pENDL->iLevel))
- {
- pENDL->pLOOP = pLOOP; /* save for next time ! */
- /* decrease running counter ? */
- if ((pLOOP->iRunningcount) && (pLOOP->iRunningcount < 0x7fffffffL))
- pLOOP->iRunningcount--;
- if ((!pData->bDisplaying) && (pData->bReading) &&
- (pLOOP->iRunningcount >= 0x7fffffffL))
- {
- pData->iTotalframes = 0x7fffffffL;
- pData->iTotallayers = 0x7fffffffL;
- pData->iTotalplaytime = 0x7fffffffL;
- }
- else
- {
- /* TODO: we're cheating out on the termination_condition,
- iteration_min, iteration_max and possible signals;
- the code is just not ready for that can of worms.... */
- if (!pLOOP->iRunningcount) /* reached zero ? */
- { /* was this the outer LOOP ? */
- if (pData->pFirstaniobj == (mng_objectp)pLOOP) /* TODO: THIS IS WRONG!! */
- pData->bHasLOOP = MNG_FALSE;
- }
- else
- {
- if (pData->pCurraniobj) /* was we processing objects ? */
- pData->pCurraniobj = pLOOP;/* then restart with LOOP */
- else /* else restart behind LOOP !!! */
- pData->pCurraniobj = pLOOP->sHeader.pNext;
- }
- }
- /* does this match a 'skipping' LOOP? */
- if ((pData->bSkipping) && (pLOOP->iRepeatcount == 0))
- pData->bSkipping = MNG_FALSE;
- }
- else
- MNG_ERROR (pData, MNG_NOMATCHINGLOOP);
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_ENDL, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_DEFI
- mng_retcode mng_create_ani_defi (mng_datap pData)
- {
- mng_ani_defip pDEFI;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_DEFI, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_ptr pTemp;
- mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_defi),
- mng_free_obj_general,
- mng_process_ani_defi,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pDEFI = (mng_ani_defip)pTemp;
- #else
- MNG_ALLOC (pData, pDEFI, sizeof (mng_ani_defi));
- pDEFI->sHeader.fCleanup = mng_free_ani_defi;
- pDEFI->sHeader.fProcess = mng_process_ani_defi;
- #endif
- mng_add_ani_object (pData, (mng_object_headerp)pDEFI);
- pDEFI->iId = pData->iDEFIobjectid;
- pDEFI->bHasdonotshow = pData->bDEFIhasdonotshow;
- pDEFI->iDonotshow = pData->iDEFIdonotshow;
- pDEFI->bHasconcrete = pData->bDEFIhasconcrete;
- pDEFI->iConcrete = pData->iDEFIconcrete;
- pDEFI->bHasloca = pData->bDEFIhasloca;
- pDEFI->iLocax = pData->iDEFIlocax;
- pDEFI->iLocay = pData->iDEFIlocay;
- pDEFI->bHasclip = pData->bDEFIhasclip;
- pDEFI->iClipl = pData->iDEFIclipl;
- pDEFI->iClipr = pData->iDEFIclipr;
- pDEFI->iClipt = pData->iDEFIclipt;
- pDEFI->iClipb = pData->iDEFIclipb;
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_DEFI, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- mng_retcode mng_free_ani_defi (mng_datap pData,
- mng_objectp pObject)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_DEFI, MNG_LC_START);
- #endif
- MNG_FREEX (pData, pObject, sizeof (mng_ani_defi));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_DEFI, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode mng_process_ani_defi (mng_datap pData,
- mng_objectp pObject)
- {
- mng_ani_defip pDEFI = (mng_ani_defip)pObject;
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_DEFI, MNG_LC_START);
- #endif
- pData->iDEFIobjectid = pDEFI->iId;
- pData->bDEFIhasdonotshow = pDEFI->bHasdonotshow;
- pData->iDEFIdonotshow = pDEFI->iDonotshow;
- pData->bDEFIhasconcrete = pDEFI->bHasconcrete;
- pData->iDEFIconcrete = pDEFI->iConcrete;
- pData->bDEFIhasloca = pDEFI->bHasloca;
- pData->iDEFIlocax = pDEFI->iLocax;
- pData->iDEFIlocay = pDEFI->iLocay;
- pData->bDEFIhasclip = pDEFI->bHasclip;
- pData->iDEFIclipl = pDEFI->iClipl;
- pData->iDEFIclipr = pDEFI->iClipr;
- pData->iDEFIclipt = pDEFI->iClipt;
- pData->iDEFIclipb = pDEFI->iClipb;
- iRetcode = mng_process_display_defi (pData);
- if (iRetcode) /* on error bail out */
- return iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_DEFI, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_BASI
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_retcode mng_create_ani_basi (mng_datap pData,
- mng_uint16 iRed,
- mng_uint16 iGreen,
- mng_uint16 iBlue,
- mng_bool bHasalpha,
- mng_uint16 iAlpha,
- mng_uint8 iViewable)
- #else
- mng_retcode mng_create_ani_basi (mng_datap pData,
- mng_chunkp pChunk)
- #endif
- {
- mng_ani_basip pBASI;
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_BASI, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_ptr pTemp;
- iRetcode = create_obj_general (pData, sizeof (mng_ani_basi),
- mng_free_obj_general,
- mng_process_ani_basi,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pBASI = (mng_ani_basip)pTemp;
- #else
- MNG_ALLOC (pData, pBASI, sizeof (mng_ani_basi));
- pBASI->sHeader.fCleanup = mng_free_ani_basi;
- pBASI->sHeader.fProcess = mng_process_ani_basi;
- #endif
- mng_add_ani_object (pData, (mng_object_headerp)pBASI);
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pBASI->iRed = iRed;
- pBASI->iGreen = iGreen;
- pBASI->iBlue = iBlue;
- pBASI->bHasalpha = bHasalpha;
- pBASI->iAlpha = iAlpha;
- pBASI->iViewable = iViewable;
- #else
- pBASI->iRed = ((mng_basip)pChunk)->iRed;
- pBASI->iGreen = ((mng_basip)pChunk)->iGreen;
- pBASI->iBlue = ((mng_basip)pChunk)->iBlue;
- pBASI->bHasalpha = ((mng_basip)pChunk)->bHasalpha;
- pBASI->iAlpha = ((mng_basip)pChunk)->iAlpha;
- pBASI->iViewable = ((mng_basip)pChunk)->iViewable;
- #endif
- }
- #ifndef MNG_OPTIMIZE_DISPLAYCALLS
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- iRetcode = mng_process_display_basi (pData, iRed, iGreen, iBlue,
- bHasalpha, iAlpha, iViewable);
- #else
- iRetcode = mng_process_display_basi (pData,
- ((mng_basip)pChunk)->iRed,
- ((mng_basip)pChunk)->iGreen,
- ((mng_basip)pChunk)->iBlue,
- ((mng_basip)pChunk)->bHasalpha,
- ((mng_basip)pChunk)->iAlpha,
- ((mng_basip)pChunk)->iViewable);
- #endif
- #else
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pData->iBASIred = iRed;
- pData->iBASIgreen = iGreen;
- pData->iBASIblue = iBlue;
- pData->bBASIhasalpha = bHasalpha;
- pData->iBASIalpha = iAlpha;
- pData->iBASIviewable = iViewable;
- #else
- pData->iBASIred = ((mng_basip)pChunk)->iRed;
- pData->iBASIgreen = ((mng_basip)pChunk)->iGreen;
- pData->iBASIblue = ((mng_basip)pChunk)->iBlue;
- pData->bBASIhasalpha = ((mng_basip)pChunk)->bHasalpha;
- pData->iBASIalpha = ((mng_basip)pChunk)->iAlpha;
- pData->iBASIviewable = ((mng_basip)pChunk)->iViewable;
- #endif
- iRetcode = mng_process_display_basi (pData);
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_BASI, MNG_LC_END);
- #endif
- return iRetcode;
- }
- /* ************************************************************************** */
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- mng_retcode mng_free_ani_basi (mng_datap pData,
- mng_objectp pObject)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_BASI, MNG_LC_START);
- #endif
- MNG_FREEX (pData, pObject, sizeof (mng_ani_basi));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_BASI, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode mng_process_ani_basi (mng_datap pData,
- mng_objectp pObject)
- {
- mng_ani_basip pBASI = (mng_ani_basip)pObject;
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_BASI, MNG_LC_START);
- #endif
- #ifndef MNG_OPTIMIZE_DISPLAYCALLS
- iRetcode = mng_process_display_basi (pData, pBASI->iRed, pBASI->iGreen, pBASI->iBlue,
- pBASI->bHasalpha, pBASI->iAlpha, pBASI->iViewable);
- #else
- pData->iBASIred = pBASI->iRed;
- pData->iBASIgreen = pBASI->iGreen;
- pData->iBASIblue = pBASI->iBlue;
- pData->bBASIhasalpha = pBASI->bHasalpha;
- pData->iBASIalpha = pBASI->iAlpha;
- pData->iBASIviewable = pBASI->iViewable;
- iRetcode = mng_process_display_basi (pData);
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_BASI, MNG_LC_END);
- #endif
- return iRetcode;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_CLON
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_retcode mng_create_ani_clon (mng_datap pData,
- mng_uint16 iSourceid,
- mng_uint16 iCloneid,
- mng_uint8 iClonetype,
- mng_bool bHasdonotshow,
- mng_uint8 iDonotshow,
- mng_uint8 iConcrete,
- mng_bool bHasloca,
- mng_uint8 iLocatype,
- mng_int32 iLocax,
- mng_int32 iLocay)
- #else
- mng_retcode mng_create_ani_clon (mng_datap pData,
- mng_chunkp pChunk)
- #endif
- {
- mng_ani_clonp pCLON;
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_CLON, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_ptr pTemp;
- iRetcode = create_obj_general (pData, sizeof (mng_ani_clon),
- mng_free_obj_general,
- mng_process_ani_clon,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pCLON = (mng_ani_clonp)pTemp;
- #else
- MNG_ALLOC (pData, pCLON, sizeof (mng_ani_clon));
- pCLON->sHeader.fCleanup = mng_free_ani_clon;
- pCLON->sHeader.fProcess = mng_process_ani_clon;
- #endif
- mng_add_ani_object (pData, (mng_object_headerp)pCLON);
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pCLON->iSourceid = iSourceid;
- pCLON->iCloneid = iCloneid;
- pCLON->iClonetype = iClonetype;
- pCLON->bHasdonotshow = bHasdonotshow;
- pCLON->iDonotshow = iDonotshow;
- pCLON->iConcrete = iConcrete;
- pCLON->bHasloca = bHasloca;
- pCLON->iLocatype = iLocatype;
- pCLON->iLocax = iLocax;
- pCLON->iLocay = iLocay;
- #else
- pCLON->iSourceid = ((mng_clonp)pChunk)->iSourceid;
- pCLON->iCloneid = ((mng_clonp)pChunk)->iCloneid;
- pCLON->iClonetype = ((mng_clonp)pChunk)->iClonetype;
- pCLON->bHasdonotshow = ((mng_clonp)pChunk)->bHasdonotshow;
- pCLON->iDonotshow = ((mng_clonp)pChunk)->iDonotshow;
- pCLON->iConcrete = ((mng_clonp)pChunk)->iConcrete;
- pCLON->bHasloca = ((mng_clonp)pChunk)->bHasloca;
- pCLON->iLocatype = ((mng_clonp)pChunk)->iLocationtype;
- pCLON->iLocax = ((mng_clonp)pChunk)->iLocationx;
- pCLON->iLocay = ((mng_clonp)pChunk)->iLocationy;
- #endif
- }
- #ifndef MNG_OPTIMIZE_DISPLAYCALLS
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- iRetcode = mng_process_display_clon (pData, iSourceid, iCloneid, iClonetype,
- bHasdonotshow, iDonotshow, iConcrete,
- bHasloca, iLocatype, iLocax, iLocay);
- #else
- iRetcode = mng_process_display_clon (pData,
- ((mng_clonp)pChunk)->iSourceid,
- ((mng_clonp)pChunk)->iCloneid,
- ((mng_clonp)pChunk)->iClonetype,
- ((mng_clonp)pChunk)->bHasdonotshow,
- ((mng_clonp)pChunk)->iDonotshow,
- ((mng_clonp)pChunk)->iConcrete,
- ((mng_clonp)pChunk)->bHasloca,
- ((mng_clonp)pChunk)->iLocationtype,
- ((mng_clonp)pChunk)->iLocationx,
- ((mng_clonp)pChunk)->iLocationy);
- #endif
- #else
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pData->iCLONsourceid = iSourceid;
- pData->iCLONcloneid = iCloneid;
- pData->iCLONclonetype = iClonetype;
- pData->bCLONhasdonotshow = bHasdonotshow;
- pData->iCLONdonotshow = iDonotshow;
- pData->iCLONconcrete = iConcrete;
- pData->bCLONhasloca = bHasloca;
- pData->iCLONlocationtype = iLocatype;
- pData->iCLONlocationx = iLocax;
- pData->iCLONlocationy = iLocay;
- #else
- pData->iCLONsourceid = ((mng_clonp)pChunk)->iSourceid;
- pData->iCLONcloneid = ((mng_clonp)pChunk)->iCloneid;
- pData->iCLONclonetype = ((mng_clonp)pChunk)->iClonetype;
- pData->bCLONhasdonotshow = ((mng_clonp)pChunk)->bHasdonotshow;
- pData->iCLONdonotshow = ((mng_clonp)pChunk)->iDonotshow;
- pData->iCLONconcrete = ((mng_clonp)pChunk)->iConcrete;
- pData->bCLONhasloca = ((mng_clonp)pChunk)->bHasloca;
- pData->iCLONlocationtype = ((mng_clonp)pChunk)->iLocationtype;
- pData->iCLONlocationx = ((mng_clonp)pChunk)->iLocationx;
- pData->iCLONlocationy = ((mng_clonp)pChunk)->iLocationy;
- #endif
- iRetcode = mng_process_display_clon (pData);
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_CLON, MNG_LC_END);
- #endif
- return iRetcode;
- }
- /* ************************************************************************** */
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- mng_retcode mng_free_ani_clon (mng_datap pData,
- mng_objectp pObject)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_CLON, MNG_LC_START);
- #endif
- MNG_FREEX (pData, pObject, sizeof (mng_ani_clon));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_CLON, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode mng_process_ani_clon (mng_datap pData,
- mng_objectp pObject)
- {
- mng_ani_clonp pCLON = (mng_ani_clonp)pObject;
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_CLON, MNG_LC_START);
- #endif
- #ifndef MNG_OPTIMIZE_DISPLAYCALLS
- iRetcode = mng_process_display_clon (pData, pCLON->iSourceid, pCLON->iCloneid,
- pCLON->iClonetype, pCLON->bHasdonotshow,
- pCLON->iDonotshow, pCLON->iConcrete,
- pCLON->bHasloca, pCLON->iLocatype,
- pCLON->iLocax, pCLON->iLocay);
- #else
- pData->iCLONcloneid = pCLON->iCloneid;
- pData->iCLONsourceid = pCLON->iSourceid;
- pData->iCLONclonetype = pCLON->iClonetype;
- pData->bCLONhasdonotshow = pCLON->bHasdonotshow;
- pData->iCLONdonotshow = pCLON->iDonotshow;
- pData->iCLONconcrete = pCLON->iConcrete;
- pData->bCLONhasloca = pCLON->bHasloca;
- pData->iCLONlocationtype = pCLON->iLocatype;
- pData->iCLONlocationx = pCLON->iLocax;
- pData->iCLONlocationy = pCLON->iLocay;
- iRetcode = mng_process_display_clon (pData);
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_CLON, MNG_LC_END);
- #endif
- return iRetcode;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_BACK
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_retcode mng_create_ani_back (mng_datap pData,
- mng_uint16 iRed,
- mng_uint16 iGreen,
- mng_uint16 iBlue,
- mng_uint8 iMandatory,
- mng_uint16 iImageid,
- mng_uint8 iTile)
- #else
- mng_retcode mng_create_ani_back (mng_datap pData)
- #endif
- {
- mng_ani_backp pBACK;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_BACK, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_ptr pTemp;
- mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_back),
- mng_free_obj_general,
- mng_process_ani_back,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pBACK = (mng_ani_backp)pTemp;
- #else
- MNG_ALLOC (pData, pBACK, sizeof (mng_ani_back));
- pBACK->sHeader.fCleanup = mng_free_ani_back;
- pBACK->sHeader.fProcess = mng_process_ani_back;
- #endif
- mng_add_ani_object (pData, (mng_object_headerp)pBACK);
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pBACK->iRed = iRed;
- pBACK->iGreen = iGreen;
- pBACK->iBlue = iBlue;
- pBACK->iMandatory = iMandatory;
- pBACK->iImageid = iImageid;
- pBACK->iTile = iTile;
- #else
- pBACK->iRed = pData->iBACKred;
- pBACK->iGreen = pData->iBACKgreen;
- pBACK->iBlue = pData->iBACKblue;
- pBACK->iMandatory = pData->iBACKmandatory;
- pBACK->iImageid = pData->iBACKimageid;
- pBACK->iTile = pData->iBACKtile;
- #endif
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_BACK, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- mng_retcode mng_free_ani_back (mng_datap pData,
- mng_objectp pObject)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_BACK, MNG_LC_START);
- #endif
- MNG_FREEX (pData, pObject, sizeof (mng_ani_back));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_BACK, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode mng_process_ani_back (mng_datap pData,
- mng_objectp pObject)
- {
- mng_ani_backp pBACK = (mng_ani_backp)pObject;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_BACK, MNG_LC_START);
- #endif
- pData->iBACKred = pBACK->iRed;
- pData->iBACKgreen = pBACK->iGreen;
- pData->iBACKblue = pBACK->iBlue;
- pData->iBACKmandatory = pBACK->iMandatory;
- pData->iBACKimageid = pBACK->iImageid;
- pData->iBACKtile = pBACK->iTile;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_BACK, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_FRAM
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_retcode mng_create_ani_fram (mng_datap pData,
- mng_uint8 iFramemode,
- mng_uint8 iChangedelay,
- mng_uint32 iDelay,
- mng_uint8 iChangetimeout,
- mng_uint32 iTimeout,
- mng_uint8 iChangeclipping,
- mng_uint8 iCliptype,
- mng_int32 iClipl,
- mng_int32 iClipr,
- mng_int32 iClipt,
- mng_int32 iClipb)
- #else
- mng_retcode mng_create_ani_fram (mng_datap pData,
- mng_chunkp pChunk)
- #endif
- {
- mng_ani_framp pFRAM;
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_FRAM, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_ptr pTemp;
- iRetcode = create_obj_general (pData, sizeof (mng_ani_fram),
- mng_free_obj_general,
- mng_process_ani_fram,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pFRAM = (mng_ani_framp)pTemp;
- #else
- MNG_ALLOC (pData, pFRAM, sizeof (mng_ani_fram));
- pFRAM->sHeader.fCleanup = mng_free_ani_fram;
- pFRAM->sHeader.fProcess = mng_process_ani_fram;
- #endif
- mng_add_ani_object (pData, (mng_object_headerp)pFRAM);
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pFRAM->iFramemode = iFramemode;
- pFRAM->iChangedelay = iChangedelay;
- pFRAM->iDelay = iDelay;
- pFRAM->iChangetimeout = iChangetimeout;
- pFRAM->iTimeout = iTimeout;
- pFRAM->iChangeclipping = iChangeclipping;
- pFRAM->iCliptype = iCliptype;
- pFRAM->iClipl = iClipl;
- pFRAM->iClipr = iClipr;
- pFRAM->iClipt = iClipt;
- pFRAM->iClipb = iClipb;
- #else
- pFRAM->iFramemode = ((mng_framp)pChunk)->iMode;
- pFRAM->iChangedelay = ((mng_framp)pChunk)->iChangedelay;
- pFRAM->iDelay = ((mng_framp)pChunk)->iDelay;
- pFRAM->iChangetimeout = ((mng_framp)pChunk)->iChangetimeout;
- pFRAM->iTimeout = ((mng_framp)pChunk)->iTimeout;
- pFRAM->iChangeclipping = ((mng_framp)pChunk)->iChangeclipping;
- pFRAM->iCliptype = ((mng_framp)pChunk)->iBoundarytype;
- pFRAM->iClipl = ((mng_framp)pChunk)->iBoundaryl;
- pFRAM->iClipr = ((mng_framp)pChunk)->iBoundaryr;
- pFRAM->iClipt = ((mng_framp)pChunk)->iBoundaryt;
- pFRAM->iClipb = ((mng_framp)pChunk)->iBoundaryb;
- #endif
- }
- #ifndef MNG_OPTIMIZE_DISPLAYCALLS
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- iRetcode = mng_process_display_fram (pData, iFramemode,
- iChangedelay, iDelay,
- iChangetimeout, iTimeout,
- iChangeclipping, iCliptype,
- iClipl, iClipr,
- iClipt, iClipb);
- #else
- iRetcode = mng_process_display_fram (pData,
- ((mng_framp)pChunk)->iMode,
- ((mng_framp)pChunk)->iChangedelay,
- ((mng_framp)pChunk)->iDelay,
- ((mng_framp)pChunk)->iChangetimeout,
- ((mng_framp)pChunk)->iTimeout,
- ((mng_framp)pChunk)->iChangeclipping,
- ((mng_framp)pChunk)->iBoundarytype,
- ((mng_framp)pChunk)->iBoundaryl,
- ((mng_framp)pChunk)->iBoundaryr,
- ((mng_framp)pChunk)->iBoundaryt,
- ((mng_framp)pChunk)->iBoundaryb);
- #endif
- #else
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pData->iTempFramemode = iFramemode;
- pData->iTempChangedelay = iChangedelay;
- pData->iTempDelay = iDelay;
- pData->iTempChangetimeout = iChangetimeout;
- pData->iTempTimeout = iTimeout;
- pData->iTempChangeclipping = iChangeclipping;
- pData->iTempCliptype = iCliptype;
- pData->iTempClipl = iClipl;
- pData->iTempClipr = iClipr;
- pData->iTempClipt = iClipt;
- pData->iTempClipb = iClipb;
- #else
- pData->iTempFramemode = ((mng_framp)pChunk)->iMode;
- pData->iTempChangedelay = ((mng_framp)pChunk)->iChangedelay;
- pData->iTempDelay = ((mng_framp)pChunk)->iDelay;
- pData->iTempChangetimeout = ((mng_framp)pChunk)->iChangetimeout;
- pData->iTempTimeout = ((mng_framp)pChunk)->iTimeout;
- pData->iTempChangeclipping = ((mng_framp)pChunk)->iChangeclipping;
- pData->iTempCliptype = ((mng_framp)pChunk)->iBoundarytype;
- pData->iTempClipl = ((mng_framp)pChunk)->iBoundaryl;
- pData->iTempClipr = ((mng_framp)pChunk)->iBoundaryr;
- pData->iTempClipt = ((mng_framp)pChunk)->iBoundaryt;
- pData->iTempClipb = ((mng_framp)pChunk)->iBoundaryb;
- #endif
- iRetcode = mng_process_display_fram (pData);
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_FRAM, MNG_LC_END);
- #endif
- return iRetcode;
- }
- /* ************************************************************************** */
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- mng_retcode mng_free_ani_fram (mng_datap pData,
- mng_objectp pObject)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_FRAM, MNG_LC_START);
- #endif
- MNG_FREEX (pData, pObject, sizeof (mng_ani_fram));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_FRAM, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode mng_process_ani_fram (mng_datap pData,
- mng_objectp pObject)
- {
- mng_ani_framp pFRAM = (mng_ani_framp)pObject;
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_FRAM, MNG_LC_START);
- #endif
- if (pData->iBreakpoint) /* previously broken ? */
- {
- iRetcode = mng_process_display_fram2 (pData);
- pData->iBreakpoint = 0; /* not again */
- }
- else
- {
- #ifndef MNG_OPTIMIZE_DISPLAYCALLS
- iRetcode = mng_process_display_fram (pData, pFRAM->iFramemode,
- pFRAM->iChangedelay, pFRAM->iDelay,
- pFRAM->iChangetimeout, pFRAM->iTimeout,
- pFRAM->iChangeclipping, pFRAM->iCliptype,
- pFRAM->iClipl, pFRAM->iClipr,
- pFRAM->iClipt, pFRAM->iClipb);
- #else
- pData->iTempFramemode = pFRAM->iFramemode;
- pData->iTempChangedelay = pFRAM->iChangedelay;
- pData->iTempDelay = pFRAM->iDelay;
- pData->iTempChangetimeout = pFRAM->iChangetimeout;
- pData->iTempTimeout = pFRAM->iTimeout;
- pData->iTempChangeclipping = pFRAM->iChangeclipping;
- pData->iTempCliptype = pFRAM->iCliptype;
- pData->iTempClipl = pFRAM->iClipl;
- pData->iTempClipr = pFRAM->iClipr;
- pData->iTempClipt = pFRAM->iClipt;
- pData->iTempClipb = pFRAM->iClipb;
- iRetcode = mng_process_display_fram (pData);
- #endif
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_FRAM, MNG_LC_END);
- #endif
- return iRetcode;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_MOVE
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_retcode mng_create_ani_move (mng_datap pData,
- mng_uint16 iFirstid,
- mng_uint16 iLastid,
- mng_uint8 iType,
- mng_int32 iLocax,
- mng_int32 iLocay)
- #else
- mng_retcode mng_create_ani_move (mng_datap pData,
- mng_chunkp pChunk)
- #endif
- {
- mng_ani_movep pMOVE;
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_MOVE, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_ptr pTemp;
- iRetcode = create_obj_general (pData, sizeof (mng_ani_move),
- mng_free_obj_general,
- mng_process_ani_move,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pMOVE = (mng_ani_movep)pTemp;
- #else
- MNG_ALLOC (pData, pMOVE, sizeof (mng_ani_move));
- pMOVE->sHeader.fCleanup = mng_free_ani_move;
- pMOVE->sHeader.fProcess = mng_process_ani_move;
- #endif
- mng_add_ani_object (pData, (mng_object_headerp)pMOVE);
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pMOVE->iFirstid = iFirstid;
- pMOVE->iLastid = iLastid;
- pMOVE->iType = iType;
- pMOVE->iLocax = iLocax;
- pMOVE->iLocay = iLocay;
- #else
- pMOVE->iFirstid = ((mng_movep)pChunk)->iFirstid;
- pMOVE->iLastid = ((mng_movep)pChunk)->iLastid;
- pMOVE->iType = ((mng_movep)pChunk)->iMovetype;
- pMOVE->iLocax = ((mng_movep)pChunk)->iMovex;
- pMOVE->iLocay = ((mng_movep)pChunk)->iMovey;
- #endif
- }
- #ifndef MNG_OPTIMIZE_DISPLAYCALLS
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- iRetcode = mng_process_display_move (pData, iFirstid, iLastid,
- iType, iLocax, iLocay);
- #else
- iRetcode = mng_process_display_move (pData,
- ((mng_movep)pChunk)->iFirstid,
- ((mng_movep)pChunk)->iLastid,
- ((mng_movep)pChunk)->iMovetype,
- ((mng_movep)pChunk)->iMovex,
- ((mng_movep)pChunk)->iMovey);
- #endif
- #else
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pData->iMOVEfromid = iFirstid;
- pData->iMOVEtoid = iLastid;
- pData->iMOVEmovetype = iType;
- pData->iMOVEmovex = iLocax;
- pData->iMOVEmovey = iLocay;
- #else
- pData->iMOVEfromid = ((mng_movep)pChunk)->iFirstid;
- pData->iMOVEtoid = ((mng_movep)pChunk)->iLastid;
- pData->iMOVEmovetype = ((mng_movep)pChunk)->iMovetype;
- pData->iMOVEmovex = ((mng_movep)pChunk)->iMovex;
- pData->iMOVEmovey = ((mng_movep)pChunk)->iMovey;
- #endif
- iRetcode = mng_process_display_move (pData);
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_MOVE, MNG_LC_END);
- #endif
- return iRetcode;
- }
- /* ************************************************************************** */
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- mng_retcode mng_free_ani_move (mng_datap pData,
- mng_objectp pObject)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_MOVE, MNG_LC_START);
- #endif
- MNG_FREEX (pData, pObject, sizeof (mng_ani_move));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_MOVE, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode mng_process_ani_move (mng_datap pData,
- mng_objectp pObject)
- {
- mng_retcode iRetcode;
- mng_ani_movep pMOVE = (mng_ani_movep)pObject;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_MOVE, MNG_LC_START);
- #endif
- /* re-process the MOVE chunk */
- #ifndef MNG_OPTIMIZE_DISPLAYCALLS
- iRetcode = mng_process_display_move (pData, pMOVE->iFirstid, pMOVE->iLastid,
- pMOVE->iType, pMOVE->iLocax, pMOVE->iLocay);
- #else
- pData->iMOVEfromid = pMOVE->iFirstid;
- pData->iMOVEtoid = pMOVE->iLastid;
- pData->iMOVEmovetype = pMOVE->iType;
- pData->iMOVEmovex = pMOVE->iLocax;
- pData->iMOVEmovey = pMOVE->iLocay;
- iRetcode = mng_process_display_move (pData);
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_MOVE, MNG_LC_END);
- #endif
- return iRetcode;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_CLIP
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_retcode mng_create_ani_clip (mng_datap pData,
- mng_uint16 iFirstid,
- mng_uint16 iLastid,
- mng_uint8 iType,
- mng_int32 iClipl,
- mng_int32 iClipr,
- mng_int32 iClipt,
- mng_int32 iClipb)
- #else
- mng_retcode mng_create_ani_clip (mng_datap pData,
- mng_chunkp pChunk)
- #endif
- {
- mng_ani_clipp pCLIP;
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_CLIP, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_ptr pTemp;
- iRetcode = create_obj_general (pData, sizeof (mng_ani_clip),
- mng_free_obj_general,
- mng_process_ani_clip,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pCLIP = (mng_ani_clipp)pTemp;
- #else
- MNG_ALLOC (pData, pCLIP, sizeof (mng_ani_clip));
- pCLIP->sHeader.fCleanup = mng_free_ani_clip;
- pCLIP->sHeader.fProcess = mng_process_ani_clip;
- #endif
- mng_add_ani_object (pData, (mng_object_headerp)pCLIP);
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pCLIP->iFirstid = iFirstid;
- pCLIP->iLastid = iLastid;
- pCLIP->iType = iType;
- pCLIP->iClipl = iClipl;
- pCLIP->iClipr = iClipr;
- pCLIP->iClipt = iClipt;
- pCLIP->iClipb = iClipb;
- #else
- pCLIP->iFirstid = ((mng_clipp)pChunk)->iFirstid;
- pCLIP->iLastid = ((mng_clipp)pChunk)->iLastid;
- pCLIP->iType = ((mng_clipp)pChunk)->iCliptype;
- pCLIP->iClipl = ((mng_clipp)pChunk)->iClipl;
- pCLIP->iClipr = ((mng_clipp)pChunk)->iClipr;
- pCLIP->iClipt = ((mng_clipp)pChunk)->iClipt;
- pCLIP->iClipb = ((mng_clipp)pChunk)->iClipb;
- #endif
- }
- #ifndef MNG_OPTIMIZE_DISPLAYCALLS
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- iRetcode = mng_process_display_clip (pData, iFirstid, iLastid,
- iType, iClipl, iClipr,
- iClipt, iClipb);
- #else
- iRetcode = mng_process_display_clip (pData,
- ((mng_clipp)pChunk)->iFirstid,
- ((mng_clipp)pChunk)->iLastid,
- ((mng_clipp)pChunk)->iCliptype,
- ((mng_clipp)pChunk)->iClipl,
- ((mng_clipp)pChunk)->iClipr,
- ((mng_clipp)pChunk)->iClipt,
- ((mng_clipp)pChunk)->iClipb);
- #endif
- #else
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pData->iCLIPfromid = iFirstid;
- pData->iCLIPtoid = iLastid;
- pData->iCLIPcliptype = iType;
- pData->iCLIPclipl = iClipl;
- pData->iCLIPclipr = iClipr;
- pData->iCLIPclipt = iClipt;
- pData->iCLIPclipb = iClipb;
- #else
- pData->iCLIPfromid = ((mng_clipp)pChunk)->iFirstid;
- pData->iCLIPtoid = ((mng_clipp)pChunk)->iLastid;
- pData->iCLIPcliptype = ((mng_clipp)pChunk)->iCliptype;
- pData->iCLIPclipl = ((mng_clipp)pChunk)->iClipl;
- pData->iCLIPclipr = ((mng_clipp)pChunk)->iClipr;
- pData->iCLIPclipt = ((mng_clipp)pChunk)->iClipt;
- pData->iCLIPclipb = ((mng_clipp)pChunk)->iClipb;
- #endif
- iRetcode = mng_process_display_clip (pData);
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_CLIP, MNG_LC_END);
- #endif
- return iRetcode;
- }
- /* ************************************************************************** */
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- mng_retcode mng_free_ani_clip (mng_datap pData,
- mng_objectp pObject)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_CLIP, MNG_LC_START);
- #endif
- MNG_FREEX (pData, pObject, sizeof (mng_ani_clip));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_CLIP, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode mng_process_ani_clip (mng_datap pData,
- mng_objectp pObject)
- {
- mng_retcode iRetcode;
- mng_ani_clipp pCLIP = (mng_ani_clipp)pObject;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_CLIP, MNG_LC_START);
- #endif
- /* re-process the CLIP chunk */
- #ifndef MNG_OPTIMIZE_DISPLAYCALLS
- iRetcode = mng_process_display_clip (pData, pCLIP->iFirstid, pCLIP->iLastid,
- pCLIP->iType, pCLIP->iClipl, pCLIP->iClipr,
- pCLIP->iClipt, pCLIP->iClipb);
- #else
- pData->iCLIPfromid = pCLIP->iFirstid;
- pData->iCLIPtoid = pCLIP->iLastid;
- pData->iCLIPcliptype = pCLIP->iType;
- pData->iCLIPclipl = pCLIP->iClipl;
- pData->iCLIPclipr = pCLIP->iClipr;
- pData->iCLIPclipt = pCLIP->iClipt;
- pData->iCLIPclipb = pCLIP->iClipb;
- iRetcode = mng_process_display_clip (pData);
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_CLIP, MNG_LC_END);
- #endif
- return iRetcode;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_SHOW
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_retcode mng_create_ani_show (mng_datap pData,
- mng_uint16 iFirstid,
- mng_uint16 iLastid,
- mng_uint8 iMode)
- #else
- mng_retcode mng_create_ani_show (mng_datap pData)
- #endif
- {
- mng_ani_showp pSHOW;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_SHOW, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_ptr pTemp;
- mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_show),
- mng_free_obj_general,
- mng_process_ani_show,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pSHOW = (mng_ani_showp)pTemp;
- #else
- MNG_ALLOC (pData, pSHOW, sizeof (mng_ani_show));
- pSHOW->sHeader.fCleanup = mng_free_ani_show;
- pSHOW->sHeader.fProcess = mng_process_ani_show;
- #endif
- mng_add_ani_object (pData, (mng_object_headerp)pSHOW);
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pSHOW->iFirstid = iFirstid;
- pSHOW->iLastid = iLastid;
- pSHOW->iMode = iMode;
- #else
- pSHOW->iFirstid = pData->iSHOWfromid;
- pSHOW->iLastid = pData->iSHOWtoid;
- pSHOW->iMode = pData->iSHOWmode;
- #endif
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_SHOW, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- mng_retcode mng_free_ani_show (mng_datap pData,
- mng_objectp pObject)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_SHOW, MNG_LC_START);
- #endif
- MNG_FREEX (pData, pObject, sizeof (mng_ani_show));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_SHOW, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode mng_process_ani_show (mng_datap pData,
- mng_objectp pObject)
- {
- mng_retcode iRetcode;
- mng_ani_showp pSHOW = (mng_ani_showp)pObject;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_SHOW, MNG_LC_START);
- #endif
- if (pData->iBreakpoint) /* returning from breakpoint ? */
- {
- iRetcode = mng_process_display_show (pData);
- }
- else
- { /* "re-run" SHOW chunk */
- pData->iSHOWmode = pSHOW->iMode;
- pData->iSHOWfromid = pSHOW->iFirstid;
- pData->iSHOWtoid = pSHOW->iLastid;
- iRetcode = mng_process_display_show (pData);
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_SHOW, MNG_LC_END);
- #endif
- return iRetcode;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_TERM
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_retcode mng_create_ani_term (mng_datap pData,
- mng_uint8 iTermaction,
- mng_uint8 iIteraction,
- mng_uint32 iDelay,
- mng_uint32 iItermax)
- #else
- mng_retcode mng_create_ani_term (mng_datap pData,
- mng_chunkp pChunk)
- #endif
- {
- mng_ani_termp pTERM;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_TERM, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_ptr pTemp;
- mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_term),
- mng_free_obj_general,
- mng_process_ani_term,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pTERM = (mng_ani_termp)pTemp;
- #else
- MNG_ALLOC (pData, pTERM, sizeof (mng_ani_term));
- pTERM->sHeader.fCleanup = mng_free_ani_term;
- pTERM->sHeader.fProcess = mng_process_ani_term;
- #endif
- mng_add_ani_object (pData, (mng_object_headerp)pTERM);
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pTERM->iTermaction = iTermaction;
- pTERM->iIteraction = iIteraction;
- pTERM->iDelay = iDelay;
- pTERM->iItermax = iItermax;
- #else
- pTERM->iTermaction = ((mng_termp)pChunk)->iTermaction;
- pTERM->iIteraction = ((mng_termp)pChunk)->iIteraction;
- pTERM->iDelay = ((mng_termp)pChunk)->iDelay;
- pTERM->iItermax = ((mng_termp)pChunk)->iItermax;
- #endif
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_TERM, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- mng_retcode mng_free_ani_term (mng_datap pData,
- mng_objectp pObject)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_TERM, MNG_LC_START);
- #endif
- MNG_FREEX (pData, pObject, sizeof (mng_ani_term));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_TERM, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode mng_process_ani_term (mng_datap pData,
- mng_objectp pObject)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_TERM, MNG_LC_START);
- #endif
- /* dummy: no action required! */
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_TERM, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_SAVE
- mng_retcode mng_create_ani_save (mng_datap pData)
- {
- mng_ptr pTemp;
- mng_ani_savep pSAVE;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_SAVE, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_save),
- mng_free_obj_general,
- mng_process_ani_save,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pSAVE = (mng_ani_savep)pTemp;
- #else
- MNG_ALLOC (pData, pSAVE, sizeof (mng_ani_save));
- pSAVE->sHeader.fCleanup = mng_free_ani_save;
- pSAVE->sHeader.fProcess = mng_process_ani_save;
- #endif
- mng_add_ani_object (pData, (mng_object_headerp)pSAVE);
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_SAVE, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- mng_retcode mng_free_ani_save (mng_datap pData,
- mng_objectp pObject)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_SAVE, MNG_LC_START);
- #endif
- MNG_FREEX (pData, pObject, sizeof (mng_ani_save));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_SAVE, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode mng_process_ani_save (mng_datap pData,
- mng_objectp pObject)
- {
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_SAVE, MNG_LC_START);
- #endif
- iRetcode = mng_process_display_save (pData);
- if (iRetcode) /* on error bail out */
- return iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_SAVE, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_SEEK
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_retcode mng_create_ani_seek (mng_datap pData,
- mng_uint32 iSegmentnamesize,
- mng_pchar zSegmentname)
- #else
- mng_retcode mng_create_ani_seek (mng_datap pData,
- mng_chunkp pChunk)
- #endif
- {
- mng_ptr pTemp;
- mng_ani_seekp pSEEK;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_SEEK, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_seek),
- mng_free_ani_seek,
- mng_process_ani_seek,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pSEEK = (mng_ani_seekp)pTemp;
- #else
- MNG_ALLOC (pData, pSEEK, sizeof (mng_ani_seek));
- pSEEK->sHeader.fCleanup = mng_free_ani_seek;
- pSEEK->sHeader.fProcess = mng_process_ani_seek;
- #endif
- mng_add_ani_object (pData, (mng_object_headerp)pSEEK);
- pData->pLastseek = (mng_objectp)pSEEK;
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pSEEK->iSegmentnamesize = iSegmentnamesize;
- if (iSegmentnamesize)
- {
- MNG_ALLOC (pData, pSEEK->zSegmentname, iSegmentnamesize + 1);
- MNG_COPY (pSEEK->zSegmentname, zSegmentname, iSegmentnamesize);
- }
- #else
- pSEEK->iSegmentnamesize = ((mng_seekp)pChunk)->iNamesize;
- if (pSEEK->iSegmentnamesize)
- {
- MNG_ALLOC (pData, pSEEK->zSegmentname, pSEEK->iSegmentnamesize + 1);
- MNG_COPY (pSEEK->zSegmentname, ((mng_seekp)pChunk)->zName, pSEEK->iSegmentnamesize);
- }
- #endif
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_SEEK, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- mng_retcode mng_free_ani_seek (mng_datap pData,
- mng_objectp pObject)
- {
- mng_ani_seekp pSEEK = (mng_ani_seekp)pObject;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_SEEK, MNG_LC_START);
- #endif
- if (pSEEK->iSegmentnamesize)
- MNG_FREEX (pData, pSEEK->zSegmentname, pSEEK->iSegmentnamesize + 1);
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- MNG_FREEX (pData, pObject, sizeof (mng_ani_seek));
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_SEEK, MNG_LC_END);
- #endif
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- return MNG_NOERROR;
- #else
- return mng_free_obj_general(pData, pObject);
- #endif
- }
- /* ************************************************************************** */
- mng_retcode mng_process_ani_seek (mng_datap pData,
- mng_objectp pObject)
- {
- mng_ani_seekp pSEEK = (mng_ani_seekp)pObject;
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_SEEK, MNG_LC_START);
- #endif
- #ifdef MNG_SUPPORT_DYNAMICMNG
- if (!pData->bStopafterseek) /* can we really process this one ? */
- #endif
- {
- pData->pLastseek = pObject;
- if (pData->fProcessseek) /* inform the app ? */
- {
- mng_bool bOke;
- mng_pchar zName;
- MNG_ALLOC (pData, zName, pSEEK->iSegmentnamesize + 1);
- if (pSEEK->iSegmentnamesize)
- MNG_COPY (zName, pSEEK->zSegmentname, pSEEK->iSegmentnamesize);
- bOke = pData->fProcessseek ((mng_handle)pData, zName);
- MNG_FREEX (pData, zName, pSEEK->iSegmentnamesize + 1);
- if (!bOke)
- MNG_ERROR (pData, MNG_APPMISCERROR);
- }
- }
- iRetcode = mng_process_display_seek (pData);
- if (iRetcode) /* on error bail out */
- return iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_SEEK, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_NO_DELTA_PNG
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_retcode mng_create_ani_dhdr (mng_datap pData,
- mng_uint16 iObjectid,
- mng_uint8 iImagetype,
- mng_uint8 iDeltatype,
- mng_uint32 iBlockwidth,
- mng_uint32 iBlockheight,
- mng_uint32 iBlockx,
- mng_uint32 iBlocky)
- #else
- mng_retcode mng_create_ani_dhdr (mng_datap pData,
- mng_chunkp pChunk)
- #endif
- {
- mng_ani_dhdrp pDHDR;
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_DHDR, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_ptr pTemp;
- iRetcode = create_obj_general (pData, sizeof (mng_ani_dhdr),
- mng_free_obj_general,
- mng_process_ani_dhdr,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pDHDR = (mng_ani_dhdrp)pTemp;
- #else
- MNG_ALLOC (pData, pDHDR, sizeof (mng_ani_dhdr));
- pDHDR->sHeader.fCleanup = mng_free_ani_dhdr;
- pDHDR->sHeader.fProcess = mng_process_ani_dhdr;
- #endif
- mng_add_ani_object (pData, (mng_object_headerp)pDHDR);
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pDHDR->iObjectid = iObjectid;
- pDHDR->iImagetype = iImagetype;
- pDHDR->iDeltatype = iDeltatype;
- pDHDR->iBlockwidth = iBlockwidth;
- pDHDR->iBlockheight = iBlockheight;
- pDHDR->iBlockx = iBlockx;
- pDHDR->iBlocky = iBlocky;
- #else
- pDHDR->iObjectid = ((mng_dhdrp)pChunk)->iObjectid;
- pDHDR->iImagetype = ((mng_dhdrp)pChunk)->iImagetype;
- pDHDR->iDeltatype = ((mng_dhdrp)pChunk)->iDeltatype;
- pDHDR->iBlockwidth = ((mng_dhdrp)pChunk)->iBlockwidth;
- pDHDR->iBlockheight = ((mng_dhdrp)pChunk)->iBlockheight;
- pDHDR->iBlockx = ((mng_dhdrp)pChunk)->iBlockx;
- pDHDR->iBlocky = ((mng_dhdrp)pChunk)->iBlocky;
- #endif
- }
- #ifndef MNG_OPTIMIZE_DISPLAYCALLS
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- iRetcode = mng_process_display_dhdr (pData, iObjectid,
- iImagetype, iDeltatype,
- iBlockwidth, iBlockheight,
- iBlockx, iBlocky);
- #else
- iRetcode = mng_process_display_dhdr (pData,
- ((mng_dhdrp)pChunk)->iObjectid,
- ((mng_dhdrp)pChunk)->iImagetype,
- ((mng_dhdrp)pChunk)->iDeltatype,
- ((mng_dhdrp)pChunk)->iBlockwidth,
- ((mng_dhdrp)pChunk)->iBlockheight,
- ((mng_dhdrp)pChunk)->iBlockx,
- ((mng_dhdrp)pChunk)->iBlocky);
- #endif
- #else
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pData->iDHDRobjectid = iObjectid;
- pData->iDHDRimagetype = iImagetype;
- pData->iDHDRdeltatype = iDeltatype;
- pData->iDHDRblockwidth = iBlockwidth;
- pData->iDHDRblockheight = iBlockheight;
- pData->iDHDRblockx = iBlockx;
- pData->iDHDRblocky = iBlocky;
- #else
- pData->iDHDRobjectid = ((mng_dhdrp)pChunk)->iObjectid;
- pData->iDHDRimagetype = ((mng_dhdrp)pChunk)->iImagetype;
- pData->iDHDRdeltatype = ((mng_dhdrp)pChunk)->iDeltatype;
- pData->iDHDRblockwidth = ((mng_dhdrp)pChunk)->iBlockwidth;
- pData->iDHDRblockheight = ((mng_dhdrp)pChunk)->iBlockheight;
- pData->iDHDRblockx = ((mng_dhdrp)pChunk)->iBlockx;
- pData->iDHDRblocky = ((mng_dhdrp)pChunk)->iBlocky;
- #endif
- iRetcode = mng_process_display_dhdr (pData);
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_DHDR, MNG_LC_END);
- #endif
- return iRetcode;
- }
- /* ************************************************************************** */
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- mng_retcode mng_free_ani_dhdr (mng_datap pData,
- mng_objectp pObject)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_DHDR, MNG_LC_START);
- #endif
- MNG_FREEX (pData, pObject, sizeof (mng_ani_dhdr));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_DHDR, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode mng_process_ani_dhdr (mng_datap pData,
- mng_objectp pObject)
- {
- mng_ani_dhdrp pDHDR = (mng_ani_dhdrp)pObject;
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_DHDR, MNG_LC_START);
- #endif
- pData->bHasDHDR = MNG_TRUE; /* let everyone know we're inside a DHDR */
- #ifndef MNG_OPTIMIZE_DISPLAYCALLS
- iRetcode = mng_process_display_dhdr (pData, pDHDR->iObjectid,
- pDHDR->iImagetype, pDHDR->iDeltatype,
- pDHDR->iBlockwidth, pDHDR->iBlockheight,
- pDHDR->iBlockx, pDHDR->iBlocky);
- #else
- pData->iDHDRobjectid = pDHDR->iObjectid;
- pData->iDHDRimagetype = pDHDR->iImagetype;
- pData->iDHDRdeltatype = pDHDR->iDeltatype;
- pData->iDHDRblockwidth = pDHDR->iBlockwidth;
- pData->iDHDRblockheight = pDHDR->iBlockheight;
- pData->iDHDRblockx = pDHDR->iBlockx;
- pData->iDHDRblocky = pDHDR->iBlocky;
- iRetcode = mng_process_display_dhdr (pData);
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_DHDR, MNG_LC_END);
- #endif
- return iRetcode;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_NO_DELTA_PNG
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_retcode mng_create_ani_prom (mng_datap pData,
- mng_uint8 iBitdepth,
- mng_uint8 iColortype,
- mng_uint8 iFilltype)
- #else
- mng_retcode mng_create_ani_prom (mng_datap pData,
- mng_chunkp pChunk)
- #endif
- {
- mng_ani_promp pPROM=NULL;
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_PROM, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_ptr pTemp;
- iRetcode = create_obj_general (pData, sizeof (mng_ani_prom),
- mng_free_obj_general,
- mng_process_ani_prom,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pPROM = (mng_ani_promp)pTemp;
- #else
- MNG_ALLOC (pData, pPROM, sizeof (mng_ani_prom));
- pPROM->sHeader.fCleanup = mng_free_ani_prom;
- pPROM->sHeader.fProcess = mng_process_ani_prom;
- #endif
- mng_add_ani_object (pData, (mng_object_headerp)pPROM);
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pPROM->iBitdepth = iBitdepth;
- pPROM->iColortype = iColortype;
- pPROM->iFilltype = iFilltype;
- #else
- pPROM->iBitdepth = ((mng_promp)pChunk)->iSampledepth;
- pPROM->iColortype = ((mng_promp)pChunk)->iColortype;
- pPROM->iFilltype = ((mng_promp)pChunk)->iFilltype;
- #endif
- }
- #ifndef MNG_OPTIMIZE_DISPLAYCALLS
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- iRetcode = mng_process_display_prom (pData, iBitdepth,
- iColortype, iFilltype);
- #else
- iRetcode = mng_process_display_prom (pData,
- ((mng_promp)pChunk)->iSampledepth,
- ((mng_promp)pChunk)->iColortype,
- ((mng_promp)pChunk)->iFilltype);
- #endif
- #else
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pData->iPROMbitdepth = iBitdepth;
- pData->iPROMcolortype = iColortype;
- pData->iPROMfilltype = iFilltype;
- #else
- pData->iPROMbitdepth = ((mng_promp)pChunk)->iSampledepth;
- pData->iPROMcolortype = ((mng_promp)pChunk)->iColortype;
- pData->iPROMfilltype = ((mng_promp)pChunk)->iFilltype;
- #endif
- iRetcode = mng_process_display_prom (pData);
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_PROM, MNG_LC_END);
- #endif
- return iRetcode;
- }
- /* ************************************************************************** */
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- mng_retcode mng_free_ani_prom (mng_datap pData,
- mng_objectp pObject)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_PROM, MNG_LC_START);
- #endif
- MNG_FREEX (pData, pObject, sizeof (mng_ani_prom));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_PROM, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode mng_process_ani_prom (mng_datap pData,
- mng_objectp pObject)
- {
- mng_ani_promp pPROM = (mng_ani_promp)pObject;
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_PROM, MNG_LC_START);
- #endif
- #ifndef MNG_OPTIMIZE_DISPLAYCALLS
- iRetcode = mng_process_display_prom (pData, pPROM->iBitdepth,
- pPROM->iColortype, pPROM->iFilltype);
- #else
- pData->iPROMbitdepth = pPROM->iBitdepth;
- pData->iPROMcolortype = pPROM->iColortype;
- pData->iPROMfilltype = pPROM->iFilltype;
- iRetcode = mng_process_display_prom (pData);
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_PROM, MNG_LC_END);
- #endif
- return iRetcode;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_NO_DELTA_PNG
- mng_retcode mng_create_ani_ipng (mng_datap pData)
- {
- mng_ani_ipngp pIPNG;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_IPNG, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_ptr pTemp;
- mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_ipng),
- mng_free_obj_general,
- mng_process_ani_ipng,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pIPNG = (mng_ani_ipngp)pTemp;
- #else
- MNG_ALLOC (pData, pIPNG, sizeof (mng_ani_ipng));
- pIPNG->sHeader.fCleanup = mng_free_ani_ipng;
- pIPNG->sHeader.fProcess = mng_process_ani_ipng;
- #endif
- mng_add_ani_object (pData, (mng_object_headerp)pIPNG);
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_IPNG, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- mng_retcode mng_free_ani_ipng (mng_datap pData,
- mng_objectp pObject)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_IPNG, MNG_LC_START);
- #endif
- MNG_FREEX (pData, pObject, sizeof (mng_ani_ipng));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_IPNG, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode mng_process_ani_ipng (mng_datap pData,
- mng_objectp pObject)
- {
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_IPNG, MNG_LC_START);
- #endif
- iRetcode = mng_process_display_ipng (pData);
- if (iRetcode) /* on error bail out */
- return iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_IPNG, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_NO_DELTA_PNG
- #ifdef MNG_INCLUDE_JNG
- mng_retcode mng_create_ani_ijng (mng_datap pData)
- {
- mng_ani_ijngp pIJNG;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_IJNG, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_ptr pTemp;
- mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_ani_ijng),
- mng_free_obj_general,
- mng_process_ani_ijng,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pIJNG = (mng_ani_ijngp)pTemp;
- #else
- MNG_ALLOC (pData, pIJNG, sizeof (mng_ani_ijng));
- pIJNG->sHeader.fCleanup = mng_free_ani_ijng;
- pIJNG->sHeader.fProcess = mng_process_ani_ijng;
- #endif
- mng_add_ani_object (pData, (mng_object_headerp)pIJNG);
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_IJNG, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- mng_retcode mng_free_ani_ijng (mng_datap pData,
- mng_objectp pObject)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_IJNG, MNG_LC_START);
- #endif
- MNG_FREEX (pData, pObject, sizeof (mng_ani_ijng));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_IJNG, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode mng_process_ani_ijng (mng_datap pData,
- mng_objectp pObject)
- {
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_IJNG, MNG_LC_START);
- #endif
- iRetcode = mng_process_display_ijng (pData);
- if (iRetcode) /* on error bail out */
- return iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_IJNG, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- #endif
- /* ************************************************************************** */
- #ifndef MNG_NO_DELTA_PNG
- mng_retcode mng_create_ani_pplt (mng_datap pData,
- mng_uint8 iType,
- mng_uint32 iCount,
- mng_palette8ep paIndexentries,
- mng_uint8p paAlphaentries,
- mng_uint8p paUsedentries)
- {
- mng_ani_ppltp pPPLT;
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_PPLT, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_ptr pTemp;
- iRetcode = create_obj_general (pData, sizeof (mng_ani_pplt),
- mng_free_obj_general,
- mng_process_ani_pplt,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pPPLT = (mng_ani_ppltp)pTemp;
- #else
- MNG_ALLOC (pData, pPPLT, sizeof (mng_ani_pplt));
- pPPLT->sHeader.fCleanup = mng_free_ani_pplt;
- pPPLT->sHeader.fProcess = mng_process_ani_pplt;
- #endif
- pPPLT->iType = iType;
- pPPLT->iCount = iCount;
- MNG_COPY (pPPLT->aIndexentries, paIndexentries, sizeof (pPPLT->aIndexentries));
- MNG_COPY (pPPLT->aAlphaentries, paAlphaentries, sizeof (pPPLT->aAlphaentries));
- MNG_COPY (pPPLT->aUsedentries, paUsedentries, sizeof (pPPLT->aUsedentries ));
- mng_add_ani_object (pData, (mng_object_headerp)pPPLT);
- }
- #ifndef MNG_OPTIMIZE_DISPLAYCALLS
- iRetcode = mng_process_display_pplt (pData, iType, iCount,
- paIndexentries, paAlphaentries, paUsedentries);
- #else
- pData->iPPLTtype = iType;
- pData->iPPLTcount = iCount;
- pData->paPPLTindexentries = paIndexentries;
- pData->paPPLTalphaentries = paAlphaentries;
- pData->paPPLTusedentries = paUsedentries;
- iRetcode = mng_process_display_pplt (pData);
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_PPLT, MNG_LC_END);
- #endif
- return iRetcode;
- }
- /* ************************************************************************** */
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- mng_retcode mng_free_ani_pplt (mng_datap pData,
- mng_objectp pObject)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_PPLT, MNG_LC_START);
- #endif
- MNG_FREEX (pData, pObject, sizeof (mng_ani_pplt));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_PPLT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode mng_process_ani_pplt (mng_datap pData,
- mng_objectp pObject)
- {
- mng_ani_ppltp pPPLT = (mng_ani_ppltp)pObject;
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_PPLT, MNG_LC_START);
- #endif
- #ifndef MNG_OPTIMIZE_DISPLAYCALLS
- iRetcode = mng_process_display_pplt (pData, pPPLT->iType, pPPLT->iCount,
- pPPLT->aIndexentries, pPPLT->aAlphaentries,
- pPPLT->aUsedentries);
- #else
- pData->iPPLTtype = pPPLT->iType;
- pData->iPPLTcount = pPPLT->iCount;
- pData->paPPLTindexentries = &pPPLT->aIndexentries;
- pData->paPPLTalphaentries = &pPPLT->aAlphaentries;
- pData->paPPLTusedentries = &pPPLT->aUsedentries;
- iRetcode = mng_process_display_pplt (pData);
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_PPLT, MNG_LC_END);
- #endif
- return iRetcode;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_MAGN
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_retcode mng_create_ani_magn (mng_datap pData,
- mng_uint16 iFirstid,
- mng_uint16 iLastid,
- mng_uint8 iMethodX,
- mng_uint16 iMX,
- mng_uint16 iMY,
- mng_uint16 iML,
- mng_uint16 iMR,
- mng_uint16 iMT,
- mng_uint16 iMB,
- mng_uint8 iMethodY)
- #else
- mng_retcode mng_create_ani_magn (mng_datap pData,
- mng_chunkp pChunk)
- #endif
- {
- mng_ani_magnp pMAGN=NULL;
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_MAGN, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_ptr pTemp;
- iRetcode = create_obj_general (pData, sizeof (mng_ani_magn),
- mng_free_obj_general,
- mng_process_ani_magn,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pMAGN = (mng_ani_magnp)pTemp;
- #else
- MNG_ALLOC (pData, pMAGN, sizeof (mng_ani_magn));
- pMAGN->sHeader.fCleanup = mng_free_ani_magn;
- pMAGN->sHeader.fProcess = mng_process_ani_magn;
- #endif
- mng_add_ani_object (pData, (mng_object_headerp)pMAGN);
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pMAGN->iFirstid = iFirstid;
- pMAGN->iLastid = iLastid;
- pMAGN->iMethodX = iMethodX;
- pMAGN->iMX = iMX;
- pMAGN->iMY = iMY;
- pMAGN->iML = iML;
- pMAGN->iMR = iMR;
- pMAGN->iMT = iMT;
- pMAGN->iMB = iMB;
- pMAGN->iMethodY = iMethodY;
- #else
- pMAGN->iFirstid = ((mng_magnp)pChunk)->iFirstid;
- pMAGN->iLastid = ((mng_magnp)pChunk)->iLastid;
- pMAGN->iMethodX = ((mng_magnp)pChunk)->iMethodX;
- pMAGN->iMX = ((mng_magnp)pChunk)->iMX;
- pMAGN->iMY = ((mng_magnp)pChunk)->iMY;
- pMAGN->iML = ((mng_magnp)pChunk)->iML;
- pMAGN->iMR = ((mng_magnp)pChunk)->iMR;
- pMAGN->iMT = ((mng_magnp)pChunk)->iMT;
- pMAGN->iMB = ((mng_magnp)pChunk)->iMB;
- pMAGN->iMethodY = ((mng_magnp)pChunk)->iMethodY;
- #endif
- }
- #ifndef MNG_OPTIMIZE_DISPLAYCALLS
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- iRetcode = mng_process_display_magn (pData, pMAGN->iFirstid, pMAGN->iLastid,
- pMAGN->iMethodX, pMAGN->iMX, pMAGN->iMY,
- pMAGN->iML, pMAGN->iMR, pMAGN->iMT,
- pMAGN->iMB, pMAGN->iMethodY);
- #else
- iRetcode = mng_process_display_magn (pData,
- ((mng_magnp)pChunk)->iFirstid,
- ((mng_magnp)pChunk)->iLastid,
- ((mng_magnp)pChunk)->iMethodX,
- ((mng_magnp)pChunk)->iMX,
- ((mng_magnp)pChunk)->iMY,
- ((mng_magnp)pChunk)->iML,
- ((mng_magnp)pChunk)->iMR,
- ((mng_magnp)pChunk)->iMT,
- ((mng_magnp)pChunk)->iMB,
- ((mng_magnp)pChunk)->iMethodY);
- #endif
- #else
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pData->iMAGNfirstid = iFirstid;
- pData->iMAGNlastid = iLastid;
- pData->iMAGNmethodX = iMethodX;
- pData->iMAGNmX = iMX;
- pData->iMAGNmY = iMY;
- pData->iMAGNmL = iML;
- pData->iMAGNmR = iMR;
- pData->iMAGNmT = iMT;
- pData->iMAGNmB = iMB;
- pData->iMAGNmethodY = iMethodY;
- #else
- pData->iMAGNfirstid = ((mng_magnp)pChunk)->iFirstid;
- pData->iMAGNlastid = ((mng_magnp)pChunk)->iLastid;
- pData->iMAGNmethodX = ((mng_magnp)pChunk)->iMethodX;
- pData->iMAGNmX = ((mng_magnp)pChunk)->iMX;
- pData->iMAGNmY = ((mng_magnp)pChunk)->iMY;
- pData->iMAGNmL = ((mng_magnp)pChunk)->iML;
- pData->iMAGNmR = ((mng_magnp)pChunk)->iMR;
- pData->iMAGNmT = ((mng_magnp)pChunk)->iMT;
- pData->iMAGNmB = ((mng_magnp)pChunk)->iMB;
- pData->iMAGNmethodY = ((mng_magnp)pChunk)->iMethodY;
- #endif
- iRetcode = mng_process_display_magn (pData);
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_MAGN, MNG_LC_END);
- #endif
- return iRetcode;
- }
- /* ************************************************************************** */
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- mng_retcode mng_free_ani_magn (mng_datap pData,
- mng_objectp pObject)
- {
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_MAGN, MNG_LC_START);
- #endif
- MNG_FREEX (pData, pObject, sizeof (mng_ani_magn));
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_MAGN, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- #endif
- /* ************************************************************************** */
- mng_retcode mng_process_ani_magn (mng_datap pData,
- mng_objectp pObject)
- {
- mng_ani_magnp pMAGN = (mng_ani_magnp)pObject;
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_MAGN, MNG_LC_START);
- #endif
- #ifndef MNG_OPTIMIZE_DISPLAYCALLS
- iRetcode = mng_process_display_magn (pData, pMAGN->iFirstid, pMAGN->iLastid,
- pMAGN->iMethodX, pMAGN->iMX, pMAGN->iMY,
- pMAGN->iML, pMAGN->iMR, pMAGN->iMT,
- pMAGN->iMB, pMAGN->iMethodY);
- #else
- pData->iMAGNfirstid = pMAGN->iFirstid;
- pData->iMAGNlastid = pMAGN->iLastid;
- pData->iMAGNmethodX = pMAGN->iMethodX;
- pData->iMAGNmX = pMAGN->iMX;
- pData->iMAGNmY = pMAGN->iMY;
- pData->iMAGNmL = pMAGN->iML;
- pData->iMAGNmR = pMAGN->iMR;
- pData->iMAGNmT = pMAGN->iMT;
- pData->iMAGNmB = pMAGN->iMB;
- pData->iMAGNmethodY = pMAGN->iMethodY;
- iRetcode = mng_process_display_magn (pData);
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_MAGN, MNG_LC_END);
- #endif
- return iRetcode;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_PAST
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_retcode mng_create_ani_past (mng_datap pData,
- mng_uint16 iTargetid,
- mng_uint8 iTargettype,
- mng_int32 iTargetx,
- mng_int32 iTargety,
- mng_uint32 iCount,
- mng_ptr pSources)
- #else
- mng_retcode mng_create_ani_past (mng_datap pData,
- mng_chunkp pChunk)
- #endif
- {
- mng_ani_pastp pPAST;
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_PAST, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_ptr pTemp;
- iRetcode = create_obj_general (pData, sizeof (mng_ani_past),
- mng_free_ani_past,
- mng_process_ani_past,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pPAST = (mng_ani_pastp)pTemp;
- #else
- MNG_ALLOC (pData, pPAST, sizeof (mng_ani_past));
- pPAST->sHeader.fCleanup = mng_free_ani_past;
- pPAST->sHeader.fProcess = mng_process_ani_past;
- #endif
- mng_add_ani_object (pData, (mng_object_headerp)pPAST);
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pPAST->iTargetid = iTargetid;
- pPAST->iTargettype = iTargettype;
- pPAST->iTargetx = iTargetx;
- pPAST->iTargety = iTargety;
- pPAST->iCount = iCount;
- if (iCount)
- {
- MNG_ALLOC (pData, pPAST->pSources, (iCount * sizeof (mng_past_source)));
- MNG_COPY (pPAST->pSources, pSources, (iCount * sizeof (mng_past_source)));
- }
- #else
- pPAST->iTargetid = ((mng_pastp)pChunk)->iDestid;
- pPAST->iTargettype = ((mng_pastp)pChunk)->iTargettype;
- pPAST->iTargetx = ((mng_pastp)pChunk)->iTargetx;
- pPAST->iTargety = ((mng_pastp)pChunk)->iTargety;
- pPAST->iCount = ((mng_pastp)pChunk)->iCount;
- if (pPAST->iCount)
- {
- mng_size_t iSize = (mng_size_t)(pPAST->iCount * sizeof (mng_past_source));
- MNG_ALLOC (pData, pPAST->pSources, iSize);
- MNG_COPY (pPAST->pSources, ((mng_pastp)pChunk)->pSources, iSize);
- }
- #endif
- }
- #ifndef MNG_OPTIMIZE_DISPLAYCALLS
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- iRetcode = mng_process_display_past (pData, iTargetid, iTargettype,
- iTargetx, iTargety,
- iCount, pSources);
- #else
- iRetcode = mng_process_display_past (pData,
- ((mng_pastp)pChunk)->iDestid,
- ((mng_pastp)pChunk)->iTargettype,
- ((mng_pastp)pChunk)->iTargetx,
- ((mng_pastp)pChunk)->iTargety,
- ((mng_pastp)pChunk)->iCount,
- ((mng_pastp)pChunk)->pSources);
- #endif
- #else
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pData->iPASTtargetid = iTargetid;
- pData->iPASTtargettype = iTargettype;
- pData->iPASTtargetx = iTargetx;
- pData->iPASTtargety = iTargety;
- pData->iPASTcount = iCount;
- pData->pPASTsources = pSources;
- #else
- pData->iPASTtargetid = ((mng_pastp)pChunk)->iDestid;
- pData->iPASTtargettype = ((mng_pastp)pChunk)->iTargettype;
- pData->iPASTtargetx = ((mng_pastp)pChunk)->iTargetx;
- pData->iPASTtargety = ((mng_pastp)pChunk)->iTargety;
- pData->iPASTcount = ((mng_pastp)pChunk)->iCount;
- pData->pPASTsources = ((mng_pastp)pChunk)->pSources;
- #endif
- iRetcode = mng_process_display_past (pData);
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_PAST, MNG_LC_END);
- #endif
- return iRetcode;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_PAST
- mng_retcode mng_free_ani_past (mng_datap pData,
- mng_objectp pObject)
- {
- mng_ani_pastp pPAST = (mng_ani_pastp)pObject;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_PAST, MNG_LC_START);
- #endif
- if (pPAST->iCount)
- MNG_FREEX (pData, pPAST->pSources, (pPAST->iCount * sizeof (mng_past_source)));
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- MNG_FREEX (pData, pObject, sizeof (mng_ani_past));
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_PAST, MNG_LC_END);
- #endif
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- return MNG_NOERROR;
- #else
- return mng_free_obj_general(pData, pObject);
- #endif
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_PAST
- mng_retcode mng_process_ani_past (mng_datap pData,
- mng_objectp pObject)
- {
- mng_ani_pastp pPAST = (mng_ani_pastp)pObject;
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_PAST, MNG_LC_START);
- #endif
- #ifndef MNG_OPTIMIZE_DISPLAYCALLS
- iRetcode = mng_process_display_past (pData, pPAST->iTargetid, pPAST->iTargettype,
- pPAST->iTargetx, pPAST->iTargety,
- pPAST->iCount, pPAST->pSources);
- #else
- pData->iPASTtargetid = pPAST->iTargetid;
- pData->iPASTtargettype = pPAST->iTargettype;
- pData->iPASTtargetx = pPAST->iTargetx;
- pData->iPASTtargety = pPAST->iTargety;
- pData->iPASTcount = pPAST->iCount;
- pData->pPASTsources = pPAST->pSources;
- iRetcode = mng_process_display_past (pData);
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_PAST, MNG_LC_END);
- #endif
- return iRetcode;
- }
- #endif
- /* ************************************************************************** */
- #ifndef MNG_SKIPCHUNK_DISC
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_retcode mng_create_ani_disc (mng_datap pData,
- mng_uint32 iCount,
- mng_uint16p pIds)
- #else
- mng_retcode mng_create_ani_disc (mng_datap pData,
- mng_chunkp pChunk)
- #endif
- {
- mng_ani_discp pDISC;
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_DISC, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_ptr pTemp;
- iRetcode = create_obj_general (pData, sizeof (mng_ani_disc),
- mng_free_ani_disc,
- mng_process_ani_disc,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pDISC = (mng_ani_discp)pTemp;
- #else
- MNG_ALLOC (pData, pDISC, sizeof (mng_ani_disc));
- pDISC->sHeader.fCleanup = mng_free_ani_disc;
- pDISC->sHeader.fProcess = mng_process_ani_disc;
- #endif
- mng_add_ani_object (pData, (mng_object_headerp)pDISC);
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pDISC->iCount = iCount;
- if (iCount)
- {
- MNG_ALLOC (pData, pDISC->pIds, (iCount << 1));
- MNG_COPY (pDISC->pIds, pIds, (iCount << 1));
- }
- #else
- pDISC->iCount = ((mng_discp)pChunk)->iCount;
- if (pDISC->iCount)
- {
- mng_size_t iSize = (mng_size_t)(pDISC->iCount << 1);
- MNG_ALLOC (pData, pDISC->pIds, iSize);
- MNG_COPY (pDISC->pIds, ((mng_discp)pChunk)->pObjectids, iSize);
- }
- #endif
- }
- #ifndef MNG_OPTIMIZE_DISPLAYCALLS
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- iRetcode = mng_process_display_disc (pData, iCount, pIds);
- #else
- iRetcode = mng_process_display_disc (pData,
- ((mng_discp)pChunk)->iCount,
- ((mng_discp)pChunk)->pObjectids);
- #endif
- #else
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pData->iDISCcount = iCount;
- pData->pDISCids = pIds;
- #else
- pData->iDISCcount = ((mng_discp)pChunk)->iCount;
- pData->pDISCids = ((mng_discp)pChunk)->pObjectids;
- #endif
- iRetcode = mng_process_display_disc (pData);
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANI_DISC, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- mng_retcode mng_free_ani_disc (mng_datap pData,
- mng_objectp pObject)
- {
- mng_ani_discp pDISC = (mng_ani_discp)pObject;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_DISC, MNG_LC_START);
- #endif
- if (pDISC->iCount)
- MNG_FREEX (pData, pDISC->pIds, (pDISC->iCount << 1));
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- MNG_FREEX (pData, pObject, sizeof (mng_ani_disc));
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANI_DISC, MNG_LC_END);
- #endif
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- return MNG_NOERROR;
- #else
- return mng_free_obj_general(pData, pObject);
- #endif
- }
- /* ************************************************************************** */
- mng_retcode mng_process_ani_disc (mng_datap pData,
- mng_objectp pObject)
- {
- mng_ani_discp pDISC = (mng_ani_discp)pObject;
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_DISC, MNG_LC_START);
- #endif
- #ifndef MNG_OPTIMIZE_DISPLAYCALLS
- iRetcode = mng_process_display_disc (pData, pDISC->iCount, pDISC->pIds);
- #else
- pData->iDISCcount = pDISC->iCount;
- pData->pDISCids = pDISC->pIds;
- iRetcode = mng_process_display_disc (pData);
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANI_DISC, MNG_LC_END);
- #endif
- return iRetcode;
- }
- #endif
- /* ************************************************************************** */
- /* ************************************************************************** */
- #ifdef MNG_SUPPORT_DYNAMICMNG
- /* ************************************************************************** */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_retcode mng_create_event (mng_datap pData,
- mng_uint8 iEventtype,
- mng_uint8 iMasktype,
- mng_int32 iLeft,
- mng_int32 iRight,
- mng_int32 iTop,
- mng_int32 iBottom,
- mng_uint16 iObjectid,
- mng_uint8 iIndex,
- mng_uint32 iSegmentnamesize,
- mng_pchar zSegmentname)
- #else
- mng_retcode mng_create_event (mng_datap pData,
- mng_ptr pEntry)
- #endif
- {
- mng_eventp pEvent;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_EVENT, MNG_LC_START);
- #endif
- if (pData->bCacheplayback) /* caching playback info ? */
- {
- mng_object_headerp pLast;
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- mng_ptr pTemp;
- mng_retcode iRetcode = create_obj_general (pData, sizeof (mng_event),
- mng_free_event,
- mng_process_event,
- &pTemp);
- if (iRetcode)
- return iRetcode;
- pEvent = (mng_eventp)pTemp;
- #else
- MNG_ALLOC (pData, pEvent, sizeof (mng_event));
- pEvent->sHeader.fCleanup = mng_free_event;
- pEvent->sHeader.fProcess = mng_process_event;
- #endif
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pEvent->iEventtype = iEventtype;
- pEvent->iMasktype = iMasktype;
- pEvent->iLeft = iLeft;
- pEvent->iRight = iRight;
- pEvent->iTop = iTop;
- pEvent->iBottom = iBottom;
- pEvent->iObjectid = iObjectid;
- pEvent->iIndex = iIndex;
- pEvent->iSegmentnamesize = iSegmentnamesize;
- if (iSegmentnamesize)
- {
- MNG_ALLOC (pData, pEvent->zSegmentname, iSegmentnamesize+1);
- MNG_COPY (pEvent->zSegmentname, zSegmentname, iSegmentnamesize);
- }
- #else
- pEvent->iEventtype = ((mng_evnt_entryp)pEntry)->iEventtype;
- pEvent->iMasktype = ((mng_evnt_entryp)pEntry)->iMasktype;
- pEvent->iLeft = ((mng_evnt_entryp)pEntry)->iLeft;
- pEvent->iRight = ((mng_evnt_entryp)pEntry)->iRight;
- pEvent->iTop = ((mng_evnt_entryp)pEntry)->iTop;
- pEvent->iBottom = ((mng_evnt_entryp)pEntry)->iBottom;
- pEvent->iObjectid = ((mng_evnt_entryp)pEntry)->iObjectid;
- pEvent->iIndex = ((mng_evnt_entryp)pEntry)->iIndex;
- pEvent->iSegmentnamesize = ((mng_evnt_entryp)pEntry)->iSegmentnamesize;
- if (pEvent->iSegmentnamesize)
- {
- MNG_ALLOC (pData, pEvent->zSegmentname, pEvent->iSegmentnamesize+1);
- MNG_COPY (pEvent->zSegmentname, ((mng_evnt_entryp)pEntry)->zSegmentname, pEvent->iSegmentnamesize);
- }
- #endif
- /* fixup the double-linked list */
- pLast = (mng_object_headerp)pData->pLastevent;
- if (pLast) /* link it as last in the chain */
- {
- pEvent->sHeader.pPrev = pLast;
- pLast->pNext = pEvent;
- }
- else
- {
- pData->pFirstevent = pEvent;
- }
- pData->pLastevent = pEvent;
- pData->bDynamic = MNG_TRUE;
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_EVENT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- mng_retcode mng_free_event (mng_datap pData,
- mng_objectp pObject)
- {
- mng_eventp pEvent = (mng_eventp)pObject;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_EVENT, MNG_LC_START);
- #endif
- if (pEvent->iSegmentnamesize)
- MNG_FREEX (pData, pEvent->zSegmentname, pEvent->iSegmentnamesize + 1);
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- MNG_FREEX (pData, pEvent, sizeof (mng_event));
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_EVENT, MNG_LC_END);
- #endif
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- return MNG_NOERROR;
- #else
- return mng_free_obj_general(pData, pObject);
- #endif
- }
- /* ************************************************************************** */
- mng_retcode mng_process_event (mng_datap pData,
- mng_objectp pObject)
- {
- #ifndef MNG_SKIPCHUNK_SEEK
- mng_eventp pEvent = (mng_eventp)pObject;
- mng_object_headerp pAni;
- mng_bool bFound = MNG_FALSE;
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_EVENT, MNG_LC_START);
- #endif
- #ifndef MNG_SKIPCHUNK_SEEK
- if (!pEvent->pSEEK) /* need to find SEEK first ? */
- {
- pAni = (mng_object_headerp)pData->pFirstaniobj;
- while ((pAni) && (!bFound))
- {
- if ((pAni->fCleanup == mng_free_ani_seek) &&
- (strcmp(pEvent->zSegmentname, ((mng_ani_seekp)pAni)->zSegmentname) == 0))
- bFound = MNG_TRUE;
- else
- pAni = (mng_object_headerp)pAni->pNext;
- }
- if (pAni)
- pEvent->pSEEK = (mng_ani_seekp)pAni;
- }
- if (pEvent->pSEEK) /* anything to do ? */
- {
- pEvent->iLastx = pData->iEventx;
- pEvent->iLasty = pData->iEventy;
- /* let's start from this SEEK then */
- pData->pCurraniobj = (mng_objectp)pEvent->pSEEK;
- pData->bRunningevent = MNG_TRUE;
- /* wake-up the app ! */
- if (!pData->fSettimer ((mng_handle)pData, 5))
- MNG_ERROR (pData, MNG_APPTIMERERROR);
- }
- else
- MNG_ERROR (pData, MNG_SEEKNOTFOUND);
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_EVENT, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- #endif /* MNG_SUPPORT_DYNAMICMNG */
- /* ************************************************************************** */
- /* ************************************************************************** */
- #ifdef MNG_INCLUDE_MPNG_PROPOSAL
- /* ************************************************************************** */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_retcode mng_create_mpng_obj (mng_datap pData,
- mng_uint32 iFramewidth,
- mng_uint32 iFrameheight,
- mng_uint16 iNumplays,
- mng_uint16 iTickspersec,
- mng_uint32 iFramessize,
- mng_ptr pFrames)
- #else
- mng_retcode mng_create_mpng_obj (mng_datap pData,
- mng_ptr pEntry)
- #endif
- {
- mng_mpng_objp pMPNG;
- mng_ptr pTemp;
- mng_retcode iRetcode;
- mng_uint8p pFrame;
- mng_int32 iCnt, iMax;
- mng_uint32 iX, iY, iWidth, iHeight;
- mng_int32 iXoffset, iYoffset;
- mng_uint16 iTicks;
- mng_uint16 iDelay;
- mng_bool bNewframe;
- mng_ani_loopp pLOOP;
- mng_ani_endlp pENDL;
- mng_ani_framp pFRAM;
- mng_ani_movep pMOVE;
- mng_ani_clipp pCLIP;
- mng_ani_showp pSHOW;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_MPNG_OBJ, MNG_LC_START);
- #endif
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- iRetcode = create_obj_general (pData, sizeof (mng_mpng_obj), mng_free_mpng_obj,
- mng_process_mpng_obj, &pTemp);
- if (iRetcode)
- return iRetcode;
- pMPNG = (mng_mpng_objp)pTemp;
- #else
- MNG_ALLOC (pData, pMPNG, sizeof (mng_mpng_obj));
- pMPNG->sHeader.fCleanup = mng_free_mpng_obj;
- pMPNG->sHeader.fProcess = mng_process_mpng_obj;
- #endif
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pMPNG->iFramewidth = iFramewidth;
- pMPNG->iFrameheight = iFrameheight;
- pMPNG->iNumplays = iNumplays;
- pMPNG->iTickspersec = iTickspersec;
- pMPNG->iFramessize = iFramessize;
- if (iFramessize)
- {
- MNG_ALLOC (pData, pMPNG->pFrames, iFramessize);
- MNG_COPY (pMPNG->pFrames, pFrames, iFramessize);
- }
- #else
- pMPNG->iFramewidth = ((mng_mpngp)pEntry)->iFramewidth;
- pMPNG->iFrameheight = ((mng_mpngp)pEntry)->iFrameheight;
- pMPNG->iNumplays = ((mng_mpngp)pEntry)->iNumplays;
- pMPNG->iTickspersec = ((mng_mpngp)pEntry)->iTickspersec;
- pMPNG->iFramessize = ((mng_mpngp)pEntry)->iFramessize;
- if (pMPNG->iFramessize)
- {
- MNG_ALLOC (pData, pMPNG->pFrames, pMPNG->iFramessize);
- MNG_COPY (pMPNG->pFrames, ((mng_mpngp)pEntry)->pFrames, pMPNG->iFramessize);
- }
- #endif
- pData->pMPNG = pMPNG;
- pData->eImagetype = mng_it_mpng;
- iRetcode = mng_process_display_mpng (pData);
- if (iRetcode)
- return iRetcode;
- /* now let's create the MNG animation directives from this */
- pFrame = (mng_uint8p)pMPNG->pFrames;
- iMax = pMPNG->iFramessize / 26;
- /* set up MNG impersonation */
- pData->iTicks = pMPNG->iTickspersec;
- pData->iLayercount = iMax;
- if (pMPNG->iNumplays != 1) /* create a LOOP/ENDL pair ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- iRetcode = create_obj_general (pData, sizeof (mng_ani_loop),
- mng_free_ani_loop, mng_process_ani_loop,
- &((mng_ptr)pLOOP));
- if (iRetcode)
- return iRetcode;
- #else
- MNG_ALLOC (pData, pLOOP, sizeof (mng_ani_loop));
- pLOOP->sHeader.fCleanup = mng_free_ani_loop;
- pLOOP->sHeader.fProcess = mng_process_ani_loop;
- #endif
- pLOOP->iLevel = 1;
- if (pMPNG->iNumplays)
- pLOOP->iRepeatcount = pMPNG->iNumplays;
- else
- pLOOP->iRepeatcount = 0xFFFFFFFFl;
- mng_add_ani_object (pData, (mng_object_headerp)pLOOP);
- }
- bNewframe = MNG_TRUE; /* create the frame display objects */
- for (iCnt = 0; iCnt < iMax; iCnt++)
- {
- iX = mng_get_uint32 (pFrame);
- iY = mng_get_uint32 (pFrame+4);
- iWidth = mng_get_uint32 (pFrame+8);
- iHeight = mng_get_uint32 (pFrame+12);
- iXoffset = mng_get_int32 (pFrame+16);
- iYoffset = mng_get_int32 (pFrame+20);
- iTicks = mng_get_uint16 (pFrame+24);
- iDelay = iTicks;
- if (!iDelay)
- {
- mng_uint8p pTemp = pFrame+26;
- mng_int32 iTemp = iCnt+1;
- while ((iTemp < iMax) && (!iDelay))
- {
- iDelay = mng_get_uint16 (pTemp+24);
- pTemp += 26;
- iTemp++;
- }
- }
- if (bNewframe)
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- iRetcode = create_obj_general (pData, sizeof (mng_ani_fram),
- mng_free_obj_general, mng_process_ani_fram,
- &((mng_ptr)pFRAM));
- if (iRetcode)
- return iRetcode;
- #else
- MNG_ALLOC (pData, pFRAM, sizeof (mng_ani_fram));
- pFRAM->sHeader.fCleanup = mng_free_ani_fram;
- pFRAM->sHeader.fProcess = mng_process_ani_fram;
- #endif
- pFRAM->iFramemode = 4;
- pFRAM->iChangedelay = 1;
- pFRAM->iDelay = iDelay;
- mng_add_ani_object (pData, (mng_object_headerp)pFRAM);
- }
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- iRetcode = create_obj_general (pData, sizeof (mng_ani_move),
- mng_free_obj_general,
- mng_process_ani_move,
- &((mng_ptr)pMOVE));
- if (iRetcode)
- return iRetcode;
- #else
- MNG_ALLOC (pData, pMOVE, sizeof (mng_ani_move));
- pMOVE->sHeader.fCleanup = mng_free_ani_move;
- pMOVE->sHeader.fProcess = mng_process_ani_move;
- #endif
- pMOVE->iLocax = iXoffset - (mng_int32)iX;
- pMOVE->iLocay = iYoffset - (mng_int32)iY;
- mng_add_ani_object (pData, (mng_object_headerp)pMOVE);
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- iRetcode = create_obj_general (pData, sizeof (mng_ani_clip),
- mng_free_obj_general,
- mng_process_ani_clip,
- &((mng_ptr)pCLIP));
- if (iRetcode)
- return iRetcode;
- #else
- MNG_ALLOC (pData, pCLIP, sizeof (mng_ani_clip));
- pCLIP->sHeader.fCleanup = mng_free_ani_clip;
- pCLIP->sHeader.fProcess = mng_process_ani_clip;
- #endif
- pCLIP->iClipl = iXoffset;
- pCLIP->iClipr = iXoffset + (mng_int32)iWidth;
- pCLIP->iClipt = iYoffset;
- pCLIP->iClipb = iYoffset + (mng_int32)iHeight;
- mng_add_ani_object (pData, (mng_object_headerp)pCLIP);
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- iRetcode = create_obj_general (pData, sizeof (mng_ani_show),
- mng_free_obj_general, mng_process_ani_show,
- &((mng_ptr)pSHOW));
- if (iRetcode)
- return iRetcode;
- #else
- MNG_ALLOC (pData, pSHOW, sizeof (mng_ani_show));
- pSHOW->sHeader.fCleanup = mng_free_ani_show;
- pSHOW->sHeader.fProcess = mng_process_ani_show;
- #endif
- mng_add_ani_object (pData, (mng_object_headerp)pSHOW);
- bNewframe = (mng_bool)iTicks;
- pFrame += 26;
- }
- if (pMPNG->iNumplays != 1) /* create a LOOP/ENDL pair ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- iRetcode = create_obj_general (pData, sizeof (mng_ani_endl),
- mng_free_obj_general, mng_process_ani_endl,
- &((mng_ptr)pENDL));
- if (iRetcode)
- return iRetcode;
- #else
- MNG_ALLOC (pData, pENDL, sizeof (mng_ani_endl));
- pENDL->sHeader.fCleanup = mng_free_ani_endl;
- pENDL->sHeader.fProcess = mng_process_ani_endl;
- #endif
- pENDL->iLevel = 1;
- mng_add_ani_object (pData, (mng_object_headerp)pENDL);
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_MPNG_OBJ, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- mng_retcode mng_free_mpng_obj (mng_datap pData,
- mng_objectp pObject)
- {
- mng_mpng_objp pMPNG = (mng_mpng_objp)pObject;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_MPNG_OBJ, MNG_LC_START);
- #endif
- if (pMPNG->iFramessize)
- MNG_FREEX (pData, pMPNG->pFrames, pMPNG->iFramessize);
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- MNG_FREEX (pData, pMPNG, sizeof (mng_mpng_obj));
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_MPNG_OBJ, MNG_LC_END);
- #endif
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- return MNG_NOERROR;
- #else
- return mng_free_obj_general(pData, pObject);
- #endif
- }
- /* ************************************************************************** */
- mng_retcode mng_process_mpng_obj (mng_datap pData,
- mng_objectp pObject)
- {
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- #endif /* MNG_INCLUDE_MPNG_PROPOSAL */
- /* ************************************************************************** */
- /* ************************************************************************** */
- #ifdef MNG_INCLUDE_ANG_PROPOSAL
- /* ************************************************************************** */
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- mng_retcode mng_create_ang_obj (mng_datap pData,
- mng_uint32 iNumframes,
- mng_uint32 iTickspersec,
- mng_uint32 iNumplays,
- mng_uint32 iTilewidth,
- mng_uint32 iTileheight,
- mng_uint8 iInterlace,
- mng_uint8 iStillused)
- #else
- mng_retcode mng_create_ang_obj (mng_datap pData,
- mng_ptr pEntry)
- #endif
- {
- mng_ang_objp pANG;
- mng_ptr pTemp;
- mng_retcode iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANG_OBJ, MNG_LC_START);
- #endif
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- iRetcode = create_obj_general (pData, sizeof (mng_ang_obj), mng_free_ang_obj,
- mng_process_ang_obj, &pTemp);
- if (iRetcode)
- return iRetcode;
- pANG = (mng_ang_objp)pTemp;
- #else
- MNG_ALLOC (pData, pANG, sizeof (mng_ang_obj));
- pANG->sHeader.fCleanup = mng_free_ang_obj;
- pANG->sHeader.fProcess = mng_process_ang_obj;
- #endif
- #ifndef MNG_OPTIMIZE_CHUNKREADER
- pANG->iNumframes = iNumframes;
- pANG->iTickspersec = iTickspersec;
- pANG->iNumplays = iNumplays;
- pANG->iTilewidth = iTilewidth;
- pANG->iTileheight = iTileheight;
- pANG->iInterlace = iInterlace;
- pANG->iStillused = iStillused;
- #else
- pANG->iNumframes = ((mng_ahdrp)pEntry)->iNumframes;
- pANG->iTickspersec = ((mng_ahdrp)pEntry)->iTickspersec;
- pANG->iNumplays = ((mng_ahdrp)pEntry)->iNumplays;
- pANG->iTilewidth = ((mng_ahdrp)pEntry)->iTilewidth;
- pANG->iTileheight = ((mng_ahdrp)pEntry)->iTileheight;
- pANG->iInterlace = ((mng_ahdrp)pEntry)->iInterlace;
- pANG->iStillused = ((mng_ahdrp)pEntry)->iStillused;
- #endif
- pData->pANG = pANG;
- pData->eImagetype = mng_it_ang;
- iRetcode = mng_process_display_ang (pData);
- if (iRetcode)
- return iRetcode;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_CREATE_ANG_OBJ, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- mng_retcode mng_free_ang_obj (mng_datap pData,
- mng_objectp pObject)
- {
- mng_ang_objp pANG = (mng_ang_objp)pObject;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANG_OBJ, MNG_LC_START);
- #endif
- if (pANG->iTilessize)
- MNG_FREEX (pData, pANG->pTiles, pANG->iTilessize);
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- MNG_FREEX (pData, pANG, sizeof (mng_ang_obj));
- #endif
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_FREE_ANG_OBJ, MNG_LC_END);
- #endif
- #ifndef MNG_OPTIMIZE_OBJCLEANUP
- return MNG_NOERROR;
- #else
- return mng_free_obj_general(pData, pObject);
- #endif
- }
- /* ************************************************************************** */
- mng_retcode mng_process_ang_obj (mng_datap pData,
- mng_objectp pObject)
- {
- mng_ang_objp pANG = (mng_ang_objp)pObject;
- mng_uint8p pTile = (mng_uint8p)pANG->pTiles;
- mng_retcode iRetcode;
- mng_int32 iCnt, iMax;
- mng_uint32 iTicks;
- mng_int32 iXoffset, iYoffset;
- mng_uint8 iSource;
- mng_ani_loopp pLOOP;
- mng_ani_endlp pENDL;
- mng_ani_framp pFRAM;
- mng_ani_movep pMOVE;
- mng_ani_showp pSHOW;
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANG_OBJ, MNG_LC_START);
- #endif
- /* let's create the MNG animation directives from this */
- iMax = pANG->iNumframes;
- /* set up MNG impersonation */
- pData->iTicks = pANG->iTickspersec;
- pData->iLayercount = iMax;
- if (pANG->iNumplays != 1) /* create a LOOP/ENDL pair ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- iRetcode = create_obj_general (pData, sizeof (mng_ani_loop),
- mng_free_ani_loop, mng_process_ani_loop,
- &((mng_ptr)pLOOP));
- if (iRetcode)
- return iRetcode;
- #else
- MNG_ALLOC (pData, pLOOP, sizeof (mng_ani_loop));
- pLOOP->sHeader.fCleanup = mng_free_ani_loop;
- pLOOP->sHeader.fProcess = mng_process_ani_loop;
- #endif
- pLOOP->iLevel = 1;
- if (pANG->iNumplays)
- pLOOP->iRepeatcount = pANG->iNumplays;
- else
- pLOOP->iRepeatcount = 0xFFFFFFFFl;
- mng_add_ani_object (pData, (mng_object_headerp)pLOOP);
- }
- for (iCnt = 0; iCnt < iMax; iCnt++)
- {
- iTicks = mng_get_uint32 (pTile);
- iXoffset = mng_get_int32 (pTile+4);
- iYoffset = mng_get_int32 (pTile+8);
- iSource = *(pTile+12);
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- iRetcode = create_obj_general (pData, sizeof (mng_ani_fram),
- mng_free_obj_general, mng_process_ani_fram,
- &((mng_ptr)pFRAM));
- if (iRetcode)
- return iRetcode;
- #else
- MNG_ALLOC (pData, pFRAM, sizeof (mng_ani_fram));
- pFRAM->sHeader.fCleanup = mng_free_ani_fram;
- pFRAM->sHeader.fProcess = mng_process_ani_fram;
- #endif
- pFRAM->iFramemode = 4;
- pFRAM->iChangedelay = 1;
- pFRAM->iDelay = iTicks;
- mng_add_ani_object (pData, (mng_object_headerp)pFRAM);
- if (!iSource)
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- iRetcode = create_obj_general (pData, sizeof (mng_ani_move),
- mng_free_obj_general,
- mng_process_ani_move,
- &((mng_ptr)pMOVE));
- if (iRetcode)
- return iRetcode;
- #else
- MNG_ALLOC (pData, pMOVE, sizeof (mng_ani_move));
- pMOVE->sHeader.fCleanup = mng_free_ani_move;
- pMOVE->sHeader.fProcess = mng_process_ani_move;
- #endif
- pMOVE->iFirstid = 1;
- pMOVE->iLastid = 1;
- pMOVE->iLocax = -iXoffset;
- pMOVE->iLocay = -iYoffset;
- mng_add_ani_object (pData, (mng_object_headerp)pMOVE);
- }
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- iRetcode = create_obj_general (pData, sizeof (mng_ani_show),
- mng_free_obj_general, mng_process_ani_show,
- &((mng_ptr)pSHOW));
- if (iRetcode)
- return iRetcode;
- #else
- MNG_ALLOC (pData, pSHOW, sizeof (mng_ani_show));
- pSHOW->sHeader.fCleanup = mng_free_ani_show;
- pSHOW->sHeader.fProcess = mng_process_ani_show;
- #endif
- if (iSource)
- pSHOW->iFirstid = 0;
- else
- pSHOW->iFirstid = 1;
- pSHOW->iLastid = pSHOW->iFirstid;
- mng_add_ani_object (pData, (mng_object_headerp)pSHOW);
- pTile += sizeof(mng_adat_tile);
- }
- if (pANG->iNumplays != 1) /* create a LOOP/ENDL pair ? */
- {
- #ifdef MNG_OPTIMIZE_OBJCLEANUP
- iRetcode = create_obj_general (pData, sizeof (mng_ani_endl),
- mng_free_obj_general, mng_process_ani_endl,
- &((mng_ptr)pENDL));
- if (iRetcode)
- return iRetcode;
- #else
- MNG_ALLOC (pData, pENDL, sizeof (mng_ani_endl));
- pENDL->sHeader.fCleanup = mng_free_ani_endl;
- pENDL->sHeader.fProcess = mng_process_ani_endl;
- #endif
- pENDL->iLevel = 1;
- mng_add_ani_object (pData, (mng_object_headerp)pENDL);
- }
- #ifdef MNG_SUPPORT_TRACE
- MNG_TRACE (pData, MNG_FN_PROCESS_ANG_OBJ, MNG_LC_END);
- #endif
- return MNG_NOERROR;
- }
- /* ************************************************************************** */
- #endif /* MNG_INCLUDE_ANG_PROPOSAL */
- /* ************************************************************************** */
- #endif /* MNG_INCLUDE_DISPLAY_PROCS */
- /* ************************************************************************** */
- /* * end of file * */
- /* ************************************************************************** */
|