xingzilong
2017-08-18 9e5babf9db52e64bdae60137be7696e56241fca6
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
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
#ifndef _PLAYM4_H_ 
#define _PLAYM4_H_
 
#if defined( _WINDLL)
    #define PLAYM4_API  extern "C"__declspec(dllexport) 
#else 
    #define PLAYM4_API  extern "C" __declspec(dllimport) 
#endif
 
//Max channel numbers
#define PLAYM4_MAX_SUPPORTS 500
//Wave coef range;
#define MIN_WAVE_COEF -100
#define MAX_WAVE_COEF 100
 
//Timer type
#define TIMER_1 1 //Only 16 timers for every process.Default TIMER;
#define TIMER_2 2 //Not limit;But the precision less than TIMER_1; 
 
//BUFFER AND DATA TYPE
#define BUF_VIDEO_SRC               (1) //mixed input,total src buffer size;splited input,video src buffer size 
#define BUF_AUDIO_SRC               (2) //mixed input,not defined;splited input,audio src buffer size
#define BUF_VIDEO_RENDER            (3) //video render node count 
#define BUF_AUDIO_RENDER            (4) //audio render node count 
#define BUF_VIDEO_DECODED           (5) //video decoded node count to render
#define BUF_AUDIO_DECODED           (6) //audio decoded node count to render
#define BUF_DISPLAY_NODE            (7) //display node
 
//Error code
#define  PLAYM4_NOERROR                            0    //no error
#define     PLAYM4_PARA_OVER                        1    //input parameter is invalid;
#define  PLAYM4_ORDER_ERROR                        2    //The order of the function to be called is error.
#define     PLAYM4_TIMER_ERROR                        3    //Create multimedia clock failed;
#define  PLAYM4_DEC_VIDEO_ERROR                    4    //Decode video data failed.
#define  PLAYM4_DEC_AUDIO_ERROR                    5    //Decode audio data failed.
#define     PLAYM4_ALLOC_MEMORY_ERROR                6    //Allocate memory failed.
#define  PLAYM4_OPEN_FILE_ERROR                    7    //Open the file failed.
#define  PLAYM4_CREATE_OBJ_ERROR                8    //Create thread or event failed
#define  PLAYM4_CREATE_DDRAW_ERROR                9    //Create DirectDraw object failed.
#define  PLAYM4_CREATE_OFFSCREEN_ERROR            10    //failed when creating off-screen surface.
#define  PLAYM4_BUF_OVER                        11    //buffer is overflow
#define  PLAYM4_CREATE_SOUND_ERROR                12    //failed when creating audio device.    
#define     PLAYM4_SET_VOLUME_ERROR                13    //Set volume failed
#define  PLAYM4_SUPPORT_FILE_ONLY                14    //The function only support play file.
#define  PLAYM4_SUPPORT_STREAM_ONLY                15    //The function only support play stream.
#define  PLAYM4_SYS_NOT_SUPPORT                    16    //System not support.
#define  PLAYM4_FILEHEADER_UNKNOWN                17    //No file header.
#define  PLAYM4_VERSION_INCORRECT                18    //The version of decoder and encoder is not adapted.  
#define  PLAYM4_INIT_DECODER_ERROR                19    //Initialize decoder failed.
#define  PLAYM4_CHECK_FILE_ERROR                20    //The file data is unknown.
#define  PLAYM4_INIT_TIMER_ERROR                21    //Initialize multimedia clock failed.
#define     PLAYM4_BLT_ERROR                        22    //Blt failed.
#define  PLAYM4_UPDATE_ERROR                    23    //Update failed.
#define  PLAYM4_OPEN_FILE_ERROR_MULTI            24   //openfile error, streamtype is multi
#define  PLAYM4_OPEN_FILE_ERROR_VIDEO            25   //openfile error, streamtype is video
#define  PLAYM4_JPEG_COMPRESS_ERROR                26   //JPEG compress error
#define  PLAYM4_EXTRACT_NOT_SUPPORT                27    //Don't support the version of this file.
#define  PLAYM4_EXTRACT_DATA_ERROR                28    //extract video data failed.
#define  PLAYM4_SECRET_KEY_ERROR                29    //Secret key is error //add 20071218
#define  PLAYM4_DECODE_KEYFRAME_ERROR            30   //add by hy 20090318
#define  PLAYM4_NEED_MORE_DATA                    31   //add by hy 20100617
#define  PLAYM4_INVALID_PORT                    32    //add by cj 20100913
#define  PLAYM4_NOT_FIND                        33    //add by cj 20110428
#define  PLAYM4_NEED_LARGER_BUFFER              34  //add by pzj 20130528
#define  PLAYM4_FAIL_UNKNOWN                    99   //Fail, but the reason is unknown;    
 
//ÓãÑÛ¹¦ÄÜ´íÎóÂë
#define PLAYM4_FEC_ERR_ENABLEFAIL                100 // ÓãÑÛÄ£¿é¼ÓÔØÊ§°Ü
#define PLAYM4_FEC_ERR_NOTENABLE                101 // ÓãÑÛÄ£¿éûÓмÓÔØ
#define PLAYM4_FEC_ERR_NOSUBPORT                102 // ×Ó¶Ë¿ÚûÓзÖÅä
#define PLAYM4_FEC_ERR_PARAMNOTINIT                103 // Ã»Óгõʼ»¯¶ÔÓ¦¶Ë¿ÚµÄ²ÎÊý
#define PLAYM4_FEC_ERR_SUBPORTOVER                104 // ×Ó¶Ë¿ÚÒѾ­ÓÃÍê
#define PLAYM4_FEC_ERR_EFFECTNOTSUPPORT            105 // ¸Ã°²×°·½Ê½ÏÂÕâÖÖЧ¹û²»Ö§³Ö
#define PLAYM4_FEC_ERR_INVALIDWND                106 // ·Ç·¨µÄ´°¿Ú
#define PLAYM4_FEC_ERR_PTZOVERFLOW                107 // PTZλÖÃÔ½½ç
#define PLAYM4_FEC_ERR_RADIUSINVALID            108 // Ô²ÐIJÎÊý·Ç·¨
#define PLAYM4_FEC_ERR_UPDATENOTSUPPORT            109 // Ö¸¶¨µÄ°²×°·½Ê½ºÍ½ÃÕýЧ¹û£¬¸Ã²ÎÊý¸üв»Ö§³Ö
#define PLAYM4_FEC_ERR_NOPLAYPORT                110 // ²¥·Å¿â¶Ë¿ÚûÓÐÆôÓÃ
#define PLAYM4_FEC_ERR_PARAMVALID                111 // ²ÎÊýΪ¿Õ
#define PLAYM4_FEC_ERR_INVALIDPORT                112 // ·Ç·¨×Ó¶Ë¿Ú
#define PLAYM4_FEC_ERR_PTZZOOMOVER                113 // PTZ½ÃÕý·¶Î§Ô½½ç
#define PLAYM4_FEC_ERR_OVERMAXPORT                114  // ½ÃÕýͨµÀ±¥ºÍ£¬×î´óÖ§³ÖµÄ½ÃÕýͨµÀΪËĸö
#define PLAYM4_FEC_ERR_ENABLED                  115  //¸Ã¶Ë¿ÚÒѾ­ÆôÓÃÁËÓãÑÛÄ£¿é
#define PLAYM4_FEC_ERR_D3DACCENOTENABLE            116 // D3D¼ÓËÙûÓпªÆô
 
 
//Max display regions.
#define MAX_DISPLAY_WND 4
 
