6420
6434
#endif /* MNG_SUPPORT_DYNAMICMNG */
6422
6436
/* ************************************************************************** */
6437
/* ************************************************************************** */
6439
#ifdef MNG_INCLUDE_MPNG_PROPOSAL
6441
/* ************************************************************************** */
6443
#ifndef MNG_OPTIMIZE_CHUNKREADER
6444
mng_retcode mng_create_mpng_obj (mng_datap pData,
6445
mng_uint32 iFramewidth,
6446
mng_uint32 iFrameheight,
6447
mng_uint16 iNumplays,
6448
mng_uint16 iTickspersec,
6449
mng_uint32 iFramessize,
6452
mng_retcode mng_create_mpng_obj (mng_datap pData,
6456
mng_mpng_objp pMPNG;
6458
mng_retcode iRetcode;
6460
mng_int32 iCnt, iMax;
6461
mng_uint32 iX, iY, iWidth, iHeight;
6462
mng_int32 iXoffset, iYoffset;
6466
mng_ani_loopp pLOOP;
6467
mng_ani_endlp pENDL;
6468
mng_ani_framp pFRAM;
6469
mng_ani_movep pMOVE;
6470
mng_ani_clipp pCLIP;
6471
mng_ani_showp pSHOW;
6473
#ifdef MNG_SUPPORT_TRACE
6474
MNG_TRACE (pData, MNG_FN_CREATE_MPNG_OBJ, MNG_LC_START);
6477
#ifdef MNG_OPTIMIZE_OBJCLEANUP
6478
iRetcode = create_obj_general (pData, sizeof (mng_mpng_obj), mng_free_mpng_obj,
6479
mng_process_mpng_obj, &pTemp);
6482
pMPNG = (mng_mpng_objp)pTemp;
6484
MNG_ALLOC (pData, pMPNG, sizeof (mng_mpng_obj));
6486
pMPNG->sHeader.fCleanup = mng_free_mpng_obj;
6487
pMPNG->sHeader.fProcess = mng_process_mpng_obj;
6490
#ifndef MNG_OPTIMIZE_CHUNKREADER
6491
pMPNG->iFramewidth = iFramewidth;
6492
pMPNG->iFrameheight = iFrameheight;
6493
pMPNG->iNumplays = iNumplays;
6494
pMPNG->iTickspersec = iTickspersec;
6495
pMPNG->iFramessize = iFramessize;
6499
MNG_ALLOC (pData, pMPNG->pFrames, iFramessize);
6500
MNG_COPY (pMPNG->pFrames, pFrames, iFramessize);
6503
pMPNG->iFramewidth = ((mng_mpngp)pEntry)->iFramewidth;
6504
pMPNG->iFrameheight = ((mng_mpngp)pEntry)->iFrameheight;
6505
pMPNG->iNumplays = ((mng_mpngp)pEntry)->iNumplays;
6506
pMPNG->iTickspersec = ((mng_mpngp)pEntry)->iTickspersec;
6507
pMPNG->iFramessize = ((mng_mpngp)pEntry)->iFramessize;
6509
if (pMPNG->iFramessize)
6511
MNG_ALLOC (pData, pMPNG->pFrames, pMPNG->iFramessize);
6512
MNG_COPY (pMPNG->pFrames, ((mng_mpngp)pEntry)->pFrames, pMPNG->iFramessize);
6516
pData->pMPNG = pMPNG;
6517
pData->eImagetype = mng_it_mpng;
6519
iRetcode = mng_process_display_mpng (pData);
6523
/* now let's create the MNG animation directives from this */
6525
pFrame = (mng_uint8p)pMPNG->pFrames;
6526
iMax = pMPNG->iFramessize / 26;
6527
/* set up MNG impersonation */
6528
pData->iTicks = pMPNG->iTickspersec;
6529
pData->iLayercount = iMax;
6531
if (pMPNG->iNumplays != 1) /* create a LOOP/ENDL pair ? */
6533
#ifdef MNG_OPTIMIZE_OBJCLEANUP
6534
iRetcode = create_obj_general (pData, sizeof (mng_ani_loop),
6535
mng_free_ani_loop, mng_process_ani_loop,
6540
MNG_ALLOC (pData, pLOOP, sizeof (mng_ani_loop));
6542
pLOOP->sHeader.fCleanup = mng_free_ani_loop;
6543
pLOOP->sHeader.fProcess = mng_process_ani_loop;
6547
if (pMPNG->iNumplays)
6548
pLOOP->iRepeatcount = pMPNG->iNumplays;
6550
pLOOP->iRepeatcount = 0xFFFFFFFFl;
6552
mng_add_ani_object (pData, (mng_object_headerp)pLOOP);
6555
bNewframe = MNG_TRUE; /* create the frame display objects */
6557
for (iCnt = 0; iCnt < iMax; iCnt++)
6559
iX = mng_get_uint32 (pFrame);
6560
iY = mng_get_uint32 (pFrame+4);
6561
iWidth = mng_get_uint32 (pFrame+8);
6562
iHeight = mng_get_uint32 (pFrame+12);
6563
iXoffset = mng_get_int32 (pFrame+16);
6564
iYoffset = mng_get_int32 (pFrame+20);
6565
iTicks = mng_get_uint16 (pFrame+24);
6570
mng_uint8p pTemp = pFrame+26;
6571
mng_int32 iTemp = iCnt+1;
6573
while ((iTemp < iMax) && (!iDelay))
6575
iDelay = mng_get_uint16 (pTemp+24);
6583
#ifdef MNG_OPTIMIZE_OBJCLEANUP
6584
iRetcode = create_obj_general (pData, sizeof (mng_ani_fram),
6585
mng_free_obj_general, mng_process_ani_fram,
6590
MNG_ALLOC (pData, pFRAM, sizeof (mng_ani_fram));
6592
pFRAM->sHeader.fCleanup = mng_free_ani_fram;
6593
pFRAM->sHeader.fProcess = mng_process_ani_fram;
6596
pFRAM->iFramemode = 4;
6597
pFRAM->iChangedelay = 1;
6598
pFRAM->iDelay = iDelay;
6600
mng_add_ani_object (pData, (mng_object_headerp)pFRAM);
6603
#ifdef MNG_OPTIMIZE_OBJCLEANUP
6604
iRetcode = create_obj_general (pData, sizeof (mng_ani_move),
6605
mng_free_obj_general,
6606
mng_process_ani_move,
6611
MNG_ALLOC (pData, pMOVE, sizeof (mng_ani_move));
6613
pMOVE->sHeader.fCleanup = mng_free_ani_move;
6614
pMOVE->sHeader.fProcess = mng_process_ani_move;
6617
pMOVE->iLocax = iXoffset - (mng_int32)iX;
6618
pMOVE->iLocay = iYoffset - (mng_int32)iY;
6620
mng_add_ani_object (pData, (mng_object_headerp)pMOVE);
6622
#ifdef MNG_OPTIMIZE_OBJCLEANUP
6623
iRetcode = create_obj_general (pData, sizeof (mng_ani_clip),
6624
mng_free_obj_general,
6625
mng_process_ani_clip,
6630
MNG_ALLOC (pData, pCLIP, sizeof (mng_ani_clip));
6632
pCLIP->sHeader.fCleanup = mng_free_ani_clip;
6633
pCLIP->sHeader.fProcess = mng_process_ani_clip;
6636
pCLIP->iClipl = iXoffset;
6637
pCLIP->iClipr = iXoffset + (mng_int32)iWidth;
6638
pCLIP->iClipt = iYoffset;
6639
pCLIP->iClipb = iYoffset + (mng_int32)iHeight;
6641
mng_add_ani_object (pData, (mng_object_headerp)pCLIP);
6643
#ifdef MNG_OPTIMIZE_OBJCLEANUP
6644
iRetcode = create_obj_general (pData, sizeof (mng_ani_show),
6645
mng_free_obj_general, mng_process_ani_show,
6650
MNG_ALLOC (pData, pSHOW, sizeof (mng_ani_show));
6652
pSHOW->sHeader.fCleanup = mng_free_ani_show;
6653
pSHOW->sHeader.fProcess = mng_process_ani_show;
6656
mng_add_ani_object (pData, (mng_object_headerp)pSHOW);
6658
bNewframe = (mng_bool)iTicks;
6662
if (pMPNG->iNumplays != 1) /* create a LOOP/ENDL pair ? */
6664
#ifdef MNG_OPTIMIZE_OBJCLEANUP
6665
iRetcode = create_obj_general (pData, sizeof (mng_ani_endl),
6666
mng_free_obj_general, mng_process_ani_endl,
6671
MNG_ALLOC (pData, pENDL, sizeof (mng_ani_endl));
6673
pENDL->sHeader.fCleanup = mng_free_ani_endl;
6674
pENDL->sHeader.fProcess = mng_process_ani_endl;
6679
mng_add_ani_object (pData, (mng_object_headerp)pENDL);
6682
#ifdef MNG_SUPPORT_TRACE
6683
MNG_TRACE (pData, MNG_FN_CREATE_MPNG_OBJ, MNG_LC_END);
6689
/* ************************************************************************** */
6691
mng_retcode mng_free_mpng_obj (mng_datap pData,
6692
mng_objectp pObject)
6694
mng_mpng_objp pMPNG = (mng_mpng_objp)pObject;
6696
#ifdef MNG_SUPPORT_TRACE
6697
MNG_TRACE (pData, MNG_FN_FREE_MPNG_OBJ, MNG_LC_START);
6700
if (pMPNG->iFramessize)
6701
MNG_FREEX (pData, pMPNG->pFrames, pMPNG->iFramessize);
6703
#ifndef MNG_OPTIMIZE_OBJCLEANUP
6704
MNG_FREEX (pData, pMPNG, sizeof (mng_mpng_obj));
6707
#ifdef MNG_SUPPORT_TRACE
6708
MNG_TRACE (pData, MNG_FN_FREE_MPNG_OBJ, MNG_LC_END);
6711
#ifndef MNG_OPTIMIZE_OBJCLEANUP
6714
return mng_free_obj_general(pData, pObject);
6718
/* ************************************************************************** */
6720
mng_retcode mng_process_mpng_obj (mng_datap pData,
6721
mng_objectp pObject)
6726
/* ************************************************************************** */
6728
#endif /* MNG_INCLUDE_MPNG_PROPOSAL */
6730
/* ************************************************************************** */
6731
/* ************************************************************************** */
6733
#ifdef MNG_INCLUDE_ANG_PROPOSAL
6735
/* ************************************************************************** */
6737
#ifndef MNG_OPTIMIZE_CHUNKREADER
6738
mng_retcode mng_create_ang_obj (mng_datap pData,
6739
mng_uint32 iNumframes,
6740
mng_uint32 iTickspersec,
6741
mng_uint32 iNumplays,
6742
mng_uint32 iTilewidth,
6743
mng_uint32 iTileheight,
6744
mng_uint8 iInterlace,
6745
mng_uint8 iStillused)
6747
mng_retcode mng_create_ang_obj (mng_datap pData,
6753
mng_retcode iRetcode;
6755
#ifdef MNG_SUPPORT_TRACE
6756
MNG_TRACE (pData, MNG_FN_CREATE_ANG_OBJ, MNG_LC_START);
6759
#ifdef MNG_OPTIMIZE_OBJCLEANUP
6760
iRetcode = create_obj_general (pData, sizeof (mng_ang_obj), mng_free_ang_obj,
6761
mng_process_ang_obj, &pTemp);
6764
pANG = (mng_ang_objp)pTemp;
6766
MNG_ALLOC (pData, pANG, sizeof (mng_ang_obj));
6768
pANG->sHeader.fCleanup = mng_free_ang_obj;
6769
pANG->sHeader.fProcess = mng_process_ang_obj;
6772
#ifndef MNG_OPTIMIZE_CHUNKREADER
6773
pANG->iNumframes = iNumframes;
6774
pANG->iTickspersec = iTickspersec;
6775
pANG->iNumplays = iNumplays;
6776
pANG->iTilewidth = iTilewidth;
6777
pANG->iTileheight = iTileheight;
6778
pANG->iInterlace = iInterlace;
6779
pANG->iStillused = iStillused;
6781
pANG->iNumframes = ((mng_ahdrp)pEntry)->iNumframes;
6782
pANG->iTickspersec = ((mng_ahdrp)pEntry)->iTickspersec;
6783
pANG->iNumplays = ((mng_ahdrp)pEntry)->iNumplays;
6784
pANG->iTilewidth = ((mng_ahdrp)pEntry)->iTilewidth;
6785
pANG->iTileheight = ((mng_ahdrp)pEntry)->iTileheight;
6786
pANG->iInterlace = ((mng_ahdrp)pEntry)->iInterlace;
6787
pANG->iStillused = ((mng_ahdrp)pEntry)->iStillused;
6791
pData->eImagetype = mng_it_ang;
6793
iRetcode = mng_process_display_ang (pData);
6797
#ifdef MNG_SUPPORT_TRACE
6798
MNG_TRACE (pData, MNG_FN_CREATE_ANG_OBJ, MNG_LC_END);
6804
/* ************************************************************************** */
6806
mng_retcode mng_free_ang_obj (mng_datap pData,
6807
mng_objectp pObject)
6809
mng_ang_objp pANG = (mng_ang_objp)pObject;
6811
#ifdef MNG_SUPPORT_TRACE
6812
MNG_TRACE (pData, MNG_FN_FREE_ANG_OBJ, MNG_LC_START);
6815
if (pANG->iTilessize)
6816
MNG_FREEX (pData, pANG->pTiles, pANG->iTilessize);
6818
#ifndef MNG_OPTIMIZE_OBJCLEANUP
6819
MNG_FREEX (pData, pANG, sizeof (mng_ang_obj));
6822
#ifdef MNG_SUPPORT_TRACE
6823
MNG_TRACE (pData, MNG_FN_FREE_ANG_OBJ, MNG_LC_END);
6826
#ifndef MNG_OPTIMIZE_OBJCLEANUP
6829
return mng_free_obj_general(pData, pObject);
6833
/* ************************************************************************** */
6835
mng_retcode mng_process_ang_obj (mng_datap pData,
6836
mng_objectp pObject)
6838
mng_ang_objp pANG = (mng_ang_objp)pObject;
6839
mng_uint8p pTile = (mng_uint8p)pANG->pTiles;
6840
mng_retcode iRetcode;
6841
mng_int32 iCnt, iMax;
6843
mng_int32 iXoffset, iYoffset;
6845
mng_ani_loopp pLOOP;
6846
mng_ani_endlp pENDL;
6847
mng_ani_framp pFRAM;
6848
mng_ani_movep pMOVE;
6849
mng_ani_showp pSHOW;
6851
#ifdef MNG_SUPPORT_TRACE
6852
MNG_TRACE (pData, MNG_FN_PROCESS_ANG_OBJ, MNG_LC_START);
6855
/* let's create the MNG animation directives from this */
6857
iMax = pANG->iNumframes;
6858
/* set up MNG impersonation */
6859
pData->iTicks = pANG->iTickspersec;
6860
pData->iLayercount = iMax;
6862
if (pANG->iNumplays != 1) /* create a LOOP/ENDL pair ? */
6864
#ifdef MNG_OPTIMIZE_OBJCLEANUP
6865
iRetcode = create_obj_general (pData, sizeof (mng_ani_loop),
6866
mng_free_ani_loop, mng_process_ani_loop,
6871
MNG_ALLOC (pData, pLOOP, sizeof (mng_ani_loop));
6873
pLOOP->sHeader.fCleanup = mng_free_ani_loop;
6874
pLOOP->sHeader.fProcess = mng_process_ani_loop;
6878
if (pANG->iNumplays)
6879
pLOOP->iRepeatcount = pANG->iNumplays;
6881
pLOOP->iRepeatcount = 0xFFFFFFFFl;
6883
mng_add_ani_object (pData, (mng_object_headerp)pLOOP);
6886
for (iCnt = 0; iCnt < iMax; iCnt++)
6888
iTicks = mng_get_uint32 (pTile);
6889
iXoffset = mng_get_int32 (pTile+4);
6890
iYoffset = mng_get_int32 (pTile+8);
6891
iSource = *(pTile+12);
6893
#ifdef MNG_OPTIMIZE_OBJCLEANUP
6894
iRetcode = create_obj_general (pData, sizeof (mng_ani_fram),
6895
mng_free_obj_general, mng_process_ani_fram,
6900
MNG_ALLOC (pData, pFRAM, sizeof (mng_ani_fram));
6902
pFRAM->sHeader.fCleanup = mng_free_ani_fram;
6903
pFRAM->sHeader.fProcess = mng_process_ani_fram;
6906
pFRAM->iFramemode = 4;
6907
pFRAM->iChangedelay = 1;
6908
pFRAM->iDelay = iTicks;
6910
mng_add_ani_object (pData, (mng_object_headerp)pFRAM);
6914
#ifdef MNG_OPTIMIZE_OBJCLEANUP
6915
iRetcode = create_obj_general (pData, sizeof (mng_ani_move),
6916
mng_free_obj_general,
6917
mng_process_ani_move,
6922
MNG_ALLOC (pData, pMOVE, sizeof (mng_ani_move));
6924
pMOVE->sHeader.fCleanup = mng_free_ani_move;
6925
pMOVE->sHeader.fProcess = mng_process_ani_move;
6928
pMOVE->iFirstid = 1;
6930
pMOVE->iLocax = -iXoffset;
6931
pMOVE->iLocay = -iYoffset;
6933
mng_add_ani_object (pData, (mng_object_headerp)pMOVE);
6936
#ifdef MNG_OPTIMIZE_OBJCLEANUP
6937
iRetcode = create_obj_general (pData, sizeof (mng_ani_show),
6938
mng_free_obj_general, mng_process_ani_show,
6943
MNG_ALLOC (pData, pSHOW, sizeof (mng_ani_show));
6945
pSHOW->sHeader.fCleanup = mng_free_ani_show;
6946
pSHOW->sHeader.fProcess = mng_process_ani_show;
6950
pSHOW->iFirstid = 0;
6952
pSHOW->iFirstid = 1;
6953
pSHOW->iLastid = pSHOW->iFirstid;
6955
mng_add_ani_object (pData, (mng_object_headerp)pSHOW);
6957
pTile += sizeof(mng_adat_tile);
6960
if (pANG->iNumplays != 1) /* create a LOOP/ENDL pair ? */
6962
#ifdef MNG_OPTIMIZE_OBJCLEANUP
6963
iRetcode = create_obj_general (pData, sizeof (mng_ani_endl),
6964
mng_free_obj_general, mng_process_ani_endl,
6969
MNG_ALLOC (pData, pENDL, sizeof (mng_ani_endl));
6971
pENDL->sHeader.fCleanup = mng_free_ani_endl;
6972
pENDL->sHeader.fProcess = mng_process_ani_endl;
6977
mng_add_ani_object (pData, (mng_object_headerp)pENDL);
6980
#ifdef MNG_SUPPORT_TRACE
6981
MNG_TRACE (pData, MNG_FN_PROCESS_ANG_OBJ, MNG_LC_END);
6987
/* ************************************************************************** */
6989
#endif /* MNG_INCLUDE_ANG_PROPOSAL */
6991
/* ************************************************************************** */
6424
6993
#endif /* MNG_INCLUDE_DISPLAY_PROCS */