1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
36
37
38
43
57
58
64
65
66
67
68
69
70
71
72
73
74
75
76
77
82
83
84
85
86
87
88
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
120
121
126
127
128
129
130
135
136
141
142
143
144
149
150
151
152
153
154
155
160
161
166
167
168
173
174
175
176
181
182
183
184
185
190
191
192
193
194
195
202
203
208
209
210
215
216
221
222
223
228
229
230
231
232
233
234
235
236
237
238
243
244
245
246
247
248
249
254
255
260
261
262
267
268
273
274
275
280
281
286
287
288
289
290
291
296
297
298
299
300
301
306
307
308
309
310
311
312
313
314
315
320
327
328
333
334
335
336
337
338
348
349
350
351
356
357
358
359
360
361
362
363
364
365
366
367
368
369
373
374
375
376
377
381
384
385
386
387
399
400
401
402
403
407
408
412
413
414
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
437
438
439
440
441
442
443
444
445
448
449
450
451
452
453
457
461
462
463
464
465
468
469
476
477
484
485
486
497
498
499
502
503
504
505
506
507
508
509
515
516
517
518
519
520
521
522
526
527
534
535
536
537
538
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
572
573
574
581
582
583
584
603
604
605
606
607
608
609
610
611
616
634
635
640
647
648
653
654
655
656
657
658
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
719
740
741
746
776
777
782
798
799
805
806
807
808
809
810
811
812
813
814
815
819
823
824
827
828
829
830
831
832
833
834
835
840
841
842
843
844
845
848
849
850
851
852
853
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
881
882
886
890
891
892
893
894
895
902
903
904
922
923
926
927
928
929
930
931
932
935
936
937
938
939
940
941
942
943
948
949
950
951
952
953
960
961
962
963
970
971
972
973
974
980
981
982
/* ... */
#include <string.h>
#include "GUI_Private.h"
#include "GUI_AVI.h"
#if GUI_WINSUPPORT
#include "WM.h"
#endif
Includes
U8* const AVI_VIDS_FLAG_TBL[2]={(U8 *)"00dc",(U8 *)"01dc"};
U8* const AVI_AUDS_FLAG_TBL[2]={(U8 *)"00wb",(U8 *)"01wb"};
int status = 0;Exported constants
/* ... */
U16 _AVI_SearchID(U8* buf,U16 size,U8 *id)
{
U16 i;
size-=4;
for(i=0;i<size;i++)
{
if(buf[i] == id[0])
if(buf[i+1] == id[1])
if(buf[i+2] == id[2])
if(buf[i+3] == id[3])
return i;
}for (i=0;i
return 0;
}{ ... }
/* ... */
AVISTATUS _AVI_GetStreamInfo(GUI_AVI_HANDLE havi, U8* buf)
{
AVI_CONTEXT * pavi;
if (havi) {
pavi = (AVI_CONTEXT *)GUI_LOCK_H(havi); {
pavi->aviInfo.StreamID = MAKEWORD (buf+2);
pavi->aviInfo.StreamSize = MAKEDWORD (buf+4);
if(pavi->aviInfo.StreamSize%2)
pavi->aviInfo.StreamSize++;
if((pavi->aviInfo.StreamID == AVI_VIDS_FLAG) || (pavi->aviInfo.StreamID == AVI_AUDS_FLAG))
{
GUI_UNLOCK_H(pavi);
return AVI_OK;
}if ((pavi->aviInfo.StreamID == AVI_VIDS_FLAG) || (pavi->aviInfo.StreamID == AVI_AUDS_FLAG)) { ... }
...} GUI_UNLOCK_H(pavi);
}if (havi) { ... }
return AVI_STREAM_ERR;
}{ ... }
/* ... */
AVISTATUS _AVI_Init(GUI_AVI_HANDLE havi, U8 *buf, U16 size)
{
U16 offset;
U8 *tbuf;
AVISTATUS res = AVI_OK;
AVI_HEADER *aviheader;
LIST_HEADER *listheader;
AVIH_HEADER *avihheader;
STRH_HEADER *strhheader;
STRF_BMPHEADER *bmpheader;
STRF_WAVHEADER *wavheader;
AVI_CONTEXT * pavi;
if (havi) {
pavi = (AVI_CONTEXT *)GUI_LOCK_H(havi); {
tbuf=buf;
aviheader=(AVI_HEADER*)buf;
if(aviheader->RiffID != AVI_RIFF_ID)
{
GUI_UNLOCK_H(pavi);
return AVI_RIFF_ERR;
}if (aviheader->RiffID != AVI_RIFF_ID) { ... }
if(aviheader->AviID != AVI_AVI_ID)
{
GUI_UNLOCK_H(pavi);
return AVI_AVI_ERR;
}if (aviheader->AviID != AVI_AVI_ID) { ... }
buf+=sizeof(AVI_HEADER);
listheader=(LIST_HEADER*)(buf);
if(listheader->ListID != AVI_LIST_ID)
{
GUI_UNLOCK_H(pavi);
return AVI_LIST_ERR;
}if (listheader->ListID != AVI_LIST_ID) { ... }
if(listheader->ListType != AVI_HDRL_ID)
{
GUI_UNLOCK_H(pavi);
return AVI_HDRL_ERR;
}if (listheader->ListType != AVI_HDRL_ID) { ... }
buf+=sizeof(LIST_HEADER);
avihheader=(AVIH_HEADER*)(buf);
if(avihheader->BlockID != AVI_AVIH_ID)
{
GUI_UNLOCK_H(pavi);
return AVI_AVIH_ERR;
}if (avihheader->BlockID != AVI_AVIH_ID) { ... }
pavi->aviInfo.SecPerFrame=avihheader->SecPerFrame;
pavi->aviInfo.TotalFrame=avihheader->TotalFrame;
buf+=avihheader->BlockSize+8;
listheader=(LIST_HEADER*)(buf);
if(listheader->ListID != AVI_LIST_ID)
{
GUI_UNLOCK_H(pavi);
return AVI_LIST_ERR;
}if (listheader->ListID != AVI_LIST_ID) { ... }
if(listheader->ListType != AVI_STRL_ID)
{
GUI_UNLOCK_H(pavi);
return AVI_STRL_ERR;
}if (listheader->ListType != AVI_STRL_ID) { ... }
strhheader=(STRH_HEADER*)(buf+12);
if(strhheader->BlockID != AVI_STRH_ID)
{
GUI_UNLOCK_H(pavi);
return AVI_STRH_ERR;
}if (strhheader->BlockID != AVI_STRH_ID) { ... }
if(strhheader->StreamType == AVI_VIDS_STREAM)
{
if(strhheader->Handler != AVI_FORMAT_MJPG)
{
GUI_UNLOCK_H(pavi);
return AVI_FORMAT_ERR;
}if (strhheader->Handler != AVI_FORMAT_MJPG) { ... }
pavi->aviInfo.VideoFLAG=(U8*)AVI_VIDS_FLAG_TBL[0];
pavi->aviInfo.AudioFLAG=(U8*)AVI_AUDS_FLAG_TBL[1];
bmpheader=(STRF_BMPHEADER*)(buf+12+strhheader->BlockSize+8);
if(bmpheader->BlockID != AVI_STRF_ID)
{
GUI_UNLOCK_H(pavi);
return AVI_STRF_ERR;
}if (bmpheader->BlockID != AVI_STRF_ID) { ... }
pavi->aviInfo.Width=bmpheader->bmiHeader.Width;
pavi->aviInfo.Height=bmpheader->bmiHeader.Height;
buf+=listheader->BlockSize+8;
listheader=(LIST_HEADER*)(buf);
if(listheader->ListID != AVI_LIST_ID)
{
pavi->aviInfo.SampleRate=0;
pavi->aviInfo.Channels=0;
pavi->aviInfo.AudioType=0;
}if (listheader->ListID != AVI_LIST_ID) { ... }else
{
if(listheader->ListType != AVI_STRL_ID)
{
GUI_UNLOCK_H(pavi);
return AVI_STRL_ERR;
}if (listheader->ListType != AVI_STRL_ID) { ... }
strhheader=(STRH_HEADER*)(buf+12);
if(strhheader->BlockID != AVI_STRH_ID)
{
GUI_UNLOCK_H(pavi);
return AVI_STRH_ERR;
}if (strhheader->BlockID != AVI_STRH_ID) { ... }
if(strhheader->StreamType != AVI_AUDS_STREAM)
{
GUI_UNLOCK_H(pavi);
return AVI_FORMAT_ERR;
}if (strhheader->StreamType != AVI_AUDS_STREAM) { ... }
wavheader=(STRF_WAVHEADER*)(buf+12+strhheader->BlockSize+8);
if(wavheader->BlockID != AVI_STRF_ID)
{
GUI_UNLOCK_H(pavi);
return AVI_STRF_ERR;
}if (wavheader->BlockID != AVI_STRF_ID) { ... }
pavi->aviInfo.SampleRate=wavheader->SampleRate;
pavi->aviInfo.Channels=wavheader->Channels;
pavi->aviInfo.AudioType=wavheader->FormatTag;
}
}if (strhheader->StreamType == AVI_VIDS_STREAM) { ... }else if(strhheader->StreamType == AVI_AUDS_STREAM)
{
pavi->aviInfo.VideoFLAG=(U8*)AVI_VIDS_FLAG_TBL[1];
pavi->aviInfo.AudioFLAG=(U8*)AVI_AUDS_FLAG_TBL[0];
wavheader=(STRF_WAVHEADER*)(buf+12+strhheader->BlockSize+8);
if(wavheader->BlockID != AVI_STRF_ID)
{
GUI_UNLOCK_H(pavi);
return AVI_STRF_ERR;
}if (wavheader->BlockID != AVI_STRF_ID) { ... }
pavi->aviInfo.SampleRate=wavheader->SampleRate;
pavi->aviInfo.Channels=wavheader->Channels;
pavi->aviInfo.AudioType=wavheader->FormatTag;
buf+=listheader->BlockSize+8;
listheader=(LIST_HEADER*)(buf);
if(listheader->ListID != AVI_LIST_ID)
{
GUI_UNLOCK_H(pavi);
return AVI_LIST_ERR;
}if (listheader->ListID != AVI_LIST_ID) { ... }
if(listheader->ListType != AVI_STRL_ID)
{
GUI_UNLOCK_H(pavi);
return AVI_STRL_ERR;
}if (listheader->ListType != AVI_STRL_ID) { ... }
strhheader=(STRH_HEADER*)(buf+12);
if(strhheader->BlockID != AVI_STRH_ID)
{
GUI_UNLOCK_H(pavi);
return AVI_STRH_ERR;
}if (strhheader->BlockID != AVI_STRH_ID) { ... }
if(strhheader->StreamType != AVI_VIDS_STREAM)
{
GUI_UNLOCK_H(pavi);
return AVI_FORMAT_ERR;
}if (strhheader->StreamType != AVI_VIDS_STREAM) { ... }
bmpheader=(STRF_BMPHEADER*)(buf+12+strhheader->BlockSize+8);
if(bmpheader->BlockID != AVI_STRF_ID)
{
GUI_UNLOCK_H(pavi);
return AVI_STRF_ERR;
}if (bmpheader->BlockID != AVI_STRF_ID) { ... }
if(bmpheader->bmiHeader.Compression != AVI_FORMAT_MJPG)
{
GUI_UNLOCK_H(pavi);
return AVI_FORMAT_ERR;
}if (bmpheader->bmiHeader.Compression != AVI_FORMAT_MJPG) { ... }
pavi->aviInfo.Width=bmpheader->bmiHeader.Width;
pavi->aviInfo.Height=bmpheader->bmiHeader.Height;
}else if (strhheader->StreamType == AVI_AUDS_STREAM) { ... }
offset=_AVI_SearchID(tbuf,size,(U8 *)"movi");
if(offset == 0)
{
GUI_UNLOCK_H(pavi);
return AVI_MOVI_ERR;
}if (offset == 0) { ... }
if(pavi->aviInfo.SampleRate)
{
tbuf+=offset;
offset=_AVI_SearchID(tbuf,size,pavi->aviInfo.AudioFLAG);
if(offset == 0)
{
GUI_UNLOCK_H(pavi);
return AVI_STREAM_ERR;
}if (offset == 0) { ... }
tbuf+=offset+4;
pavi->aviInfo.AudioBufSize=*((U16*)tbuf);
}if (pavi->aviInfo.SampleRate) { ... }
...}GUI_UNLOCK_H(pavi);
}if (havi) { ... }
return res;
}{ ... }
/* ... */
static int _GetData(void * p, const U8 ** ppData, unsigned NumBytes, U32 Off) {
U8 * pSrc;
pSrc = (U8 *)p;
GUI_MEMCPY((U8 *)*ppData, pSrc + Off, NumBytes);
return NumBytes;
}{ ... }
/* ... */
static int _Stopavi(GUI_AVI_HANDLE havi) {
AVI_CONTEXT * pavi;
int r;
r = 1;
pavi = (AVI_CONTEXT *)GUI_LOCK_H(havi); {
if (pavi->hTimer) {
GUI_TIMER_Delete(pavi->hTimer);
pavi->hTimer = 0;
r = 0;
}if (pavi->hTimer) { ... }
if (pavi->pfNotify) {
pavi->pfNotify(havi, GUI_AVI_NOTIFICATION_STOP, pavi->CurrentImage);
}if (pavi->pfNotify) { ... }
...} GUI_UNLOCK_H(pavi);
return r;
}{ ... }
/* ... */
static int _DecodeFrame(GUI_AVI_HANDLE havi) {
AVI_CONTEXT * pavi;
int offset;
const U8 *pData;
pavi = (AVI_CONTEXT *)GUI_LOCK_H(havi); {
pavi->CurrentImage++;
if (pavi->CurrentImage == pavi->aviInfo.TotalFrame) {
if (pavi->DoLoop) {
pavi->CurrentImage = 0;
if (pavi->pfGetData(pavi->pParam, &pavi->pVideoBuffer, pavi->VideoBufferSize, 0) != pavi->VideoBufferSize)
{
return 1;
}if (pavi->pfGetData(pavi->pParam, &pavi->pVideoBuffer, pavi->VideoBufferSize, 0) != pavi->VideoBufferSize) { ... }
_AVI_Init(havi, (U8 *)pavi->pVideoBuffer, pavi->VideoBufferSize);
offset = _AVI_SearchID((U8 *)pavi->pVideoBuffer,pavi->VideoBufferSize,(U8 *)"movi");
_AVI_GetStreamInfo(havi, (U8 *)pavi->pVideoBuffer + offset + 4);
if (pavi->pfGetData(pavi->pParam, &pavi->pVideoBuffer, pavi->aviInfo.StreamSize + 8, offset + 12) != (pavi->aviInfo.StreamSize + 8))
{
return 1;
}if (pavi->pfGetData(pavi->pParam, &pavi->pVideoBuffer, pavi->aviInfo.StreamSize + 8, offset + 12) != (pavi->aviInfo.StreamSize + 8)) { ... }
}if (pavi->DoLoop) { ... } else {
return 1;
}else { ... }
}if (pavi->CurrentImage == pavi->aviInfo.TotalFrame) { ... }
else
{
if(pavi->aviInfo.StreamID == AVI_VIDS_FLAG)
{
if(pavi->aviInfo.StreamSize > pavi->VideoBufferSize )
{
return 1;
}if (pavi->aviInfo.StreamSize > pavi->VideoBufferSize) { ... }
if(pavi->pfGetData(pavi->pParam, &pavi->pVideoBuffer, pavi->aviInfo.StreamSize + 8, 0xFFFFFFFF) != pavi->aviInfo.StreamSize + 8)
{
return 1;
}if (pavi->pfGetData(pavi->pParam, &pavi->pVideoBuffer, pavi->aviInfo.StreamSize + 8, 0xFFFFFFFF) != pavi->aviInfo.StreamSize + 8) { ... }
_AVI_GetStreamInfo(havi, (U8 *)pavi->pVideoBuffer + pavi->aviInfo.StreamSize);
}if (pavi->aviInfo.StreamID == AVI_VIDS_FLAG) { ... }
if(pavi->aviInfo.StreamID == AVI_AUDS_FLAG)
{
do{
if(pavi->aviInfo.StreamSize >= pavi->AudioBufferSize)
{
return 1;
}if (pavi->aviInfo.StreamSize >= pavi->AudioBufferSize) { ... }
if(pavi->AudioWdPtr > (pavi->AudioBufferSize - pavi->aviInfo.StreamSize))
{
pavi->AudioWdPtr = 0;
}if (pavi->AudioWdPtr > (pavi->AudioBufferSize - pavi->aviInfo.StreamSize)) { ... }
pData = &pavi->pAudioBuffer[pavi->AudioWdPtr];
if(pavi->pfGetData(pavi->pParam, &pData, pavi->aviInfo.StreamSize + 8, 0xFFFFFFFF) != pavi->aviInfo.StreamSize + 8)
{
return 1;
}if (pavi->pfGetData(pavi->pParam, &pData, pavi->aviInfo.StreamSize + 8, 0xFFFFFFFF) != pavi->aviInfo.StreamSize + 8) { ... }
pavi->AudioWdPtr += pavi->aviInfo.StreamSize;
_AVI_GetStreamInfo(havi, (U8 *)&pData[pavi->aviInfo.StreamSize]);
...} while (pavi->aviInfo.StreamID == AVI_AUDS_FLAG);
}if (pavi->aviInfo.StreamID == AVI_AUDS_FLAG) { ... }
}else { ... }
...} GUI_UNLOCK_H(pavi);
return 0;
}{ ... }
/* ... */
static void _OnTimer(GUI_TIMER_MESSAGE * pTM) {
AVI_CONTEXT * pavi;
GUI_AVI_HANDLE havi;
int r, Period;
havi = pTM->Context;
pavi = (AVI_CONTEXT *)GUI_LOCK_H(havi); {
if (pavi->pfNotify) {
pavi->pfNotify(havi, GUI_AVI_NOTIFICATION_PREDRAW, pavi->CurrentImage);
}if (pavi->pfNotify) { ... }
WM_Deactivate();
WM_SetWindowPos(WM_HBKWIN, 0, 0, LCD_GetXSize(), LCD_GetYSize() );
if (status == 0)
{
r = pavi->pfDraw(pavi->pVideoBuffer, pavi->VideoBufferSize,pavi->xPos , pavi->yPos);
}if (status == 0) { ... }
else
{
r = pavi->pfDraw(pavi->pVideoBuffer, pavi->VideoBufferSize,pavi->xPos + LCD_GetXSize()/2 , pavi->yPos);
}else { ... }
WM_Activate();
WM_SetWindowPos(WM_HBKWIN, -LCD_GetXSize()/2, 0, 2 * LCD_GetXSize() + 20, 2 * LCD_GetYSize() );
if (pavi->pfNotify) {
pavi->pfNotify(havi, GUI_AVI_NOTIFICATION_POSTDRAW, pavi->CurrentImage);
}if (pavi->pfNotify) { ... }
if (r)
{
pavi->CurrentImage = 0;
pavi->pfNotify(havi, GUI_AVI_NOTIFICATION_EOF, pavi->aviInfo.TotalFrame);
GUI_UNLOCK_H(pavi);
return;
}if (r) { ... }
if (_DecodeFrame(havi))
{
pavi->CurrentImage = 0;
pavi->pfNotify(havi, GUI_AVI_NOTIFICATION_EOF, pavi->aviInfo.TotalFrame);
GUI_UNLOCK_H(pavi);
return;
}if (_DecodeFrame(havi)) { ... }
while ((U32)GUI_GetTime() > pavi->TimeNextFrame) {
pavi->TimeNextFrame += pavi->aviInfo.SecPerFrame/ 1000;
if (_DecodeFrame(havi))
{
pavi->CurrentImage = 0;
pavi->pfNotify(havi, GUI_AVI_NOTIFICATION_EOF, pavi->aviInfo.TotalFrame);
GUI_UNLOCK_H(pavi);
return;
}if (_DecodeFrame(havi)) { ... }
}while ((U32)GUI_GetTime() > pavi->TimeNextFrame) { ... }
Period = pavi->TimeNextFrame - GUI_GetTime();
if (Period < 0) {
Period = 0;
}if (Period < 0) { ... }
GUI_TIMER_SetPeriod(pTM->hTimer, Period);
GUI_TIMER_Restart(pTM->hTimer);
...} GUI_UNLOCK_H(pavi);
}{ ... }
/* ... */
GUI_AVI_HANDLE GUI_AVI_CreateEx(GUI_GET_DATA_FUNC * pfGetData, GUI_AVI_FUNC * pfNotify) {
AVI_CONTEXT * pavi;
GUI_AVI_HANDLE havi;
GUI_LOCK();
havi = GUI_ALLOC_AllocZero(sizeof(AVI_CONTEXT));
if (havi == 0) {
GUI_UNLOCK();
return 0;
}if (havi == 0) { ... }
pavi = (AVI_CONTEXT *)GUI_LOCK_H(havi); {
pavi->pfNotify = pfNotify;
pavi->pfGetData = pfGetData;
pavi->pfDraw = (U32(*)(const void * , U32 ,U32, U32))GUI_JPEG_Draw;
...} GUI_UNLOCK_H(pavi);
GUI_UNLOCK();
return havi;
}{ ... }
/* ... */
int GUI_AVI_Start(GUI_AVI_HANDLE havi, void * pParam, U32 FileSize) {
AVI_CONTEXT * pavi;
U32 offset;
int r = 1;
const U8 *pData;
if (havi) {
GUI_LOCK();
pavi = (AVI_CONTEXT *)GUI_LOCK_H(havi); {
pavi->pParam = pParam;
pavi->FileSize = FileSize;
pavi->CurrentImage = 0;
if (pavi->pfGetData(pavi->pParam, &pavi->pVideoBuffer, pavi->VideoBufferSize, 0) == pavi->VideoBufferSize)
{
_AVI_Init(havi, (U8 *)pavi->pVideoBuffer, pavi->VideoBufferSize);
offset = _AVI_SearchID((U8 *)pavi->pVideoBuffer,pavi->VideoBufferSize,(U8 *)"movi");
_AVI_GetStreamInfo(havi, (U8 *)pavi->pVideoBuffer + offset + 4);
if(pavi->pfJpegInit)
{
pavi->pfJpegInit();
}if (pavi->pfJpegInit) { ... }
if(pavi->aviInfo.StreamID == AVI_VIDS_FLAG)
{
if (pavi->pfGetData(pavi->pParam, &pavi->pVideoBuffer, pavi->aviInfo.StreamSize + 8, offset + 12) == (pavi->aviInfo.StreamSize + 8))
{
_AVI_GetStreamInfo(havi, (U8 *)pavi->pVideoBuffer + pavi->aviInfo.StreamSize);
}if (pavi->pfGetData(pavi->pParam, &pavi->pVideoBuffer, pavi->aviInfo.StreamSize + 8, offset + 12) == (pavi->aviInfo.StreamSize + 8)) { ... }
}if (pavi->aviInfo.StreamID == AVI_VIDS_FLAG) { ... }
pavi->AudioWdPtr = pavi->AudioBufferSize / 2;
if(pavi->aviInfo.StreamID == AVI_AUDS_FLAG)
{
do{
if(pavi->AudioWdPtr >= pavi->AudioBufferSize - pavi->aviInfo.StreamSize - 8)
{
pavi->AudioWdPtr = 0;
}if (pavi->AudioWdPtr >= pavi->AudioBufferSize - pavi->aviInfo.StreamSize - 8) { ... }
pData = &pavi->pAudioBuffer[pavi->AudioWdPtr];
if(pavi->pfGetData(pavi->pParam, &pData, pavi->aviInfo.StreamSize + 8, 0xFFFFFFFF) == pavi->aviInfo.StreamSize + 8)
{
pavi->AudioWdPtr += pavi->aviInfo.StreamSize;
}if (pavi->pfGetData(pavi->pParam, &pData, pavi->aviInfo.StreamSize + 8, 0xFFFFFFFF) == pavi->aviInfo.StreamSize + 8) { ... }
_AVI_GetStreamInfo(havi, (U8 *)pData + pavi->aviInfo.StreamSize);
...} while (pavi->aviInfo.StreamID == AVI_AUDS_FLAG);
}if (pavi->aviInfo.StreamID == AVI_AUDS_FLAG) { ... }
}if (pavi->pfGetData(pavi->pParam, &pavi->pVideoBuffer, pavi->VideoBufferSize, 0) == pavi->VideoBufferSize) { ... }
...} GUI_UNLOCK_H(pavi);
GUI_UNLOCK();
}if (havi) { ... }
return r;
}{ ... }
/* ... */
int GUI_AVI_Stop(GUI_AVI_HANDLE havi) {
AVI_CONTEXT * pavi;
int r = 1;
if (havi) {
GUI_LOCK();
pavi = (AVI_CONTEXT *)GUI_LOCK_H(havi); {
if(pavi->pfJpegDeInit)
{
pavi->pfJpegDeInit();
}if (pavi->pfJpegDeInit) { ... }
_Stopavi(havi);
...} GUI_UNLOCK_H(pavi);
GUI_UNLOCK();
}if (havi) { ... }
return r;
}{ ... }
/* ... */
GUI_AVI_HANDLE GUI_AVI_Create(GUI_AVI_FUNC * pfNotify) {
GUI_AVI_HANDLE havi;
havi = GUI_AVI_CreateEx(_GetData, pfNotify);
return havi;
}{ ... }
/* ... */
int GUI_AVI_Play(GUI_AVI_HANDLE havi) {
AVI_CONTEXT * pavi;
int r;
r = 1;
if (havi) {
GUI_LOCK();
pavi = (AVI_CONTEXT *)GUI_LOCK_H(havi); {
if (pavi->hTimer == 0) {
pavi->hTimer = GUI_TIMER_Create(_OnTimer, 0, havi, 0);
if (pavi->hTimer == 0) {
GUI_UNLOCK_H(pavi);
GUI_UNLOCK();
GUI_ALLOC_Free(havi);
return 0;
}if (pavi->hTimer == 0) { ... }
if (pavi->pfNotify) {
pavi->pfNotify(havi, GUI_AVI_NOTIFICATION_START, pavi->CurrentImage);
}if (pavi->pfNotify) { ... }
pavi->TimeNextFrame = GUI_GetTime();
r = 0;
}if (pavi->hTimer == 0) { ... }
...} GUI_UNLOCK_H(pavi);
GUI_UNLOCK();
}if (havi) { ... }
return r;
}{ ... }
/* ... */
int GUI_AVI_Show(GUI_AVI_HANDLE havi, int xPos, int yPos, int DoLoop) {
AVI_CONTEXT * pavi;
int r;
r = 1;
if (havi) {
GUI_LOCK();
pavi = (AVI_CONTEXT *)GUI_LOCK_H(havi); {
pavi->xPos = xPos;
pavi->yPos = yPos;
pavi->DoLoop = DoLoop ? 1 : 0;
r = GUI_AVI_Play(havi);
...} GUI_UNLOCK_H(pavi);
GUI_UNLOCK();
}if (havi) { ... }
return r;
}{ ... }
/* ... */
int GUI_AVI_SelectMode (GUI_AVI_HANDLE havi, int Mode) {
AVI_CONTEXT * pavi;
int r = 1;
if (havi) {
GUI_LOCK();
pavi = (AVI_CONTEXT *)GUI_LOCK_H(havi); {
if(Mode == 0)
{
pavi->pfDraw = (U32(*)(const void * , U32 ,U32, U32))GUI_JPEG_Draw;
}if (Mode == 0) { ... }
else
{
pavi->pfDraw = pavi->pfJpegDraw;
}else { ... }
r = 0;
...} GUI_UNLOCK_H(pavi);
GUI_UNLOCK();
}if (havi) { ... }
return r;
}{ ... }
/* ... */
void GUI_AVI_SetDevFunc (GUI_AVI_HANDLE havi, int IdFunc, void (* pDriverFunc)(void))
{
AVI_CONTEXT * pavi;
if (havi) {
GUI_LOCK();
pavi = (AVI_CONTEXT *)GUI_LOCK_H(havi); {
switch (IdFunc)
{
case GUI_AVI_JPEG_INIT:
pavi->pfJpegInit = pDriverFunc;
break;
case GUI_AVI_JPEG_INIT:
case GUI_AVI_JPEG_DEINIT:
pavi->pfJpegDeInit = pDriverFunc;
break;
case GUI_AVI_JPEG_DEINIT:
case GUI_AVI_JPEG_DRAW:
pavi->pfJpegDraw = (U32(*)(const void * , U32 ,U32, U32))pDriverFunc;
break;
case GUI_AVI_JPEG_DRAW:
default:
break; default
}switch (IdFunc) { ... }
...} GUI_UNLOCK_H(pavi);
GUI_UNLOCK();
}if (havi) { ... }
}{ ... }
/* ... */
void GUI_AVI_SetBuffers (GUI_AVI_HANDLE havi, U8 *pVidBuff, U16 VidBuffSize, U8 *pAudBuff, U16 AudBuffSize)
{
AVI_CONTEXT * pavi;
if (havi) {
GUI_LOCK();
pavi = (AVI_CONTEXT *)GUI_LOCK_H(havi); {
pavi->pVideoBuffer = pVidBuff;
pavi->VideoBufferSize = VidBuffSize;
pavi->pAudioBuffer = pAudBuff;
pavi->AudioBufferSize = AudBuffSize;
...} GUI_UNLOCK_H(pavi);
GUI_UNLOCK();
}if (havi) { ... }
}{ ... }
/* ... */
int GUI_AVI_Delete(GUI_AVI_HANDLE havi) {
AVI_CONTEXT * pavi;
GUI_AVI_FUNC * pfNotify;
int r;
r = 1;
if (havi) {
GUI_LOCK();
pavi = (AVI_CONTEXT *)GUI_LOCK_H(havi); {
pfNotify = pavi->pfNotify;
if (pavi->hTimer) {
GUI_TIMER_Delete(pavi->hTimer);
pavi->hTimer = 0;
}if (pavi->hTimer) { ... }
if(pavi->pfJpegDeInit)
{
pavi->pfJpegDeInit();
}if (pavi->pfJpegDeInit) { ... }
if (pfNotify) {
pfNotify(havi, GUI_AVI_NOTIFICATION_DELETE, 0);
}if (pfNotify) { ... }
r = 0;
...} GUI_UNLOCK_H(pavi);
GUI_ALLOC_Free(havi);
GUI_UNLOCK();
}if (havi) { ... }
return r;
}{ ... }
/* ... */
int GUI_AVI_Pause(GUI_AVI_HANDLE havi) {
int r;
GUI_LOCK();
r = 1;
if (havi) {
r = _Stopavi(havi);
}if (havi) { ... }
GUI_UNLOCK();
return r;
}{ ... }
/* ... */
int GUI_AVI_GotoFrame(GUI_AVI_HANDLE havi, U32 Frame) {
AVI_CONTEXT * pavi;
int r, pos;
U16 offset;
const U8 *pData;
r = 0;
if (havi) {
GUI_LOCK();
pavi = (AVI_CONTEXT *)GUI_LOCK_H(havi); {
pos = Frame * (pavi->FileSize/ pavi->aviInfo.TotalFrame);
pavi->CurrentImage = Frame;
if (pavi->pfGetData(pavi->pParam, &pavi->pVideoBuffer, pavi->VideoBufferSize, pos) != pavi->VideoBufferSize)
{
GUI_UNLOCK_H(pavi);
GUI_UNLOCK();
GUI_ALLOC_Free(havi);
return 0;
}if (pavi->pfGetData(pavi->pParam, &pavi->pVideoBuffer, pavi->VideoBufferSize, pos) != pavi->VideoBufferSize) { ... }
if(pos == 0)
{
offset = _AVI_SearchID((U8 *)pavi->pVideoBuffer, pavi->VideoBufferSize, (U8 *)"movi");
}if (pos == 0) { ... }
else
{
offset = 0;
}else { ... }
offset += _AVI_SearchID((U8 *)pavi->pVideoBuffer + offset,pavi->VideoBufferSize, pavi->aviInfo.VideoFLAG);
_AVI_GetStreamInfo(havi,(U8 *)pavi->pVideoBuffer + offset);
if(pavi->aviInfo.StreamID == AVI_VIDS_FLAG)
{
if (pavi->pfGetData(pavi->pParam, &pavi->pVideoBuffer, pavi->aviInfo.StreamSize + 8, pos +offset + 8) == (pavi->aviInfo.StreamSize + 8))
{
_AVI_GetStreamInfo(havi, (U8 *)pavi->pVideoBuffer + pavi->aviInfo.StreamSize);
}if (pavi->pfGetData(pavi->pParam, &pavi->pVideoBuffer, pavi->aviInfo.StreamSize + 8, pos +offset + 8) == (pavi->aviInfo.StreamSize + 8)) { ... }
}if (pavi->aviInfo.StreamID == AVI_VIDS_FLAG) { ... }
if(pavi->aviInfo.StreamID == AVI_AUDS_FLAG)
{
do{
if(pavi->AudioWdPtr >= (pavi->AudioBufferSize - pavi->aviInfo.StreamSize - 8))
{
pavi->AudioWdPtr = 0;
}if (pavi->AudioWdPtr >= (pavi->AudioBufferSize - pavi->aviInfo.StreamSize - 8)) { ... }
pData = &pavi->pAudioBuffer[pavi->AudioWdPtr];
if(pavi->pfGetData(pavi->pParam, &pData, pavi->aviInfo.StreamSize + 8, 0xFFFFFFFF) == pavi->aviInfo.StreamSize + 8)
{
pavi->AudioWdPtr += pavi->aviInfo.StreamSize;
_AVI_GetStreamInfo(havi, (U8 *)&pData[pavi->aviInfo.StreamSize]);
}if (pavi->pfGetData(pavi->pParam, &pData, pavi->aviInfo.StreamSize + 8, 0xFFFFFFFF) == pavi->aviInfo.StreamSize + 8) { ... }
...} while (pavi->aviInfo.StreamID == AVI_AUDS_FLAG);
}if (pavi->aviInfo.StreamID == AVI_AUDS_FLAG) { ... }
if (pavi->pfNotify) {
pavi->pfNotify(havi, GUI_AVI_NOTIFICATION_PREDRAW, pavi->CurrentImage);
}if (pavi->pfNotify) { ... }
WM_Deactivate();
r = pavi->pfDraw(pavi->pVideoBuffer, pavi->VideoBufferSize, pavi->xPos, pavi->yPos);
WM_Activate();
if (pavi->pfNotify) {
pavi->pfNotify(havi, GUI_AVI_NOTIFICATION_POSTDRAW, pavi->CurrentImage);
}if (pavi->pfNotify) { ... }
...} GUI_UNLOCK_H(pavi);
GUI_UNLOCK();
}if (havi) { ... }
return r;
}{ ... }
/* ... */
U32 GUI_AVI_GetFrameIndex(GUI_AVI_HANDLE havi) {
AVI_CONTEXT * pavi;
U32 r;
r = 0xFFFFFFFF;
if (havi) {
GUI_LOCK();
pavi = (AVI_CONTEXT *)GUI_LOCK_H(havi); {
r = pavi->CurrentImage;
...} GUI_UNLOCK_H(pavi);
GUI_UNLOCK();
}if (havi) { ... }
return r;
}{ ... }
/* ... */
int GUI_AVI_GetInfo(GUI_AVI_HANDLE havi, GUI_AVI_INFO * pInfo) {
AVI_CONTEXT * pavi;
pavi = (AVI_CONTEXT *)GUI_LOCK_H(havi); {
pInfo->msPerFrame = pavi->aviInfo.SecPerFrame/ 1000;
pInfo->NumFrames = pavi->aviInfo.TotalFrame;
pInfo->xSize = pavi->aviInfo.Width;
pInfo->ySize = pavi->aviInfo.Height;
...}
GUI_UNLOCK_H(pavi);
return 0;
}{ ... }