//Display type
#define DISPLAY_NORMAL                0x00000001   
#define DISPLAY_QUARTER                0x00000002
#define DISPLAY_YC_SCALE            0x00000004    //add by gb 20091116
#define DISPLAY_NOTEARING            0x00000008
//Display buffers
#define MAX_DIS_FRAMES 50
#define MIN_DIS_FRAMES 1
 
//Locate by
#define BY_FRAMENUM  1
#define BY_FRAMETIME 2
 
//Source buffer
#define SOURCE_BUF_MAX    1024*100000
#define SOURCE_BUF_MIN    1024*50
 
//Stream type
#define STREAME_REALTIME 0
#define STREAME_FILE     1
 
//frame type
#define T_AUDIO16    101
#define T_AUDIO8    100
#define T_UYVY        1
#define T_YV12        3
#define T_RGB32        7
 
//capability
#define SUPPORT_DDRAW        1 
#define SUPPORT_BLT         2 
#define SUPPORT_BLTFOURCC   4 
#define SUPPORT_BLTSHRINKX  8 
#define SUPPORT_BLTSHRINKY  16
#define SUPPORT_BLTSTRETCHX 32
#define SUPPORT_BLTSTRETCHY 64
#define SUPPORT_SSE         128
#define SUPPORT_MMX            256 
 
// ÒÔϺ궨ÒåÓÃÓÚHIK_MEDIAINFO½á¹¹
#define FOURCC_HKMI            0x484B4D49    // "HKMI" HIK_MEDIAINFO½á¹¹±ê¼Ç
// ÏµÍ³·â×°¸ñʽ    
#define SYSTEM_NULL            0x0                // Ã»ÓÐϵͳ²ã£¬´¿ÒôƵÁ÷»òÊÓÆµÁ÷    
#define SYSTEM_HIK          0x1                // º£¿µÎļþ²ã
#define SYSTEM_MPEG2_PS     0x2                // PS·â×°
#define SYSTEM_MPEG2_TS     0x3                // TS·â×°
#define SYSTEM_RTP          0x4                // rtp·â×°
#define SYSTEM_RTPHIK       0x401                // rtp·â×°
 
// ÊÓÆµ±àÂëÀàÐÍ
#define VIDEO_NULL          0x0 // Ã»ÓÐÊÓÆµ
#define VIDEO_H264          0x1 // º£¿µH.264
#define VIDEO_MPEG4         0x3 // ±ê×¼MPEG4
#define VIDEO_MJPEG            0x4
#define VIDEO_AVC264        0x0100
 
// ÒôƵ±àÂëÀàÐÍ
#define AUDIO_NULL          0x0000 // Ã»ÓÐÒôƵ
#define AUDIO_ADPCM         0x1000 // ADPCM 
#define AUDIO_MPEG          0x2000 // MPEG ÏµÁÐÒôƵ£¬½âÂëÆ÷ÄÜ×ÔÊÊÓ¦¸÷ÖÖMPEGÒôƵ
#define AUDIO_AAC            0X2001 // AAC ±àÂë
// GϵÁÐÒôƵ
#define AUDIO_RAW_DATA8        0x7000      //²ÉÑùÂÊΪ8kµÄԭʼÊý¾Ý
#define AUDIO_RAW_UDATA16    0x7001      //²ÉÑùÂÊΪ16kµÄԭʼÊý¾Ý£¬¼´L16
#define AUDIO_G711_U        0x7110
#define AUDIO_G711_A        0x7111
#define AUDIO_G722_1        0x7221
#define AUDIO_G723_1        0x7231
#define AUDIO_G726_U        0x7260
#define AUDIO_G726_A        0x7261
#define AUDIO_G726_16       0x7262 
#define AUDIO_G729          0x7290
#define AUDIO_AMR_NB        0x3000
 
#define SYNCDATA_VEH        1 //ͬ²½Êý¾Ý:³µÔØÐÅÏ¢    
#define SYNCDATA_IVS        2 //ͬ²½Êý¾Ý:ÖÇÄÜÐÅÏ¢
 
//motion flow type
#define    MOTION_FLOW_NONE            0
#define MOTION_FLOW_CPU                1
#define MOTION_FLOW_GPU                2
 
//ÒôÊÓÆµ¼ÓÃÜÀàÐÍ
#define ENCRYPT_AES_3R_VIDEO     1 
#define ENCRYPT_AES_10R_VIDEO    2 
#define ENCRYPT_AES_3R_AUDIO     1  
#define ENCRYPT_AES_10R_AUDIO    2
 
//Frame position
typedef struct{
    long nFilePos;
    long nFrameNum;
    long nFrameTime;
    long nErrorFrameNum;
    SYSTEMTIME *pErrorTime;
    long nErrorLostFrameNum;
    long nErrorFrameSize;
}FRAME_POS,*PFRAME_POS;
 
//Frame Info
typedef struct{
    long nWidth;
    long nHeight;
    long nStamp;
    long nType;
    long nFrameRate;
    DWORD dwFrameNum;
}FRAME_INFO;
 
//Frame 
typedef struct{
    char *pDataBuf;
    long  nSize;
    long  nFrameNum;
    BOOL  bIsAudio;
    long  nReserved;
}FRAME_TYPE;
 
//Watermark Info    //add by gb 080119
typedef struct{
    char *pDataBuf;
    long  nSize;
    long  nFrameNum;
    BOOL  bRsaRight;
    long  nReserved;
}WATERMARK_INFO;
 
typedef struct SYNCDATA_INFO 
{
    DWORD dwDataType;        //ºÍÂëÁ÷Êý¾Ýͬ²½µÄ¸½ÊôÐÅÏ¢ÀàÐÍ£¬Ä¿Ç°ÓУºÖÇÄÜÐÅÏ¢£¬³µÔØÐÅÏ¢
    DWORD dwDataLen;        //¸½ÊôÐÅÏ¢Êý¾Ý³¤¶È
    BYTE* pData;            //Ö¸Ïò¸½ÊôÐÅÏ¢Êý¾Ý½á¹¹µÄÖ¸Õë,±ÈÈçIVS_INFO½á¹¹
} SYNCDATA_INFO;
 
#ifndef _HIK_MEDIAINFO_FLAG_
#define _HIK_MEDIAINFO_FLAG_
typedef struct _HIK_MEDIAINFO_                // modified by gb 080425
{
    unsigned int    media_fourcc;            // "HKMI": 0x484B4D49 Hikvision Media Information
    unsigned short  media_version;            // °æ±¾ºÅ£ºÖ¸±¾ÐÅÏ¢½á¹¹°æ±¾ºÅ£¬Ä¿Ç°Îª0x0101,¼´1.01°æ±¾£¬01£ºÖ÷°æ±¾ºÅ£»01£º×Ó°æ±¾ºÅ¡£
    unsigned short  device_id;                // É豸ID£¬±ãÓÚ¸ú×Ù/·ÖÎö            
    
    unsigned short  system_format;          // ÏµÍ³·â×°²ã
    unsigned short  video_format;           // ÊÓÆµ±àÂëÀàÐÍ
 
    unsigned short  audio_format;           // ÒôƵ±àÂëÀàÐÍ
    unsigned char   audio_channels;         // Í¨µÀÊý  
    unsigned char   audio_bits_per_sample;  // ÑùλÂÊ
    unsigned int    audio_samplesrate;      // ²ÉÑùÂÊ 
    unsigned int    audio_bitrate;          // Ñ¹ËõÒôƵÂëÂÊ,µ¥Î»£ºbit
 
    unsigned int    reserved[4];            // ±£Áô
}HIK_MEDIAINFO;
#endif
 
typedef struct  
{
    long nPort;
    char * pBuf;
    long nBufLen;
    long nWidth;
    long nHeight;
    long nStamp;
    long nType;
    long nUser;
}DISPLAY_INFO;
 
typedef struct
{
    long nPort;
    char *pVideoBuf;
    long nVideoBufLen;
    char *pPriBuf;
    long nPriBufLen;
    long nWidth;
    long nHeight;
    long nStamp;
    long nType;
    long nUser;
}DISPLAY_INFOEX;
 
typedef struct PLAYM4_SYSTEM_TIME //¾ø¶Ôʱ¼ä 
{
    DWORD dwYear;    //Äê
    DWORD dwMon;    //ÔÂ
    DWORD dwDay;    //ÈÕ
    DWORD dwHour;    //ʱ
    DWORD dwMin;    //·Ö
    DWORD dwSec;    //Ãë
    DWORD dwMs;        //ºÁÃë
} PLAYM4_SYSTEM_TIME;
 
//ENCRYPT Info
typedef struct{
    long nVideoEncryptType;  //ÊÓÆµ¼ÓÃÜÀàÐÍ
    long nAudioEncryptType;  //ÒôƵ¼ÓÃÜÀàÐÍ
    long nSetSecretKey;      //ÊÇ·ñÉèÖã¬1±íʾÉèÖÃÃÜÔ¿£¬0±íʾûÓÐÉèÖÃÃÜÔ¿
}ENCRYPT_INFO;
 
//////////////////////////////////////////////////////////////////////////////
//API
//////////////////////////////////////////////////////////////////////////////
 
////////////////ver 1.0///////////////////////////////////////
//Initialize DirecDraw.Now invalid.
PLAYM4_API BOOL __stdcall  PlayM4_InitDDraw(HWND hWnd);
//Release directDraw; Now invalid.
PLAYM4_API BOOL __stdcall PlayM4_RealeseDDraw();
PLAYM4_API BOOL __stdcall PlayM4_OpenFile(LONG nPort,LPSTR sFileName);
PLAYM4_API BOOL __stdcall PlayM4_CloseFile(LONG nPort);
PLAYM4_API BOOL __stdcall PlayM4_Play(LONG nPort, HWND hWnd);
PLAYM4_API BOOL __stdcall PlayM4_Stop(LONG nPort);
PLAYM4_API BOOL __stdcall PlayM4_Pause(LONG nPort,DWORD nPause);
PLAYM4_API BOOL __stdcall PlayM4_Fast(LONG nPort);
PLAYM4_API BOOL __stdcall PlayM4_Slow(LONG nPort);
PLAYM4_API BOOL __stdcall PlayM4_OneByOne(LONG nPort);
PLAYM4_API BOOL __stdcall PlayM4_SetPlayPos(LONG nPort,float fRelativePos);
PLAYM4_API float __stdcall PlayM4_GetPlayPos(LONG nPort);
PLAYM4_API BOOL __stdcall PlayM4_SetFileEndMsg(LONG nPort,HWND hWnd,UINT nMsg);
PLAYM4_API BOOL __stdcall PlayM4_SetVolume(LONG nPort,WORD nVolume);
PLAYM4_API BOOL __stdcall PlayM4_StopSound();
PLAYM4_API BOOL __stdcall PlayM4_PlaySound(LONG nPort);
PLAYM4_API BOOL __stdcall PlayM4_OpenStream(LONG nPort,PBYTE pFileHeadBuf,DWORD nSize,DWORD nBufPoolSize);
PLAYM4_API BOOL __stdcall PlayM4_InputData(LONG nPort,PBYTE pBuf,DWORD nSize);
PLAYM4_API BOOL __stdcall PlayM4_CloseStream(LONG nPort);
PLAYM4_API int  __stdcall  PlayM4_GetCaps();
PLAYM4_API DWORD __stdcall PlayM4_GetFileTime(LONG nPort);
PLAYM4_API DWORD __stdcall PlayM4_GetPlayedTime(LONG nPort);
PLAYM4_API DWORD __stdcall PlayM4_GetPlayedFrames(LONG nPort);
 
//23
////////////////ver 2.0 added///////////////////////////////////////
PLAYM4_API BOOL __stdcall    PlayM4_SetDecCallBack(LONG nPort,void (CALLBACK* DecCBFun)(long nPort,char * pBuf,long nSize,FRAME_INFO * pFrameInfo, long nReserved1,long nReserved2));
PLAYM4_API BOOL __stdcall    PlayM4_SetDisplayCallBack(LONG nPort,void (CALLBACK* DisplayCBFun)(long nPort,char * pBuf,long nSize,long nWidth,long nHeight,long nStamp,long nType,long nReserved));
PLAYM4_API BOOL __stdcall    PlayM4_ConvertToBmpFile(char * pBuf,long nSize,long nWidth,long nHeight,long nType,char *sFileName);
PLAYM4_API DWORD __stdcall    PlayM4_GetFileTotalFrames(LONG nPort);
PLAYM4_API DWORD __stdcall    PlayM4_GetCurrentFrameRate(LONG nPort);
PLAYM4_API DWORD __stdcall    PlayM4_GetPlayedTimeEx(LONG nPort);
PLAYM4_API BOOL __stdcall    PlayM4_SetPlayedTimeEx(LONG nPort,DWORD nTime);
PLAYM4_API DWORD __stdcall    PlayM4_GetCurrentFrameNum(LONG nPort);
PLAYM4_API BOOL __stdcall    PlayM4_SetStreamOpenMode(LONG nPort,DWORD nMode);
PLAYM4_API DWORD __stdcall    PlayM4_GetFileHeadLength();
PLAYM4_API DWORD __stdcall    PlayM4_GetSdkVersion();
//11
////////////////ver 2.2 added///////////////////////////////////////
PLAYM4_API DWORD __stdcall  PlayM4_GetLastError(LONG nPort);
PLAYM4_API BOOL __stdcall PlayM4_RefreshPlay(LONG nPort);
PLAYM4_API BOOL __stdcall PlayM4_SetOverlayMode(LONG nPort,BOOL bOverlay,COLORREF colorKey);
PLAYM4_API BOOL __stdcall PlayM4_GetPictureSize(LONG nPort,LONG *pWidth,LONG *pHeight);
PLAYM4_API BOOL __stdcall PlayM4_SetPicQuality(LONG nPort,BOOL bHighQuality);
PLAYM4_API BOOL __stdcall PlayM4_PlaySoundShare(LONG nPort);
PLAYM4_API BOOL __stdcall PlayM4_StopSoundShare(LONG nPort);
//7
////////////////ver 2.4 added///////////////////////////////////////
PLAYM4_API LONG __stdcall PlayM4_GetStreamOpenMode(LONG nPort);
PLAYM4_API LONG __stdcall PlayM4_GetOverlayMode(LONG nPort);
PLAYM4_API COLORREF __stdcall PlayM4_GetColorKey(LONG nPort);
PLAYM4_API WORD __stdcall PlayM4_GetVolume(LONG nPort);
PLAYM4_API BOOL __stdcall PlayM4_GetPictureQuality(LONG nPort,BOOL *bHighQuality);
PLAYM4_API DWORD __stdcall PlayM4_GetSourceBufferRemain(LONG nPort);
PLAYM4_API BOOL __stdcall PlayM4_ResetSourceBuffer(LONG nPort);
PLAYM4_API BOOL __stdcall PlayM4_SetSourceBufCallBack(LONG nPort,DWORD nThreShold,void (CALLBACK * SourceBufCallBack)(long nPort,DWORD nBufSize,DWORD dwUser,void*pResvered),DWORD dwUser,void *pReserved);
PLAYM4_API BOOL __stdcall PlayM4_ResetSourceBufFlag(LONG nPort);
PLAYM4_API BOOL __stdcall PlayM4_SetDisplayBuf(LONG nPort,DWORD nNum);
PLAYM4_API DWORD __stdcall PlayM4_GetDisplayBuf(LONG nPort);
PLAYM4_API BOOL __stdcall PlayM4_OneByOneBack(LONG nPort);
PLAYM4_API BOOL __stdcall PlayM4_SetFileRefCallBack(LONG nPort, void (__stdcall *pFileRefDone)(DWORD nPort,DWORD nUser),DWORD nUser);
PLAYM4_API BOOL __stdcall PlayM4_SetCurrentFrameNum(LONG nPort,DWORD nFrameNum);
PLAYM4_API BOOL __stdcall PlayM4_GetKeyFramePos(LONG nPort,DWORD nValue, DWORD nType, PFRAME_POS pFramePos);
PLAYM4_API BOOL __stdcall PlayM4_GetNextKeyFramePos(LONG nPort,DWORD nValue, DWORD nType, PFRAME_POS pFramePos);
#if (WINVER >= 0x0400)
//Note: These funtion must be builded under win2000 or above with Microsoft Platform sdk.
//        You can download the sdk from "http://www.microsoft.com/msdownload/platformsdk/sdkupdate/";
PLAYM4_API BOOL __stdcall PlayM4_InitDDrawDevice();
PLAYM4_API void __stdcall PlayM4_ReleaseDDrawDevice();
PLAYM4_API DWORD __stdcall PlayM4_GetDDrawDeviceTotalNums();
PLAYM4_API BOOL __stdcall PlayM4_SetDDrawDevice(LONG nPort,DWORD nDeviceNum);
//PLAYM4_API BOOL __stdcall PlayM4_GetDDrawDeviceInfo(DWORD nDeviceNum,LPSTR  lpDriverDescription,DWORD nDespLen,LPSTR lpDriverName ,DWORD nNameLen,HMONITOR *hhMonitor);
PLAYM4_API int  __stdcall  PlayM4_GetCapsEx(DWORD nDDrawDeviceNum);
#endif
PLAYM4_API BOOL __stdcall PlayM4_ThrowBFrameNum(LONG nPort,DWORD nNum);
//23
////////////////ver 2.5 added///////////////////////////////////////
PLAYM4_API BOOL __stdcall PlayM4_SetDisplayType(LONG nPort,LONG nType);
PLAYM4_API long __stdcall PlayM4_GetDisplayType(LONG nPort);
//2
////////////////ver 3.0 added///////////////////////////////////////
PLAYM4_API BOOL __stdcall PlayM4_SetDecCBStream(LONG nPort,DWORD nStream);
PLAYM4_API BOOL __stdcall PlayM4_SetDisplayRegion(LONG nPort,DWORD nRegionNum, RECT *pSrcRect, HWND hDestWnd, BOOL bEnable);
PLAYM4_API BOOL __stdcall PlayM4_RefreshPlayEx(LONG nPort,DWORD nRegionNum);
#if (WINVER >= 0x0400)
//Note: The funtion must be builded under win2000 or above with Microsoft Platform sdk.
//        You can download the sdk from http://www.microsoft.com/msdownload/platformsdk/sdkupdate/;
PLAYM4_API BOOL __stdcall PlayM4_SetDDrawDeviceEx(LONG nPort,DWORD nRegionNum,DWORD nDeviceNum);
#endif
//4
/////////////////v3.2 added/////////////////////////////////////////
 
PLAYM4_API BOOL __stdcall PlayM4_GetRefValue(LONG nPort,BYTE *pBuffer, DWORD *pSize);
PLAYM4_API BOOL __stdcall PlayM4_SetRefValue(LONG nPort,BYTE *pBuffer, DWORD nSize);
PLAYM4_API BOOL __stdcall PlayM4_OpenStreamEx(LONG nPort,PBYTE pFileHeadBuf,DWORD nSize,DWORD nBufPoolSize);
PLAYM4_API BOOL __stdcall PlayM4_CloseStreamEx(LONG nPort);
PLAYM4_API BOOL __stdcall PlayM4_InputVideoData(LONG nPort,PBYTE pBuf,DWORD nSize);
PLAYM4_API BOOL __stdcall PlayM4_InputAudioData(LONG nPort,PBYTE pBuf,DWORD nSize);
PLAYM4_API BOOL __stdcall PlayM4_RegisterDrawFun(LONG nPort,void (CALLBACK* DrawFun)(long nPort,HDC hDc,LONG nUser),LONG nUser);
PLAYM4_API BOOL __stdcall PlayM4_RigisterDrawFun(LONG nPort,void (CALLBACK* DrawFun)(long nPort,HDC hDc,LONG nUser),LONG nUser);
//8
//////////////////v3.4/////////////////////////////////////////////////////
PLAYM4_API BOOL __stdcall PlayM4_SetTimerType(LONG nPort,DWORD nTimerType,DWORD nReserved);
PLAYM4_API BOOL __stdcall PlayM4_GetTimerType(LONG nPort,DWORD *pTimerType,DWORD *pReserved);
PLAYM4_API BOOL __stdcall PlayM4_ResetBuffer(LONG nPort,DWORD nBufType);
PLAYM4_API DWORD __stdcall PlayM4_GetBufferValue(LONG nPort,DWORD nBufType);
 
//////////////////V3.6/////////////////////////////////////////////////////////
PLAYM4_API BOOL __stdcall PlayM4_AdjustWaveAudio(LONG nPort,LONG nCoefficient);
PLAYM4_API BOOL __stdcall PlayM4_SetVerifyCallBack(LONG nPort, DWORD nBeginTime, DWORD nEndTime, void (__stdcall * funVerify)(long nPort, FRAME_POS * pFilePos, DWORD bIsVideo, DWORD nUser),  DWORD  nUser);
PLAYM4_API BOOL __stdcall PlayM4_SetAudioCallBack(LONG nPort, void (__stdcall * funAudio)(long nPort, char * pAudioBuf, long nSize, long nStamp, long nType, long nUser), long nUser);
PLAYM4_API BOOL __stdcall PlayM4_SetEncTypeChangeCallBack(LONG nPort,void(CALLBACK *funEncChange)(long nPort,long nUser),long nUser);
PLAYM4_API BOOL __stdcall PlayM4_SetColor(LONG nPort, DWORD nRegionNum, int nBrightness, int nContrast, int nSaturation, int nHue);
PLAYM4_API BOOL __stdcall PlayM4_GetColor(LONG nPort, DWORD nRegionNum, int *pBrightness, int *pContrast, int *pSaturation, int *pHue);
PLAYM4_API BOOL __stdcall PlayM4_SetEncChangeMsg(LONG nPort,HWND hWnd,UINT nMsg);
PLAYM4_API BOOL __stdcall PlayM4_GetOriginalFrameCallBack(LONG nPort, BOOL bIsChange,BOOL bNormalSpeed,long nStartFrameNum,long nStartStamp,long nFileHeader,void(CALLBACK *funGetOrignalFrame)(long nPort,FRAME_TYPE *frameType, long nUser),long nUser);
PLAYM4_API BOOL __stdcall PlayM4_GetFileSpecialAttr(LONG nPort, DWORD *pTimeStamp,DWORD *pFileNum ,DWORD *pReserved);
PLAYM4_API DWORD __stdcall PlayM4_GetSpecialData(LONG nPort);
PLAYM4_API BOOL __stdcall PlayM4_SetCheckWatermarkCallBack(LONG nPort,void(CALLBACK* funCheckWatermark)(long nPort,WATERMARK_INFO* pWatermarkInfo,DWORD nUser),DWORD nUser);
PLAYM4_API BOOL __stdcall PlayM4_SetImageSharpen(LONG nPort,DWORD nLevel);
PLAYM4_API BOOL __stdcall PlayM4_SetDecodeFrameType(LONG nPort,DWORD nFrameType);
PLAYM4_API BOOL __stdcall PlayM4_SetPlayMode(LONG nPort,BOOL bNormal);
PLAYM4_API BOOL __stdcall PlayM4_SetOverlayFlipMode(LONG nPort,BOOL bTrue);
//PLAYM4_API DWORD __stdcall PlayM4_GetAbsFrameNum(LONG nPort); 
 
//////////////////V4.7.0.0//////////////////////////////////////////////////////
////convert yuv to jpeg
PLAYM4_API BOOL __stdcall PlayM4_ConvertToJpegFile(char * pBuf,long nSize,long nWidth,long nHeight,long nType,char *sFileName);
PLAYM4_API BOOL __stdcall PlayM4_SetJpegQuality(long nQuality);
//set deflash
PLAYM4_API BOOL __stdcall PlayM4_SetDeflash(LONG nPort,BOOL bDefalsh);
//PLAYM4_API BOOL __stdcall PlayM4_SetDecCallBackEx(LONG nPort,void (CALLBACK* DecCBFun)(long nPort,char * pBuf,long nSize,FRAME_INFO * pFrameInfo, long nReserved1,long nReserved2), char* pDest, long nDestSize);
//////////////////V4.8.0.0/////////////////////////////////////////////////////////
//check discontinuous frame number as error data?
PLAYM4_API BOOL __stdcall PlayM4_CheckDiscontinuousFrameNum(LONG nPort, BOOL bCheck);
//get bmp or jpeg
PLAYM4_API BOOL __stdcall PlayM4_GetBMP(LONG nPort,PBYTE pBitmap,DWORD nBufSize,DWORD* pBmpSize);
PLAYM4_API BOOL __stdcall PlayM4_GetJPEG(LONG nPort,PBYTE pJpeg,DWORD nBufSize,DWORD* pJpegSize);
//dec call back mend
PLAYM4_API BOOL __stdcall PlayM4_SetDecCallBackMend(LONG nPort,void (CALLBACK* DecCBFun)(long nPort,char * pBuf,long nSize,FRAME_INFO * pFrameInfo, long nUser,long nReserved2), long nUser);
PLAYM4_API BOOL __stdcall PlayM4_SetSecretKey(LONG nPort, LONG lKeyType, char *pSecretKey, LONG lKeyLen);
 
// add by gb 2007-12-23
PLAYM4_API BOOL __stdcall PlayM4_SetFileEndCallback(LONG nPort, void(CALLBACK*FileEndCallback)(long nPort, void *pUser), void *pUser);
 
// add by gb 080131 version 4.9.0.1
PLAYM4_API BOOL __stdcall PlayM4_GetPort(LONG* nPort);
PLAYM4_API BOOL __stdcall PlayM4_FreePort(LONG nPort);
PLAYM4_API BOOL __stdcall PlayM4_SetDisplayCallBackEx(LONG nPort,void (CALLBACK* DisplayCBFun)(DISPLAY_INFO *pstDisplayInfo), long nUser);
PLAYM4_API BOOL __stdcall PlayM4_SkipErrorData(LONG nPort, BOOL bSkip);
PLAYM4_API BOOL __stdcall PlayM4_SetDecCallBackExMend(LONG nPort, void (CALLBACK* DecCBFun)(long nPort, char* pBuf, long nSize, FRAME_INFO* pFrameInfo, 
                                                      long nUser, long nReserved2), char* pDest, long nDestSize, long nUser);
//reverse play add by chenjie 110609
PLAYM4_API BOOL __stdcall PlayM4_ReversePlay(LONG nPort);
PLAYM4_API BOOL __stdcall PlayM4_GetSystemTime(LONG nPort, PLAYM4_SYSTEM_TIME *pstSystemTime);
 
#ifndef PLAYM4_SESSION_INFO_TAG
#define PLAYM4_SESSION_INFO_TAG
//nProtocolType
#define PLAYM4_PROTOCOL_RTSP    1
//nSessionInfoType
#define PLAYM4_SESSION_INFO_SDP 1
 
typedef struct _PLAYM4_SESSION_INFO_     //½»»¥ÐÅÏ¢½á¹¹
{
      int            nSessionInfoType;   //½»»¥ÐÅÏ¢ÀàÐÍ£¬±ÈÈçSDP£¬±ÈÈ纣¿µË½ÓÐÐÅϢͷ
      int            nSessionInfoLen;    //½»»¥ÐÅÏ¢³¤¶È
      unsigned char* pSessionInfoData;   //½»»¥ÐÅÏ¢Êý¾Ý
 
} PLAYM4_SESSION_INFO;
#endif
 
PLAYM4_API BOOL __stdcall PlayM4_OpenStreamAdvanced(LONG nPort, int nProtocolType, PLAYM4_SESSION_INFO* pstSessionInfo, DWORD nBufPoolSize);
 
#define R_ANGLE_0   -1  //²»Ðýת
#define R_ANGLE_L90  0  //Ïò×óÐýת90¶È
#define R_ANGLE_R90  1  //ÏòÓÒÐýת90¶È
#define R_ANGLE_180  2  //Ðýת180¶È
 
PLAYM4_API BOOL __stdcall PlayM4_SetRotateAngle(LONG nPort, DWORD nRegionNum, DWORD dwType);
 
#ifndef PLAYM4_ADDITION_INFO_TAG
#define PLAYM4_ADDITION_INFO_TAG
typedef struct _PLAYM4_ADDITION_INFO_     //½»»¥ÐÅÏ¢½á¹¹
{
    BYTE*   pData;            //¸½¼þÊý¾Ý
    DWORD   dwDatalen;        //¸½¼þÊý¾Ý³¤¶È
    DWORD    dwDataType;        //Êý¾ÝÀàÐÍ
    DWORD    dwTimeStamp;    //Ïà¶Ôʱ¼ä´Á
} PLAYM4_ADDITION_INFO;
#endif
 
//dwGroupIndex ÔÝÔ¼¶¨È¡Öµ0~3£¬µÚÒ»°æ±¾È¡Ïûͬ²½Ö»ÄÜͬ¸öclosestream´¦Àí
PLAYM4_API BOOL __stdcall PlayM4_SetSycGroup(LONG nPort, DWORD dwGroupIndex);
//Ôݲ»ÊµÏִ˺¯Êý£¬Í¬¸ö×éÉèÖÃµÄÆðʼʱ¼ä²»Ò»Ö£¬ÒÔ×îСµÄʱ¼ä×÷Ϊ²¥·ÅÆðµã£¬Í¬Ò»×é¿ÉÖ»Éèһ·
PLAYM4_API BOOL __stdcall PlayM4_SetSycStartTime(LONG nPort, PLAYM4_SYSTEM_TIME *pstSystemTime);
 
 
// ÒÔÏÂʵÏÖÓãÑÛÏà¹ØµÄ½Ó¿Ú
#ifndef FISH_EYE_TAG
#define FISH_EYE_TAG
 
// °²×°ÀàÐÍ
typedef enum tagFECPlaceType
{
    FEC_PLACE_WALL    = 0x1,        // ±Ú×°·½Ê½        (·¨Ïßˮƽ)
    FEC_PLACE_FLOOR   = 0x2,        // µØÃæ°²×°        (·¨ÏßÏòÉÏ)
    FEC_PLACE_CEILING = 0x3,        // ¶¥×°·½Ê½        (·¨ÏßÏòÏÂ)
 
}FECPLACETYPE;
 
typedef enum tagFECCorrectType
{
    FEC_CORRECT_PTZ = 0x100,        // PTZ
    FEC_CORRECT_180 = 0x200,        // 180¶È½ÃÕý  £¨¶ÔÓ¦2P£©
    FEC_CORRECT_360 = 0x300,        // 360È«¾°½ÃÕý £¨¶ÔÓ¦1P£©
    FEC_CORRECT_LAT = 0x400         //γ¶ÈÕ¹¿ª
 
}FECCORRECTTYPE;
 
typedef struct tagCycleParam
{
    float    fRadiusLeft;    // Ô²µÄ×î×ó±ßX×ø±ê
    float    fRadiusRight;    // Ô²µÄ×îÓÒ±ßX×ø±ê
    float   fRadiusTop;        // Ô²µÄ×îÉϱßY×ø±ê
    float   fRadiusBottom;    // Ô²µÄ×îϱßY×ø±ê
 
}CYCLEPARAM;
 
typedef struct tagPTZParam
{
    float fPTZPositionX;        // PTZ ÏÔʾµÄÖÐÐÄλÖàX×ø±ê
    float fPTZPositionY;        // PTZ ÏÔʾµÄÖÐÐÄλÖàY×ø±ê    
 
}PTZPARAM;
 
 
// ´íÎóÂë
/*********************************************
     
 
 ********************************************/
 
 
// ¸üбê¼Ç±äÁ¿¶¨Òå
 
 
#define         FEC_UPDATE_RADIUS             0x1
#define         FEC_UPDATE_PTZZOOM             0x2
#define         FEC_UPDATE_WIDESCANOFFSET     0x4
#define         FEC_UPDATE_PTZPARAM             0x8
 
 
typedef struct tagFECParam
{
 
    
    unsigned int     nUpDateType;            // ¸üеÄÀàÐÍ
 
    unsigned int    nPlaceAndCorrect;        // °²×°·½Ê½ºÍ½ÃÕý·½Ê½£¬Ö»ÄÜÓÃÓÚ»ñÈ¡£¬SetParamµÄʱºòÎÞЧ,¸ÃÖµ±íʾ°²×°·½Ê½ºÍ½ÃÕý·½Ê½µÄºÍ
 
    PTZPARAM        stPTZParam;                // PTZ Ð£ÕýµÄ²ÎÊý
 
    CYCLEPARAM        stCycleParam;            // ÓãÑÛͼÏñÔ²ÐIJÎÊý
 
    float            fZoom;                    // PTZ ÏÔʾµÄ·¶Î§²ÎÊý
 
    float            fWideScanOffset;        // 180»òÕß360¶ÈУÕýµÄÆ«ÒÆ½Ç¶È
 
    int                nResver[16];            // ±£Áô×Ö¶Î
 
}FISHEYEPARAM;
 
typedef void (__stdcall * FISHEYE_CallBack )( void* pUser  , unsigned int  nSubPort , unsigned int nCBType , void * hDC ,   unsigned int nWidth , unsigned int nHeight); 
 
#endif
// ÆôÓÃÓãÑÛ
PLAYM4_API BOOL __stdcall PlayM4_FEC_Enable(LONG nPort);
 
// ¹Ø±ÕÓãÑÛÄ£¿é
PLAYM4_API BOOL __stdcall PlayM4_FEC_Disable(LONG nPort);
 
// »ñÈ¡ÓãÑÛ½ÃÕý´¦Àí×Ӷ˿ڠ[1~31] 
PLAYM4_API BOOL  __stdcall PlayM4_FEC_GetPort(LONG nPort, unsigned int* nSubPort,FECPLACETYPE emPlaceType,FECCORRECTTYPE emCorrectType);
 
// É¾³ýÓãÑÛ½ÃÕý´¦Àí×Ó¶Ë¿Ú
PLAYM4_API BOOL __stdcall PlayM4_FEC_DelPort(LONG nPort , unsigned int nSubPort);
 
// ÉèÖÃÓãÑÛ½ÃÕý²ÎÊý
PLAYM4_API BOOL __stdcall PlayM4_FEC_SetParam(LONG nPort , unsigned int nSubPort , FISHEYEPARAM * pPara);
 
// »ñÈ¡ÓãÑÛ½ÃÕý²ÎÊý
PLAYM4_API BOOL __stdcall PlayM4_FEC_GetParam(LONG nPort , unsigned int nSubPort , FISHEYEPARAM * pPara);
 
// ÉèÖÃÏÔʾ´°¿Ú£¬¿ÉÒÔËæÊ±Çл»
PLAYM4_API BOOL __stdcall PlayM4_FEC_SetWnd(LONG nPort , unsigned int nSubPort , void * hWnd);
 
// ÉèÖÃÓãÑÛ´°¿ÚµÄ»æÍ¼»Øµ÷
PLAYM4_API BOOL __stdcall PlayM4_FEC_SetCallBack(LONG nPort , unsigned int nSubPort , FISHEYE_CallBack cbFunc , void * pUser);
 
//motionflow
PLAYM4_API BOOL __stdcall PlayM4_MotionFlow(LONG nPort, DWORD dwAdjustType);
 
 
//ͼÏñÔöÇ¿Ïà¹Ø
#ifndef PLAYM4_HIKVIE_TAG
#define PLAYM4_HIKVIE_TAG
 
typedef struct _PLAYM4_VIE_DYNPARAM_
{
    int moduFlag;      //ÆôÓõÄËã·¨´¦ÀíÄ£¿é£¬ÔÚPLAYM4_VIE_MODULESÖж¨Òå
    //Èç PLAYM4_VIE_MODU_ADJ | PLAYM4_VIE_MODU_EHAN
    //Ä£¿éÆôÓú󣬱ØÐëÉèÖÃÏàÓ¦µÄ²ÎÊý£»
    //PLAYM4_VIE_MODU_ADJ
    int brightVal;     //ÁÁ¶Èµ÷½ÚÖµ£¬[-255, 255]
    int contrastVal;   //¶Ô±È¶Èµ÷½ÚÖµ£¬[-256, 255]
    int colorVal;      //±¥ºÍ¶Èµ÷½ÚÖµ£¬[-256, 255]
    //PLAYM4_VIE_MODU_EHAN
    int toneScale;     //Â˲¨·¶Î§£¬[0, 100]
    int toneGain;      //¶Ô±È¶Èµ÷½Ú£¬È«¾Ö¶Ô±È¶ÈÔöÒæÖµ£¬[-256, 255]
    int toneOffset;    //ÁÁ¶Èµ÷½Ú£¬ÁÁ¶Èƽ¾ùÖµÆ«ÒÆ£¬[-255, 255]
    int toneColor;     //ÑÕÉ«µ÷½Ú£¬ÑÕÉ«±£ÕæÖµ£¬[-256, 255]
    //PLAYM4_VIE_MODU_DEHAZE
    int dehazeLevel;   //È¥ÎíÇ¿¶È£¬[0, 255]
    int dehazeTrans;   //͸ÉäÖµ£¬[0, 255]
    int dehazeBright;  //ÁÁ¶È²¹³¥£¬[0, 255]
    //PLAYM4_VIE_MODU_DENOISE
    int denoiseLevel;  //È¥ÔëÇ¿¶È£¬[0, 255]
    //PLAYM4_VIE_MODU_SHARPEN
    int usmAmount;     //Èñ»¯Ç¿¶È£¬[0, 255]
    int usmRadius;     //Èñ»¯°ë¾¶£¬[1, 15]
    int usmThreshold;  //Èñ»¯ãÐÖµ£¬[0, 255]
    //PLAYM4_VIE_MODU_DEBLOCK
    int deblockLevel;  //È¥¿éÇ¿¶È£¬[0, 100]
    //PLAYM4_VIE_MODU_LENS
    int lensWarp;      //»û±äÁ¿£¬[-256, 255]
    int lensZoom;      //Ëõ·ÅÁ¿£¬[-256, 255]
    //PLAYM4_VIE_MODU_CRB
    //ÎÞÏìÓ¦²ÎÊý
} PLAYM4_VIE_PARACONFIG;
 
typedef enum _PLAYM4_VIE_MODULES
{
    PLAYM4_VIE_MODU_ADJ      = 0x00000001, //ͼÏñ»ù±¾µ÷½Ú
    PLAYM4_VIE_MODU_EHAN     = 0x00000002, //¾Ö²¿Ôöǿģ¿é
    PLAYM4_VIE_MODU_DEHAZE   = 0x00000004, //È¥ÎíÄ£¿é
    PLAYM4_VIE_MODU_DENOISE  = 0x00000008, //È¥ÔëÄ£¿é
    PLAYM4_VIE_MODU_SHARPEN  = 0x00000010, //Èñ»¯Ä£¿é
    PLAYM4_VIE_MODU_DEBLOCK  = 0x00000020, //È¥¿éÂ˲¨Ä£¿é
    PLAYM4_VIE_MODU_CRB      = 0x00000040, //É«²ÊƽºâÄ£¿é
    PLAYM4_VIE_MODU_LENS     = 0x00000080, //¾µÍ·»û±ä½ÃÕýÄ£¿é
}PLAYM4_VIE_MODULES;
#endif
 
//ÉèÖùرÕ/¿ªÆôÄ£¿é
//dwModuFlag¶ÔÓ¦PLAYM4_VIE_MODULESºê,¿É×éºÏ
//ÏÈÉèÖÃÄ£¿é¿ªÆô£¬ÔÙÉèÖÃÄ£¿é²ÎÊý£»ÆÚ¼ä²ÉÓÃĬÈϵIJÎÊý;
//¹Ø±ÕÄ£¿éºó£¬ÉÏ´ÎÉèÖõIJÎÊýÇå¿Õ
//ÆäËû½Ó¿Úµ÷Ó㬱ØÐëÔڸýӿڿªÆôÄ£¿éºó£»·ñÔò£¬·µ»Ø´íÎó
PLAYM4_API BOOL __stdcall PlayM4_VIE_SetModuConfig(LONG lPort,int nModuFlag,BOOL bEnable);
 
//ÉèÖÃͼÏñÔöÇ¿ÇøÓò£¬NULLȫͼ£»³¬¹ýȫͼ£¬²ÉÓÃȫͼ£»×îÐ¡ÇøÓò16*16ÏñËØ
//¿ÉÖ§³ÖÉèÖÃÇøÓò£¬×î¶à±È½Ï˵4¸ö£¬µÚÒ»¸ö°æ±¾¿ÉÒÔÖ»Ö§³ÖÒ»¸ö¡£¶à¸öÇøÓòÒªÇó²»ÄÜÖØµþ£¬ÓÐÖØµþ¾Í±¨´í
PLAYM4_API BOOL __stdcall PlayM4_VIE_SetRegion(LONG lPort,LONG lRegNum,RECT* pRect);
 
//»ñÈ¡¿ªÆôÄ£¿é
PLAYM4_API BOOL __stdcall PlayM4_VIE_GetModuConfig(LONG lPort,int* pdwModuFlag);
 
//ÉèÖòÎÊý
//먦ÆôÄ£¿éµÄ²ÎÊýÉèÖñ»ºöÂÔ
PLAYM4_API BOOL __stdcall PlayM4_VIE_SetParaConfig(LONG lPort,PLAYM4_VIE_PARACONFIG* pParaConfig);
 
//»ñÈ¡¿ªÆôÄ£¿éµÄ²ÎÊý
PLAYM4_API BOOL __stdcall PlayM4_VIE_GetParaConfig(LONG lPort,PLAYM4_VIE_PARACONFIG* pParaConfig);
 
//ÒôÊÓÆµÍ¬²½½Ó¿Ú
PLAYM4_API BOOL __stdcall PlayM4_SyncToAudio(LONG nPort, BOOL bSyncToAudio);
 
// Ë½ÓÐÐÅϢģ¿éÀàÐÍ
typedef enum _PLAYM4_PRIDATA_RENDER
{    
    PLAYM4_RENDER_ANA_INTEL_DATA   = 0x00000001, //ÖÇÄÜ·ÖÎö
    PLAYM4_RENDER_MD               = 0x00000002, //ÒÆ¶¯Õì²â
    PLAYM4_RENDER_ADD_POS          = 0x00000004, //POSÐÅÏ¢ºóµþ¼Ó        
}PLAYM4_PRIDATA_RENDER;
 
typedef struct TI_PTZ_INFO_
{
    unsigned short dwDefVer;    //½á¹¹Ìå°æ±¾
    unsigned short dwLength;    //PTZ_info³¤¶È£¬ÒÔ8×Ö½ÚΪµ¥Î»
    DWORD          dwP;    //P£¨0~3600£©
    DWORD          dwT;         //T£¨0~3600£©
    DWORD          dwZ;         //Z£¨0~3600£©
    BYTE        chFSMState; //¸ú×Ù״̬
    BYTE           bClearFocusState; //¾Û½¹ÇåÎú״̬£¨0,1£©
    BYTE        reserved[6]; //6¸ö×Ö½Ú±£Áô
}PTZ_INFO;
 
 
// ÖÇÄÜÐÅÏ¢¿ª¹Ø
PLAYM4_API BOOL __stdcall PlayM4_RenderPrivateData(LONG nPort, int nIntelType, BOOL bTrue);
 
// ¼ÓÃÜÂëÁ÷»Øµ÷,nType=0±íʾÂëÁ÷¼ÓÃܱê¼Çλ·¢Éú±ä»¯¾Í»Øµ÷£¬nType=1±íʾÂëÁ÷ÓмÓÃÜλ·¢Éú»Øµ÷
PLAYM4_API BOOL __stdcall PlayM4_SetEncryptTypeCallBack(LONG nPort, DWORD nType,
                                                        void (CALLBACK* EncryptTypeCBFun)(long nPort, ENCRYPT_INFO* pEncryptInfo, long nUser, long nReserved2), long nUser);
//lType: 1 ±íʾ»ñÈ¡µ±Ç°ÏÔʾ֡PTZÐÅÏ¢¡£ÒÔÌØ¶¨½á¹¹ÌåÐÎʽ´æ´¢ÔÚpInfoÄÚ£¬plLen·µ»Ø³¤¶ÈÐÅÏ¢
PLAYM4_API BOOL __stdcall PlayM4_GetStreamAdditionalInfo(LONG nPort, LONG lType, BYTE* pInfo, LONG* plLen);
 
#endif //_PLAYM4_H_