分离 Cpp 和 Go 的分支
This commit is contained in:
		| @@ -1,7 +0,0 @@ | |||||||
| /.idea |  | ||||||
| /.git |  | ||||||
| /cmake-build-debug-visual-studio |  | ||||||
| /V6.1.9.45_build20220902_ArmLinux64_ZH_20240802154010_lib.zip |  | ||||||
| /V6.1.9.48_build20230410_linux64_20240829112751_lib.zip |  | ||||||
| /V6.1.9.48_build20230410_win64_20240829112623_lib.zip |  | ||||||
| /build |  | ||||||
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,8 +1,6 @@ | |||||||
| /.idea | /.idea | ||||||
| /.cache | /.cache | ||||||
| /.fleet | /.fleet | ||||||
| /cmake-build-debug-visual-studio |  | ||||||
| /cmake-build-release-visual-studio |  | ||||||
| *.lib | *.lib | ||||||
| *.dll | *.dll | ||||||
| *.so | *.so | ||||||
|   | |||||||
| @@ -1,64 +0,0 @@ | |||||||
| cmake_minimum_required(VERSION 3.15) |  | ||||||
|  |  | ||||||
| project(HikNetSDKPkg CXX) |  | ||||||
| set(CMAKE_CXX_STANDARD 11) |  | ||||||
|  |  | ||||||
| set(OS ${CMAKE_HOST_SYSTEM_NAME}) |  | ||||||
| set(Arch ${CMAKE_HOST_SYSTEM_PROCESSOR}) |  | ||||||
| set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build) |  | ||||||
| set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build) |  | ||||||
| set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build) |  | ||||||
|  |  | ||||||
| message(STATUS "Target Operating System: ${OS}") |  | ||||||
| message(STATUS "Target Architecture: ${Arch}") |  | ||||||
|  |  | ||||||
| if(OS STREQUAL "Windows") |  | ||||||
|     set(CMAKE_DEBUG_POSTFIX "_win_amd64_d") |  | ||||||
|     set(CMAKE_RELEASE_POSTFIX "_win_amd64") |  | ||||||
| elseif (Arch STREQUAL "x86_64" OR Arch STREQUAL "amd64") |  | ||||||
|     set(CMAKE_DEBUG_POSTFIX "_linux_amd64_d") |  | ||||||
|     set(CMAKE_RELEASE_POSTFIX "_linux_amd64") |  | ||||||
| elseif (Arch STREQUAL "aarch64" OR Arch STREQUAL "arm64") |  | ||||||
|     set(CMAKE_DEBUG_POSTFIX "_linux_arm64_d") |  | ||||||
|     set(CMAKE_RELEASE_POSTFIX "_linux_arm64") |  | ||||||
| endif () |  | ||||||
|  |  | ||||||
| add_library(HikNetSDKPkg SHARED |  | ||||||
|         library.cpp |  | ||||||
|         src/HIKBallCamera.cpp |  | ||||||
|         src/HIKBase.cpp |  | ||||||
|         src/HIKNvr.cpp |  | ||||||
|         src/FormatTrans.cpp |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| target_compile_definitions(HikNetSDKPkg PRIVATE Export) |  | ||||||
|  |  | ||||||
| if(Arch STREQUAL "x86_64" OR OS STREQUAL "Windows") |  | ||||||
|     target_include_directories(HikNetSDKPkg PRIVATE "./src/include/Hik/amd64") |  | ||||||
| elseif (Arch STREQUAL "aarch64") |  | ||||||
|     target_include_directories(HikNetSDKPkg PRIVATE "./src/include/Hik/arm64") |  | ||||||
| endif () |  | ||||||
|  |  | ||||||
| if(OS STREQUAL "Windows") |  | ||||||
|     target_link_directories(HikNetSDKPkg PRIVATE "./arm64_windows_lib") |  | ||||||
|     target_link_libraries(HikNetSDKPkg PRIVATE "HCNetSDK.lib") |  | ||||||
|     target_link_libraries(HikNetSDKPkg PRIVATE "HCCore.lib") |  | ||||||
|     target_link_libraries(HikNetSDKPkg PRIVATE "GdiPlus.lib") |  | ||||||
| elseif (Arch STREQUAL "x86_64" OR Arch STREQUAL "amd64") |  | ||||||
|     target_link_directories(HikNetSDKPkg PRIVATE "./amd64_linux_lib") |  | ||||||
|     target_link_libraries(HikNetSDKPkg PRIVATE "libHCCore.so") |  | ||||||
|     target_link_libraries(HikNetSDKPkg PRIVATE "libhcnetsdk.so") |  | ||||||
|     target_link_libraries(HikNetSDKPkg PRIVATE "libhpr.so") |  | ||||||
|     target_link_libraries(HikNetSDKPkg PRIVATE "libz.so") |  | ||||||
| elseif (Arch STREQUAL "aarch64") |  | ||||||
|     target_link_directories(HikNetSDKPkg PRIVATE "./arm64_linux_lib") |  | ||||||
|     target_link_libraries(HikNetSDKPkg PRIVATE "libAudioRender.so") |  | ||||||
|     target_link_libraries(HikNetSDKPkg PRIVATE "libcrypto.so") |  | ||||||
|     target_link_libraries(HikNetSDKPkg PRIVATE "libHCCore.so") |  | ||||||
|     target_link_libraries(HikNetSDKPkg PRIVATE "libhcnetsdk.so") |  | ||||||
|     target_link_libraries(HikNetSDKPkg PRIVATE "libhpr.so") |  | ||||||
|     target_link_libraries(HikNetSDKPkg PRIVATE "libPlayCtrl.so") |  | ||||||
|     target_link_libraries(HikNetSDKPkg PRIVATE "libssl.so") |  | ||||||
|     target_link_libraries(HikNetSDKPkg PRIVATE "libSuperRender.so") |  | ||||||
|     target_link_libraries(HikNetSDKPkg PRIVATE "libz.so") |  | ||||||
| endif () |  | ||||||
							
								
								
									
										22
									
								
								Dockerfile
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								Dockerfile
									
									
									
									
									
								
							| @@ -1,22 +0,0 @@ | |||||||
| FROM r-2.top/alpine:3.19 AS deps |  | ||||||
|  |  | ||||||
| WORKDIR /usr |  | ||||||
|  |  | ||||||
| RUN apk add gcc g++ cmake make acl |  | ||||||
|  |  | ||||||
| FROM r-2.top/alpine:3.19 AS build |  | ||||||
|  |  | ||||||
| WORKDIR /hikbuild |  | ||||||
|  |  | ||||||
| COPY --from=deps /usr /usr |  | ||||||
| COPY --from=deps /lib /lib |  | ||||||
| COPY . /hikbuild |  | ||||||
|  |  | ||||||
| RUN cmake . -D Arch=${TARGETARCH} -D CMAKE_BUILD_TYPE=RELEASE && make |  | ||||||
|  |  | ||||||
| FROM r-2.top/alpine:3.19 AS export |  | ||||||
|  |  | ||||||
| WORKDIR /home |  | ||||||
| COPY --from=build /hikbuild/build /home |  | ||||||
|  |  | ||||||
| #docker buildx build --platform linux/amd64,linux/arm64 --output type=local,dest=/hikbuild/ . |  | ||||||
| @@ -54,12 +54,12 @@ func getSystemLibrary() string { | |||||||
| 	switch runtime.GOOS { | 	switch runtime.GOOS { | ||||||
| 	case "linux": | 	case "linux": | ||||||
| 		if runtime.GOARCH == "amd64" || runtime.GOARCH == "386" { | 		if runtime.GOARCH == "amd64" || runtime.GOARCH == "386" { | ||||||
| 			return "libHikNetSDKPkg_linux_amd64.so" | 			return "./libHikNetSDKPkg_linux_amd64.so" | ||||||
| 		} else { | 		} else { | ||||||
| 			return "libHikNetSDKPkg_linux_arm64.so" | 			return "./libHikNetSDKPkg_linux_arm64.so" | ||||||
| 		} | 		} | ||||||
| 	case "windows": | 	case "windows": | ||||||
| 		return "HikNetSDKPkg_win_amd64.dll" | 		return "./HikNetSDKPkg_win_amd64.dll" | ||||||
| 	default: | 	default: | ||||||
| 		panic(fmt.Errorf("GOOS=%s is not supported", runtime.GOOS)) | 		panic(fmt.Errorf("GOOS=%s is not supported", runtime.GOOS)) | ||||||
| 	} | 	} | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								go.mod
									
									
									
									
									
								
							| @@ -2,4 +2,4 @@ module gitea.com/kunmeng/HikNetSDKPkg | |||||||
|  |  | ||||||
| go 1.23.1 | go 1.23.1 | ||||||
|  |  | ||||||
| require github.com/ebitengine/purego v0.8.0 | require github.com/ebitengine/purego v0.8.1 | ||||||
|   | |||||||
							
								
								
									
										3
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								go.sum
									
									
									
									
									
								
							| @@ -1,2 +1 @@ | |||||||
| github.com/ebitengine/purego v0.8.0 h1:JbqvnEzRvPpxhCJzJJ2y0RbiZ8nyjccVUrSM3q+GvvE= | github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= | ||||||
| github.com/ebitengine/purego v0.8.0/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= |  | ||||||
|   | |||||||
| @@ -1,38 +0,0 @@ | |||||||
| #ifndef HIKVISION_NETWORK_SDK_PACKAGING_LIBRARY_LIBRARY_H |  | ||||||
| #define HIKVISION_NETWORK_SDK_PACKAGING_LIBRARY_LIBRARY_H |  | ||||||
|  |  | ||||||
| #ifdef _WIN32 |  | ||||||
|     #ifdef Export |  | ||||||
|         #define Omnimatrix __declspec(dllexport) |  | ||||||
|     #else |  | ||||||
|         #define Omnimatrix __declspec(dllimport) |  | ||||||
|     #endif |  | ||||||
| #else |  | ||||||
|     #define Omnimatrix |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|     Omnimatrix bool DVR_Init(); |  | ||||||
|  |  | ||||||
|     Omnimatrix void* NewHIKBallCamera(); |  | ||||||
|     Omnimatrix bool InitBallCamera(void* PtrHIKBallCamera,const char* ip, const char* port,const char* username,const char* password,const char* BallMachineType); |  | ||||||
|     Omnimatrix bool PtzGotoPut(void* PtrHIKBallCamera,int Action, float P, float T, float Z); |  | ||||||
|     Omnimatrix bool PtzGet(void* PtrHIKBallCamera,void *P, void *T, void *Z); |  | ||||||
|     Omnimatrix bool StopBus(void* PtrHIKBallCamera,int direction); |  | ||||||
|     Omnimatrix bool StartBus(void* PtrHIKBallCamera,int direction,int speed); |  | ||||||
|  |  | ||||||
|     Omnimatrix void* NewHIKNvr(); |  | ||||||
|     Omnimatrix bool InitNvr(void* PtrHIKNvr,char* ip, char* port, char* username, char* password, int channel); |  | ||||||
|     Omnimatrix char* CheckTimeRegionWithMonth(void* PtrHIKNvr,int year,int month); |  | ||||||
|     Omnimatrix char* CheckTimeRegionWithDay(void* PtrHIKNvr,int year,int month,int day); |  | ||||||
|     Omnimatrix int NvrUTCDiff(void* PtrHIKNvr); |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #endif //HIKVISION_NETWORK_SDK_PACKAGING_LIBRARY_LIBRARY_H |  | ||||||
							
								
								
									
										93
									
								
								library.cpp
									
									
									
									
									
								
							
							
						
						
									
										93
									
								
								library.cpp
									
									
									
									
									
								
							| @@ -1,93 +0,0 @@ | |||||||
| #include "include/library.h" |  | ||||||
| #include "./src/HIKBallCamera.h" |  | ||||||
| #include "src/HIKNvr.h" |  | ||||||
| #include <cstring> |  | ||||||
|  |  | ||||||
| bool DVR_Init() { |  | ||||||
|     return HK_DVR_Init(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void *NewHIKBallCamera() { |  | ||||||
|     return new HIKBallCamera(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool InitBallCamera(void *PtrHIKBallCamera, const char *ip, const char *port, const char *username, const char *password, const char *BallMachineType) { |  | ||||||
|     auto *HIKBallCameraObj = (HIKBallCamera *)PtrHIKBallCamera; |  | ||||||
|     return HIKBallCameraObj->InitBallCamera(ip, port, username, password, BallMachineType); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool PtzGotoPut(void *PtrHIKBallCamera, int Action, float P, float T, float Z) { |  | ||||||
|     auto *HIKBallCameraObj = (HIKBallCamera *)PtrHIKBallCamera; |  | ||||||
|     return HIKBallCameraObj->PtzGotoPut(Action, P, T, Z); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool PtzGet(void *PtrHIKBallCamera, void *P, void *T, void *Z) { |  | ||||||
|     auto *HIKBallCameraObj = (HIKBallCamera *)PtrHIKBallCamera; |  | ||||||
|     return HIKBallCameraObj->PtzGet((float *)P, (float *)T, (float *)Z); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool StopBus(void *PtrHIKBallCamera, int direction) { |  | ||||||
|     auto *HIKBallCameraObj = (HIKBallCamera *)PtrHIKBallCamera; |  | ||||||
|     return HIKBallCameraObj->StopBus(direction); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool StartBus(void *PtrHIKBallCamera, int direction, int speed) { |  | ||||||
|     auto *HIKBallCameraObj = (HIKBallCamera *)PtrHIKBallCamera; |  | ||||||
|     return HIKBallCameraObj->StartBus(direction, speed); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void *NewHIKNvr() { |  | ||||||
|     return new HIKNvr(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool InitNvr(void *PtrHIKNvr, char *ip, char *port, char *username, char *password, int channel) { |  | ||||||
|     auto *HIKNvrObj = (HIKNvr *)PtrHIKNvr; |  | ||||||
|     return HIKNvrObj->InitNvr(ip, port, username, password, channel); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| char *CheckTimeRegionWithMonth(void *PtrHIKNvr, int year, int month) { |  | ||||||
|     auto *HIKNvrObj = (HIKNvr *)PtrHIKNvr; |  | ||||||
|  |  | ||||||
|     DateTime select_time; |  | ||||||
|     select_time.year() = year; |  | ||||||
|     select_time.month() = month; |  | ||||||
|     std::string res; |  | ||||||
|  |  | ||||||
|     //check the time region with month |  | ||||||
|     int nRet = 0; |  | ||||||
|     std::vector<int> available_date_vec; |  | ||||||
|     nRet = HIKNvrObj->CheckTimeRegionWithMonth(select_time, available_date_vec); |  | ||||||
|  |  | ||||||
|     if (nRet == 0) { |  | ||||||
|         res = HIKNvrObj->TimeToJson(select_time, &available_date_vec).dump(); |  | ||||||
|     }else{ |  | ||||||
|         res = ""; |  | ||||||
|     } |  | ||||||
|     char *cString = new char[res.size() + 1]; |  | ||||||
|     std::strcpy(cString, res.c_str()); |  | ||||||
|     return cString; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| char *CheckTimeRegionWithDay(void *PtrHIKNvr, int year, int month, int day) { |  | ||||||
|     auto *HIKNvrObj = (HIKNvr *)PtrHIKNvr; |  | ||||||
|     DateTime select_time; |  | ||||||
|     select_time.year() = year; |  | ||||||
|     select_time.month() = month; |  | ||||||
|     select_time.day() = day; |  | ||||||
|     std::string res; |  | ||||||
|     std::vector<TimeRecord> available_time_vec; |  | ||||||
|     int nRet = HIKNvrObj->CheckTimeRegionWithDay(select_time, available_time_vec); |  | ||||||
|     if (nRet == 0) { |  | ||||||
|         res = HIKNvrObj->TimeToJsonInDay(select_time, &available_time_vec).dump(); |  | ||||||
|     }else{ |  | ||||||
|         res = ""; |  | ||||||
|     } |  | ||||||
|     char *cString = new char[res.size() + 1]; |  | ||||||
|     std::strcpy(cString, res.c_str()); |  | ||||||
|     return cString; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| int NvrUTCDiff(void *PtrHIKNvr) { |  | ||||||
|     auto *HIKNvrObj = (HIKNvr *)PtrHIKNvr; |  | ||||||
|     return HIKNvrObj->GetNvrUTCDiff(); |  | ||||||
| } |  | ||||||
							
								
								
									
										123
									
								
								src/DataTime.h
									
									
									
									
									
								
							
							
						
						
									
										123
									
								
								src/DataTime.h
									
									
									
									
									
								
							| @@ -1,123 +0,0 @@ | |||||||
| #pragma once |  | ||||||
| #include <iostream> |  | ||||||
| #include <string> |  | ||||||
|  |  | ||||||
| // |  | ||||||
| class DateTime |  | ||||||
| { |  | ||||||
| public: |  | ||||||
|     DateTime(int year, int month, int day, int hour, int minute, int second) |  | ||||||
|     { |  | ||||||
|         SetDateTime(year, month, day, hour, minute, second); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     DateTime() |  | ||||||
|     { |  | ||||||
|         SetDateTime(0, 0, 0, 0, 0, 0); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     ~DateTime() {} |  | ||||||
|  |  | ||||||
|     // Set date and time |  | ||||||
|     void SetDateTime(int year, int month, int day, int hour, int minute, int second) |  | ||||||
|     { |  | ||||||
|         m_year = year; |  | ||||||
|         m_month = month; |  | ||||||
|         m_day = day; |  | ||||||
|         m_hour = hour; |  | ||||||
|         m_minute = minute; |  | ||||||
|         m_second = second; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     //copy constructor |  | ||||||
|     DateTime(const DateTime& other) |  | ||||||
|     { |  | ||||||
|         m_year = other.m_year; |  | ||||||
|         m_month = other.m_month; |  | ||||||
|         m_day = other.m_day; |  | ||||||
|         m_hour = other.m_hour; |  | ||||||
|         m_minute = other.m_minute; |  | ||||||
|         m_second = other.m_second; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     DateTime& operator=(const DateTime& other) |  | ||||||
|     { |  | ||||||
|         m_year = other.m_year; |  | ||||||
|         m_month = other.m_month; |  | ||||||
|         m_day = other.m_day; |  | ||||||
|         m_hour = other.m_hour; |  | ||||||
|         m_minute = other.m_minute; |  | ||||||
|         m_second = other.m_second; |  | ||||||
|         return *this; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     // Get date and time |  | ||||||
|     std::string GetDateTime() |  | ||||||
|     { |  | ||||||
|         return std::to_string(m_year) + "-" + std::to_string(m_month) + "-" + std::to_string(m_day) + " " + std::to_string(m_hour) + ":" + std::to_string(m_minute) + ":" + std::to_string(m_second); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     // 比较两个对象 |  | ||||||
|     int CompareTo(DateTime other) |  | ||||||
|     { |  | ||||||
|         if (m_year != other.m_year) |  | ||||||
|         { |  | ||||||
|             return m_year < other.m_year ? -1 : 1; |  | ||||||
|         } |  | ||||||
|         if (m_month != other.m_month) |  | ||||||
|         { |  | ||||||
|             return m_month < other.m_month ? -1 : 1; |  | ||||||
|         } |  | ||||||
|         if (m_day != other.m_day) |  | ||||||
|         { |  | ||||||
|             return m_day < other.m_day ? -1 : 1; |  | ||||||
|         } |  | ||||||
|         if (m_hour != other.m_hour) |  | ||||||
|         { |  | ||||||
|             return m_hour < other.m_hour ? -1 : 1; |  | ||||||
|         } |  | ||||||
|         if (m_minute != other.m_minute) |  | ||||||
|         { |  | ||||||
|             return m_minute < other.m_minute ? -1 : 1; |  | ||||||
|         } |  | ||||||
|         if (m_second != other.m_second) |  | ||||||
|         { |  | ||||||
|             return m_second < other.m_second ? -1 : 1; |  | ||||||
|         } |  | ||||||
|         return 0; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     // < Operator overwrite |  | ||||||
|     bool operator<(const DateTime& other) |  | ||||||
|     { |  | ||||||
|         return CompareTo(other) < 0; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     // > Operator overwrite |  | ||||||
|     bool operator>(const DateTime& other) |  | ||||||
|     { |  | ||||||
|         return CompareTo(other) > 0; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     // == Operator overwrite |  | ||||||
|     bool operator==(const DateTime& other) |  | ||||||
|     { |  | ||||||
|         return CompareTo(other) == 0; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     // 访问私有成员 |  | ||||||
|     int& year() { return m_year; } |  | ||||||
|     int& month() { return m_month; } |  | ||||||
|     int& day() { return m_day; } |  | ||||||
|     int& hour() { return m_hour; } |  | ||||||
|     int& minute() { return m_minute; } |  | ||||||
|     int& second() { return m_second; } |  | ||||||
|  |  | ||||||
| private: |  | ||||||
|     int m_year; |  | ||||||
|     int m_month; |  | ||||||
|     int m_day; |  | ||||||
|     int m_hour; |  | ||||||
|     int m_minute; |  | ||||||
|     int m_second; |  | ||||||
| }; |  | ||||||
| @@ -1,43 +0,0 @@ | |||||||
| #pragma once |  | ||||||
|  |  | ||||||
| #include <thread> |  | ||||||
| #include <chrono> |  | ||||||
|  |  | ||||||
| #define SLEEP(x) std::this_thread::sleep_for(std::chrono::seconds(x)); |  | ||||||
|  |  | ||||||
| #ifdef _WIN32_ |  | ||||||
|  |  | ||||||
| #include <windows.h> |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef OmnimatrixExport |  | ||||||
| #define Omnimatrix __declspec(dllexport) |  | ||||||
| #else |  | ||||||
| #define Omnimatrix __declspec(dllimport) |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #define STRCPY(Dst, Len, Src) strcpy_s(Dst, Len, Src) |  | ||||||
|  |  | ||||||
| #define LOCAL_TIME(in, out) localtime_s(in,out); |  | ||||||
|  |  | ||||||
| #define LOCAL_MIN MIN(a,b) |  | ||||||
| #define LOCAL_MAX MAX(a,b) |  | ||||||
|  |  | ||||||
| #endif |  | ||||||
| #ifdef _LINUX_ |  | ||||||
|  |  | ||||||
| #include "unistd.h" |  | ||||||
| #include <stdint.h> |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef Omnimatrix |  | ||||||
| #define Omnimatrix __attribute__((visibility("default"))) |  | ||||||
| #else |  | ||||||
| #define Omnimatrix __attribute__((visibility("default"))) |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #define LOCAL_TIME(in, out) localtime_r(out,in ) |  | ||||||
|  |  | ||||||
| #define STRCPY(Dst,Len ,Src ) strcpy(Dst, Src) |  | ||||||
|  |  | ||||||
| #endif |  | ||||||
| @@ -1,178 +0,0 @@ | |||||||
| #include <cassert> |  | ||||||
| #include <sstream> |  | ||||||
| #include <iomanip> |  | ||||||
| #include "FormatTrans.h" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| float HEX2DEC(WORD Hex) |  | ||||||
| { |  | ||||||
|     BYTE bai = Hex >> 12; |  | ||||||
|     Hex = Hex - bai * std::pow(16, 3); |  | ||||||
|     BYTE shi = Hex >> 8; |  | ||||||
|     Hex = Hex - shi * pow(16, 2); |  | ||||||
|     BYTE ge = Hex >> 4; |  | ||||||
|     Hex = Hex - ge * pow(16, 1); |  | ||||||
|     BYTE xiao = Hex; |  | ||||||
|  |  | ||||||
|     return bai * pow(10, 2) + shi * pow(10, 1) + ge * pow(10, 0) + xiao * pow(10, -1); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| WORD DEC2HEX(float Dec) |  | ||||||
| { |  | ||||||
|     BYTE bai = Dec / pow(10, 2); |  | ||||||
|     Dec = Dec - bai * pow(10, 2); |  | ||||||
|     BYTE shi = Dec / pow(10, 1); |  | ||||||
|     Dec = Dec - shi * pow(10, 1); |  | ||||||
|     BYTE ge = Dec / pow(10, 0); |  | ||||||
|     Dec = Dec - ge * pow(10, 0); |  | ||||||
|     BYTE xiao = Dec / pow(10, -1); |  | ||||||
|  |  | ||||||
|     return bai * pow(16, 3) + shi * pow(16, 2) + ge * pow(16, 1) + xiao * pow(16, 0); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /*********************************** |  | ||||||
| function: IsHexChar |  | ||||||
| desc:   判断字符是否在0-9,a-f之间 |  | ||||||
| input: char-字符 |  | ||||||
| Output: |  | ||||||
| return:  字符索引,如8-8,a-10,如果 |  | ||||||
|          不是,返回-1 |  | ||||||
| ***********************************/ |  | ||||||
| int IsHexChar(char hc) |  | ||||||
| { |  | ||||||
|     if('0'<=hc && hc<='9') |  | ||||||
|         return (int(hc)-int('0')); |  | ||||||
|     else if('a'<=hc && hc<='f') |  | ||||||
|         return (int(hc)-int('a')+10); |  | ||||||
|     else if('A'<=hc && hc<='F') |  | ||||||
|         return (int(hc)-int('A')+10); |  | ||||||
|     return -1; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /************************************** |  | ||||||
| function: Hex2Char |  | ||||||
| desc:     16进制数转化为字符 |  | ||||||
| Input:    hex-16进制,字符串形式,2字符 |  | ||||||
| Output: |  | ||||||
| return:    ascii字符 |  | ||||||
| **************************************/ |  | ||||||
| unsigned char Hex2Char(const std::string &hex) |  | ||||||
| { |  | ||||||
|     assert(hex.length() == 2); |  | ||||||
|     int high = IsHexChar(hex[0]); |  | ||||||
|     int low = IsHexChar(hex[1]); |  | ||||||
|     if(high == -1 || low == -1) |  | ||||||
|         return '\0'; |  | ||||||
|     int asc = high*16+low; |  | ||||||
|     //	char b = toascii(asc); |  | ||||||
|     return asc; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /**************************** |  | ||||||
| function: Hex2String |  | ||||||
| desc:     16进制字符串转化为ascii字符串 |  | ||||||
| Input:    hex-16进制字符串 |  | ||||||
| Output: |  | ||||||
| return:  ascii字符串 |  | ||||||
| *****************************/ |  | ||||||
| std::string Hex2String(const std::string &hex) |  | ||||||
| { |  | ||||||
|     assert(hex.length()%2 == 0); |  | ||||||
|     std::string hstr; |  | ||||||
|     for(int i=0; i<hex.length(); i+=2) |  | ||||||
|     { |  | ||||||
|         std::string tmp = hex.substr(i,2); |  | ||||||
|         hstr.append(1,Hex2Char(tmp)); |  | ||||||
|     } |  | ||||||
|     return hstr; |  | ||||||
| } |  | ||||||
| /**************************************** |  | ||||||
| function:PrepareHexString |  | ||||||
| desc:  去掉字符串里的空格,0x |  | ||||||
| Input:    str普通字符串 |  | ||||||
| Output: |  | ||||||
| return:  去掉空格和0x的字符串 |  | ||||||
| ****************************************/ |  | ||||||
| std::string PrepareHexString(std::string str) |  | ||||||
| { |  | ||||||
|     //先删除空格 |  | ||||||
|     int i=0; |  | ||||||
|     while(i != str.length()) |  | ||||||
|     { |  | ||||||
|         i = str.find(' ',i); |  | ||||||
|         if(i == -1) |  | ||||||
|             break; |  | ||||||
|         str = str.erase(i,1); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     //删除0x |  | ||||||
|     i = 0; |  | ||||||
|     std::string tmp("0x"); |  | ||||||
|     while(i != str.length()) |  | ||||||
|     { |  | ||||||
|         i = str.find(tmp,i); |  | ||||||
|         if(i == -1) |  | ||||||
|             break; |  | ||||||
|         str = str.erase(i,2); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     //删除0X |  | ||||||
|     i = 0; |  | ||||||
|     tmp = "0X"; |  | ||||||
|     while(i != str.length()) |  | ||||||
|     { |  | ||||||
|         i = str.find(tmp,i); |  | ||||||
|         if(i == -1) |  | ||||||
|             break; |  | ||||||
|         str = str.erase(i,2); |  | ||||||
|     } |  | ||||||
|     if(str.length()%2 != 0) |  | ||||||
|         str.append(1,'0'); |  | ||||||
|  |  | ||||||
|     str = Hex2String(str); |  | ||||||
|     return str; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // 十进制转十六进制 |  | ||||||
| std::string decimalToHexadecimal(int decimal) { |  | ||||||
|     std::stringstream ss; |  | ||||||
|     ss << std::hex << decimal; |  | ||||||
|     return ss.str(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // 十六进制转十进制 |  | ||||||
| int hexadecimalToDecimal(const std::string& hexadecimal) { |  | ||||||
|     return std::stoi(hexadecimal, nullptr, 16); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| std::string charToHex(char value) { |  | ||||||
|     int intValue = static_cast<int>(value); |  | ||||||
|     if (intValue < 0) { |  | ||||||
|         intValue = 256 + intValue; |  | ||||||
|     } |  | ||||||
|     std::stringstream ss; |  | ||||||
|     ss << std::setw(2) << std::setfill('0') << std::hex << std::uppercase << intValue; |  | ||||||
|     return ss.str(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| std::string verify(const std::string& hexStr){ |  | ||||||
|     // 准备字符串,去掉空格和0x |  | ||||||
|     std::string preparedStr = PrepareHexString(hexStr); |  | ||||||
|  |  | ||||||
|     // 计算校验码 |  | ||||||
|     int sum = 0; |  | ||||||
|     for (size_t i = 1; i < 6; i += 1) { |  | ||||||
|         int temp = int(static_cast<unsigned char>(preparedStr[i])); |  | ||||||
|         sum += temp; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     // 取模并转换为16进制 |  | ||||||
|     int checksum = sum % 0x100; |  | ||||||
|     std::string hex = decimalToHexadecimal(checksum); |  | ||||||
|     if (hex.length() == 1){ |  | ||||||
|         hex = "0" + hex; |  | ||||||
|     } |  | ||||||
|     return hex; |  | ||||||
| } |  | ||||||
| @@ -1,26 +0,0 @@ | |||||||
| // 用于为海康球机PTZ值转换的函数 |  | ||||||
| #pragma once |  | ||||||
| #include "DecisionPlatform.h" |  | ||||||
| #include <cmath> |  | ||||||
| #include <string> |  | ||||||
|  |  | ||||||
| typedef unsigned char BYTE; |  | ||||||
| typedef unsigned short WORD; |  | ||||||
|  |  | ||||||
| float HEX2DEC(WORD Hex); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| WORD DEC2HEX(float Dec); |  | ||||||
|  |  | ||||||
| std::string Hex2String(const std::string &hex); |  | ||||||
|  |  | ||||||
| std::string PrepareHexString(std::string str); |  | ||||||
|  |  | ||||||
| // 十进制转十六进制 |  | ||||||
| std::string decimalToHexadecimal(int decimal); |  | ||||||
| // 十六进制转十进制 |  | ||||||
| int hexadecimalToDecimal(const std::string& hexadecimal); |  | ||||||
|  |  | ||||||
| std::string charToHex(char value); |  | ||||||
|  |  | ||||||
| std::string verify(const std::string& hexStr); |  | ||||||
| @@ -1,378 +0,0 @@ | |||||||
| #include "HIKBallCamera.h" |  | ||||||
| #include "FormatTrans.h" |  | ||||||
| #include <vector> |  | ||||||
| #include <sstream> |  | ||||||
|  |  | ||||||
| HIKBallCamera::HIKBallCamera(){ |  | ||||||
|  |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| struct PTZ{ |  | ||||||
|     float P; |  | ||||||
|     float T; |  | ||||||
|     float Z; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| PTZ PTZDATA; |  | ||||||
|  |  | ||||||
| std::vector<std::string> velocity = {"0a","14","1e","28","32","3c","ff"}; |  | ||||||
|  |  | ||||||
| bool HIKBallCamera::InitBallCamera(std::string ip, std::string port, std::string username, std::string password, std::string BallMachineType) |  | ||||||
| { |  | ||||||
|     int res = Login(ip, port, username, password); |  | ||||||
|     if (res != 0){ |  | ||||||
|         std::cout << "Incorrect Login error code:" << res << std::endl; |  | ||||||
|         return false; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     m_Channel = DeviceInfo.byStartChan; |  | ||||||
|     this->BallMachineType = BallMachineType; |  | ||||||
|  |  | ||||||
|     if (BallMachineType == "BuKongQiu"){ |  | ||||||
|         NET_DVR_SERIALSTART_V40 struSerialParam = { 0 }; |  | ||||||
|         struSerialParam.dwSize = sizeof(struSerialParam); |  | ||||||
|         struSerialParam.dwSerialType = 2;//1:232串口;2:485串口 |  | ||||||
|         struSerialParam.bySerialNum = 1;//串口编号(设备支持多个RS232串口时有效) |  | ||||||
|         lTranHandle = NET_DVR_SerialStart_V40(LoginID, &struSerialParam, sizeof(struSerialParam), g_fSerialDataCallBack, NULL);//设置回调函数获取透传数据 |  | ||||||
|         if (lTranHandle < 0) |  | ||||||
|         { |  | ||||||
|             printf("NET_DVR_SerialStart error, %d\n", NET_DVR_GetLastError()); |  | ||||||
|             NET_DVR_Logout(LoginID); |  | ||||||
|             NET_DVR_Cleanup(); |  | ||||||
|             return false; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     return true; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| //回调透传数据函数的外部实现 |  | ||||||
| void CALLBACK HIKBallCamera::g_fSerialDataCallBack(LONG lSerialHandle,	LONG lChannel, char *pRecvDataBuffer, DWORD dwBufSize, void *pUser) |  | ||||||
| { |  | ||||||
|     std::string type = charToHex(pRecvDataBuffer[3]); |  | ||||||
|     if (type=="59"){ |  | ||||||
|         PTZDATA.P = float(hexadecimalToDecimal(charToHex(pRecvDataBuffer[4])+charToHex(pRecvDataBuffer[5])))/100.0; |  | ||||||
|     }else if (type == "5B"){ |  | ||||||
|         PTZDATA.T = float(hexadecimalToDecimal(charToHex(pRecvDataBuffer[4])+charToHex(pRecvDataBuffer[5])))/100.0; |  | ||||||
|     }else if (type == "5D"){ |  | ||||||
|         PTZDATA.Z = float(hexadecimalToDecimal(charToHex(pRecvDataBuffer[4])+charToHex(pRecvDataBuffer[5])))/100.0; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool HIKBallCamera::PtzControl(int command, int stop, int speed) |  | ||||||
| { |  | ||||||
|     bool Ret = false; |  | ||||||
|     //use HIK SDK to control the ball camera |  | ||||||
|     Ret = NET_DVR_PTZControlWithSpeed_Other(LoginID,m_Channel, command, stop, speed); |  | ||||||
|  |  | ||||||
|     //get the error code |  | ||||||
|     if(!Ret) |  | ||||||
|     { |  | ||||||
|         std::cout << "PTZ control failed! Error code: " << NET_DVR_GetLastError() << std::endl; |  | ||||||
|         return false; |  | ||||||
|     } |  | ||||||
|     return true; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool HIKBallCamera::PtzControlLeft(int speed,int state) |  | ||||||
| { |  | ||||||
|     if (BallMachineType=="BuKongQiu") { |  | ||||||
|         std::string buf = "ff 01 00 04 "+velocity[speed - 1]+" 00"; |  | ||||||
|         buf = buf +" "+ verify(buf); |  | ||||||
|         SerialSend(PrepareHexString(buf)); |  | ||||||
|         return true; |  | ||||||
|     }else{ |  | ||||||
|         return PtzControl(PAN_LEFT, state, speed); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool HIKBallCamera::PtzControlRight(int speed,int state) |  | ||||||
| { |  | ||||||
|     if (BallMachineType=="BuKongQiu") { |  | ||||||
|         std::string buf = "ff 01 00 02 "+velocity[speed - 1]+" 00"; |  | ||||||
|         buf = buf +" "+ verify(buf); |  | ||||||
|         SerialSend(PrepareHexString(buf)); |  | ||||||
|         return true; |  | ||||||
|     }else{ |  | ||||||
|         return PtzControl(PAN_RIGHT, state, speed); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool HIKBallCamera::PtzControlUp(int speed,int state) |  | ||||||
| { |  | ||||||
|     if (BallMachineType=="BuKongQiu") { |  | ||||||
|         std::string buf = "ff 01 00 08 00 "+velocity[speed - 1]; |  | ||||||
|         buf = buf +" "+ verify(buf); |  | ||||||
|         SerialSend(PrepareHexString(buf)); |  | ||||||
|         return true; |  | ||||||
|     }else{ |  | ||||||
|         return PtzControl(TILT_UP, state, speed); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool HIKBallCamera::PtzControlDown(int speed,int state) |  | ||||||
| { |  | ||||||
|     if (BallMachineType=="BuKongQiu") { |  | ||||||
|         std::string buf = "ff 01 00 10 00 "+velocity[speed - 1]; |  | ||||||
|         buf = buf +" "+ verify(buf); |  | ||||||
|         SerialSend(PrepareHexString(buf)); |  | ||||||
|         return true; |  | ||||||
|     }else{ |  | ||||||
|         return PtzControl(TILT_DOWN, state, speed); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool HIKBallCamera::PtzControlZoomIn(int speed,int state) |  | ||||||
| { |  | ||||||
|     if (BallMachineType=="BuKongQiu") { |  | ||||||
|         SerialSend(PrepareHexString("ff 01 00 20 00 00 21")); |  | ||||||
|         return true; |  | ||||||
|     }else{ |  | ||||||
|         return PtzControl(ZOOM_IN, state, speed); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool HIKBallCamera::PtzControlZoomOut(int speed,int state) |  | ||||||
| { |  | ||||||
|     if (BallMachineType=="BuKongQiu") { |  | ||||||
|         SerialSend(PrepareHexString("ff 01 00 40 00 00 41")); |  | ||||||
|         return true; |  | ||||||
|     }else{ |  | ||||||
|         return PtzControl(ZOOM_OUT, state, speed); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| bool HIKBallCamera::PtzControlFocusAdd(int speed,int state){ |  | ||||||
|     if (BallMachineType=="BuKongQiu") { |  | ||||||
|         std::cout << "ff 01 01 00 00 00 02" << std::endl; |  | ||||||
|         SerialSend(PrepareHexString("ff 01 01 00 00 00 02")); |  | ||||||
|         return true; |  | ||||||
|     }else{ |  | ||||||
|         return PtzControl(FOCUS_FAR, state, speed); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool HIKBallCamera::PtzControlFocusSub(int speed,int state){ |  | ||||||
|     if (BallMachineType=="BuKongQiu") { |  | ||||||
|         std::cout << "ff 01 00 80 00 00 81" << std::endl; |  | ||||||
|         SerialSend(PrepareHexString("ff 01 00 80 00 00 81")); |  | ||||||
|         return true; |  | ||||||
|     }else{ |  | ||||||
|         return PtzControl(FOCUS_NEAR, state, speed); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool HIKBallCamera::PtzControlStop(){ |  | ||||||
|     SerialSend(PrepareHexString("ff 01 00 00 00 00 01")); |  | ||||||
|     return true; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| bool HIKBallCamera::PtzControlUpLeft(int speed,int state) |  | ||||||
| { |  | ||||||
|     if (BallMachineType=="BuKongQiu") { |  | ||||||
|         std::string buf = "ff 01 00 0c "+velocity[speed - 1]+" " + velocity[speed - 1]; |  | ||||||
|         buf = buf +" "+ verify(buf); |  | ||||||
|         SerialSend(PrepareHexString(buf)); |  | ||||||
|         return true; |  | ||||||
|     }else{ |  | ||||||
|         return PtzControl(UP_LEFT, state, speed); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool HIKBallCamera::PtzControlUpRight(int speed,int state) |  | ||||||
| { |  | ||||||
|     if (BallMachineType=="BuKongQiu") { |  | ||||||
|         std::string buf = "ff 01 00 0a "+velocity[speed - 1]+" " + velocity[speed - 1]; |  | ||||||
|         buf = buf +" "+ verify(buf); |  | ||||||
|         SerialSend(PrepareHexString(buf)); |  | ||||||
|         return true; |  | ||||||
|     }else{ |  | ||||||
|         return PtzControl(UP_RIGHT, state, speed); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool HIKBallCamera::PtzControlDownLeft(int speed,int state) |  | ||||||
| { |  | ||||||
|     if (BallMachineType=="BuKongQiu") { |  | ||||||
|         std::string buf = "ff 01 00 14 "+velocity[speed - 1]+" " + velocity[speed - 1]; |  | ||||||
|         buf = buf +" "+ verify(buf); |  | ||||||
|         SerialSend(PrepareHexString(buf)); |  | ||||||
|         return true; |  | ||||||
|     }else{ |  | ||||||
|         return PtzControl(DOWN_LEFT, state, speed); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool HIKBallCamera::PtzControlDownRight(int speed,int state) |  | ||||||
| { |  | ||||||
|     if (BallMachineType=="BuKongQiu") { |  | ||||||
|         std::string buf = "ff 01 00 12 "+velocity[speed - 1]+" " + velocity[speed - 1]; |  | ||||||
|         buf = buf +" "+ verify(buf); |  | ||||||
|         SerialSend(PrepareHexString(buf)); |  | ||||||
|         return true; |  | ||||||
|     }else{ |  | ||||||
|         return PtzControl(DOWN_RIGHT, state, speed); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| std::string addSpacesEveryTwoWords(const std::string& hex) { |  | ||||||
|     std::ostringstream result; |  | ||||||
|  |  | ||||||
|     int len = hex.length(); |  | ||||||
|     // 如果十六进制字符串的长度是奇数,则在前面添加一个 0 |  | ||||||
|     std::string paddedHex = (len % 2 == 1) ? "0" + hex : hex; |  | ||||||
|     // 遍历字符串,每两个字符分割一次 |  | ||||||
|     for (size_t i = 0; i < paddedHex.length(); i += 2) { |  | ||||||
|         if (i != 0) { |  | ||||||
|             result << " "; |  | ||||||
|         } |  | ||||||
|         result << paddedHex.substr(i, 2); |  | ||||||
|     } |  | ||||||
|     return result.str(); |  | ||||||
| } |  | ||||||
| std::string padding(const std::string& hex){ |  | ||||||
|     if (hex.length()==2){ |  | ||||||
|         return "00 "+hex; |  | ||||||
|     } else{ |  | ||||||
|         return hex; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| // PTZ 跳转到指定位置 |  | ||||||
| bool HIKBallCamera::PtzGotoPut(int Action, float P, float T, float Z) |  | ||||||
| { |  | ||||||
|     if (BallMachineType=="BuKongQiu"){ |  | ||||||
|         std::string pHex = decimalToHexadecimal(P * 100); |  | ||||||
|         pHex = padding(addSpacesEveryTwoWords(pHex)); |  | ||||||
|         std::string tHex = decimalToHexadecimal(T * 100); |  | ||||||
|         tHex = padding(addSpacesEveryTwoWords(tHex)); |  | ||||||
|         std::string zHex = decimalToHexadecimal(Z * 100); |  | ||||||
|         zHex = padding(addSpacesEveryTwoWords(zHex)); |  | ||||||
|         std::string pBuf = "ff 01 00 4b "+ pHex; |  | ||||||
|         std::string tBuf = "ff 01 00 4d "+ tHex; |  | ||||||
|         std::string zBuf = "ff 01 00 4f "+ zHex; |  | ||||||
|         pBuf = pBuf+" "+verify(pBuf); |  | ||||||
|         tBuf = tBuf+" "+verify(tBuf); |  | ||||||
|         zBuf = zBuf+" "+verify(zBuf); |  | ||||||
|         switch (Action) { |  | ||||||
|             case 1: |  | ||||||
|                 SerialSend(PrepareHexString(pBuf)); // 设置 P |  | ||||||
|                 SerialSend(PrepareHexString(tBuf)); // 设置 T |  | ||||||
|                 SerialSend(PrepareHexString(zBuf)); // 设置 Z |  | ||||||
|                 break; |  | ||||||
|             case 2: |  | ||||||
|                 SerialSend(PrepareHexString(pBuf)); // 设置 P |  | ||||||
|                 break; |  | ||||||
|             case 3: |  | ||||||
|                 SerialSend(PrepareHexString(tBuf)); // 设置 T |  | ||||||
|                 break; |  | ||||||
|             case 4: |  | ||||||
|                 SerialSend(PrepareHexString(zBuf)); // 设置 Z |  | ||||||
|                 break; |  | ||||||
|             case 5: |  | ||||||
|                 SerialSend(PrepareHexString(pBuf)); // 设置 P |  | ||||||
|                 SerialSend(PrepareHexString(tBuf)); // 设置 T |  | ||||||
|                 break; |  | ||||||
|             default: |  | ||||||
|                 break; |  | ||||||
|         } |  | ||||||
|         return true; |  | ||||||
|     }else{ |  | ||||||
|         NET_DVR_PTZPOS ptzPosCurrent; |  | ||||||
|         ptzPosCurrent.wPanPos = DEC2HEX(P); |  | ||||||
|         ptzPosCurrent.wTiltPos = DEC2HEX(T); |  | ||||||
|         ptzPosCurrent.wZoomPos = DEC2HEX(Z); |  | ||||||
|         ptzPosCurrent.wAction = Action; |  | ||||||
|  |  | ||||||
|         bool b = NET_DVR_SetDVRConfig(LoginID, NET_DVR_SET_PTZPOS, m_Channel, &ptzPosCurrent, sizeof(NET_DVR_PTZPOS)); |  | ||||||
|         return b; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| bool HIKBallCamera::SerialSend(const std::string& hex){ |  | ||||||
|     char m_DataBuf[50]; |  | ||||||
|     int m_DataLen; |  | ||||||
|     int len = hex.length(); |  | ||||||
|     m_DataLen = len<1024 ? len : 1024; |  | ||||||
|     memcpy(m_DataBuf,hex.c_str(),m_DataLen); |  | ||||||
|     return NET_DVR_SerialSend(lTranHandle,1, m_DataBuf, m_DataLen); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool HIKBallCamera::PtzGet(float* posP, float* posT, float* posZ) { |  | ||||||
|     if (BallMachineType=="BuKongQiu"){ |  | ||||||
|         SerialSend(PrepareHexString("ff 01 00 51 00 00 52")); |  | ||||||
|         SerialSend(PrepareHexString("ff 01 00 53 00 00 54")); |  | ||||||
|         SerialSend(PrepareHexString("ff 01 00 55 00 00 56")); |  | ||||||
|         SLEEP(1); |  | ||||||
|         *posP = PTZDATA.P; |  | ||||||
|         *posT = PTZDATA.T; |  | ||||||
|         *posZ = PTZDATA.Z; |  | ||||||
|         return true; |  | ||||||
|     }else{ |  | ||||||
|         NET_DVR_PTZPOS ptzPosCurrent; |  | ||||||
|         DWORD dwtmp; |  | ||||||
|         bool b = NET_DVR_GetDVRConfig(LoginID, NET_DVR_GET_PTZPOS, m_Channel, &ptzPosCurrent, sizeof(NET_DVR_PTZPOS),&dwtmp); |  | ||||||
|         float P = HEX2DEC(ptzPosCurrent.wPanPos); |  | ||||||
|         float T = HEX2DEC(ptzPosCurrent.wTiltPos); |  | ||||||
|         float Z = HEX2DEC(ptzPosCurrent.wZoomPos); |  | ||||||
|         *posP = P; |  | ||||||
|         *posT = T; |  | ||||||
|         *posZ = Z; |  | ||||||
|         return b; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool HIKBallCamera::CmdSwitch(int direction,int speed,int state){ |  | ||||||
|     bool Res = false; |  | ||||||
|     switch (direction) { |  | ||||||
|         case PTZ_LEFT: |  | ||||||
|             Res = PtzControlLeft(speed,state); |  | ||||||
|             break; |  | ||||||
|         case PTZ_RIGHT: |  | ||||||
|             Res = PtzControlRight(speed,state); |  | ||||||
|             break; |  | ||||||
|         case PTZ_UP: |  | ||||||
|             Res = PtzControlUp(speed,state); |  | ||||||
|             break; |  | ||||||
|         case PTZ_DOWN: |  | ||||||
|             Res = PtzControlDown(speed,state); |  | ||||||
|             break; |  | ||||||
|         case PTZ_UP_LEFT: |  | ||||||
|             Res = PtzControlUpLeft(speed,state); |  | ||||||
|             break; |  | ||||||
|         case PTZ_UP_RIGHT: |  | ||||||
|             Res = PtzControlUpRight(speed,state); |  | ||||||
|             break; |  | ||||||
|         case PTZ_DOWN_LEFT: |  | ||||||
|             Res = PtzControlDownLeft(speed,state); |  | ||||||
|             break; |  | ||||||
|         case PTZ_DOWN_RIGHT: |  | ||||||
|             Res = PtzControlDownRight(speed,state); |  | ||||||
|             break; |  | ||||||
|         case PTZ_ZOOM_IN: |  | ||||||
|             Res = PtzControlZoomIn(speed,state); |  | ||||||
|             break; |  | ||||||
|         case PTZ_ZOOM_OUT: |  | ||||||
|             Res = PtzControlZoomOut(speed,state); |  | ||||||
|             break; |  | ||||||
|         case PTZ_Focus_Far: |  | ||||||
|             Res = PtzControlFocusSub(speed,state); |  | ||||||
|             break; |  | ||||||
|         case PTZ_Focus_Near: |  | ||||||
|             Res = PtzControlFocusAdd(speed,state); |  | ||||||
|             break; |  | ||||||
|     } |  | ||||||
|     return Res; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool HIKBallCamera::StopBus(int direction) { |  | ||||||
|     if (BallMachineType=="BuKongQiu"){ |  | ||||||
|         return PtzControlStop(); |  | ||||||
|     } |  | ||||||
|     return CmdSwitch(direction,0,1); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool HIKBallCamera::StartBus(int direction, int speed) { |  | ||||||
|     return CmdSwitch(direction,speed,0); |  | ||||||
| } |  | ||||||
| @@ -1,65 +0,0 @@ | |||||||
| #pragma once |  | ||||||
| #include "HIKBase.h" |  | ||||||
|  |  | ||||||
| #define PTZ_LEFT 1 // 云台向左 |  | ||||||
| #define PTZ_RIGHT 2 // 云台向右 |  | ||||||
| #define PTZ_UP 3 // 云台向上 |  | ||||||
| #define PTZ_DOWN 4 // 云台向下 |  | ||||||
| #define PTZ_UP_LEFT 5 // 云台左上 |  | ||||||
| #define PTZ_UP_RIGHT 6 // 云台右上 |  | ||||||
| #define PTZ_DOWN_LEFT 7 // 云台左下 |  | ||||||
| #define PTZ_DOWN_RIGHT 8 // 云台右下 |  | ||||||
| #define PTZ_ZOOM_IN 9 // 云台放大 |  | ||||||
| #define PTZ_ZOOM_OUT 10 // 云台缩小 |  | ||||||
| #define PTZ_Focus_Far 11 // 云台聚焦+ |  | ||||||
| #define PTZ_Focus_Near 12 // 云台聚焦- |  | ||||||
|  |  | ||||||
| class HIKBallCamera : public HIKBase |  | ||||||
| { |  | ||||||
| public: |  | ||||||
|     HIKBallCamera(); |  | ||||||
|     bool InitBallCamera(std::string ip, std::string port, std::string username, std::string password, std::string BallMachineType); |  | ||||||
|     bool PtzGotoPut(int Action, float P, float T, float Z = 0); |  | ||||||
|     bool PtzGet(float *posP, float *posT, float *posZ); |  | ||||||
|     bool StopBus(int direction); |  | ||||||
|     bool StartBus(int direction,int speed); |  | ||||||
|  |  | ||||||
| private: |  | ||||||
|     LONG lTranHandle; |  | ||||||
|     std::string BallMachineType; |  | ||||||
|     int m_Channel; |  | ||||||
|  |  | ||||||
| private: |  | ||||||
|     bool PtzControlUp(int speed,int state); |  | ||||||
|     bool PtzControlDown(int speed,int state); |  | ||||||
|     bool PtzControlLeft(int speed,int state); |  | ||||||
|     bool PtzControlRight(int speed,int state); |  | ||||||
|     bool PtzControlUpLeft(int speed,int state); |  | ||||||
|     bool PtzControlUpRight(int speed,int state); |  | ||||||
|     bool PtzControlDownLeft(int speed,int state); |  | ||||||
|     bool PtzControlDownRight(int speed,int state); |  | ||||||
|     bool PtzControlZoomIn(int speed,int state); |  | ||||||
|     bool PtzControlZoomOut(int speed,int state); |  | ||||||
|     bool PtzControlFocusAdd(int speed,int state); |  | ||||||
|     bool PtzControlFocusSub(int speed,int state); |  | ||||||
| private: |  | ||||||
|     /** |  | ||||||
|      * @brief 使用海康485透传接口发送透传数据 |  | ||||||
|      * |  | ||||||
|      * @param hex 十六进制透传数据字符串 |  | ||||||
|     **/ |  | ||||||
|     bool SerialSend(const std::string& hex); |  | ||||||
| private: |  | ||||||
|     /** |  | ||||||
|      * @brief PTZ 控制相关的 Switch 集合 |  | ||||||
|      * |  | ||||||
|      * @param direction PTZ 方向 |  | ||||||
|      * @param speed PTZ 速度 |  | ||||||
|      * @param state PTZ 启停状态 |  | ||||||
|     **/ |  | ||||||
|     bool CmdSwitch(int direction,int speed,int state); |  | ||||||
|     bool PtzControl(int command, int stop, int speed); |  | ||||||
|     bool PtzControlStop(); |  | ||||||
|     void static CALLBACK g_fSerialDataCallBack(LONG lSerialHandle,	LONG lChannel, char *pRecvDataBuffer, DWORD dwBufSize, void *pUser); |  | ||||||
|  |  | ||||||
| }; |  | ||||||
| @@ -1,36 +0,0 @@ | |||||||
| #include "HIKBase.h" |  | ||||||
| #include <memory> |  | ||||||
| #include <cstring> |  | ||||||
| #include <chrono> |  | ||||||
|  |  | ||||||
| HIKBase::HIKBase() |  | ||||||
| { |  | ||||||
|     memset(&DeviceInfo, 0, sizeof(DeviceInfo)); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| HIKBase::~HIKBase() = default; |  | ||||||
|  |  | ||||||
| int HIKBase::Login(std::string ip, std::string port, std::string username, std::string password) |  | ||||||
| { |  | ||||||
|     Ip = ip; |  | ||||||
|     Port = port; |  | ||||||
|     Username = username; |  | ||||||
|     Password = password; |  | ||||||
|  |  | ||||||
|     LoginID = NET_DVR_Login_V30((char *)Ip.c_str(), atoi(Port.c_str()), (char *)Username.c_str(), (char *)Password.c_str(), &DeviceInfo); |  | ||||||
|     return NET_DVR_GetLastError(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void HIKBase::Logout() |  | ||||||
| { |  | ||||||
|     if (LoginID >= 0) |  | ||||||
|     { |  | ||||||
|         NET_DVR_Logout(LoginID); |  | ||||||
|         LoginID = -1; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool HK_DVR_Init(){ |  | ||||||
|     return NET_DVR_Init(); |  | ||||||
| } |  | ||||||
| @@ -1,33 +0,0 @@ | |||||||
| #pragma once |  | ||||||
| #include <iostream> |  | ||||||
| #include <HCNetSDK.h> |  | ||||||
| #include <iostream> |  | ||||||
| #include <string> |  | ||||||
|  |  | ||||||
| class HIKBase |  | ||||||
| { |  | ||||||
| public: |  | ||||||
|     HIKBase(); |  | ||||||
|     ~HIKBase(); |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     int Login(std::string ip, std::string port, std::string username, std::string password); |  | ||||||
|     void Logout(); |  | ||||||
|  |  | ||||||
| protected: |  | ||||||
|     LONG LoginID; |  | ||||||
|     NET_DVR_DEVICEINFO_V30 DeviceInfo; |  | ||||||
|  |  | ||||||
| private: |  | ||||||
|     //Hik login info |  | ||||||
|     std::string Ip;//Hik Device IP |  | ||||||
|     std::string Port;//Hik Device Port |  | ||||||
|     std::string Username;//Hik Device Username |  | ||||||
|     std::string Password;//Hik Device Password |  | ||||||
|  |  | ||||||
|     //after login, Hik Device ID |  | ||||||
|     int DeviceID; |  | ||||||
|  |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| bool HK_DVR_Init(); |  | ||||||
							
								
								
									
										293
									
								
								src/HIKNvr.cpp
									
									
									
									
									
								
							
							
						
						
									
										293
									
								
								src/HIKNvr.cpp
									
									
									
									
									
								
							| @@ -1,293 +0,0 @@ | |||||||
| #define NOMINMAX |  | ||||||
| #include "./date/date.h" |  | ||||||
| #include "HIKNvr.h" |  | ||||||
| #include <ctime> |  | ||||||
| #include <iostream> |  | ||||||
| #include <chrono> |  | ||||||
|  |  | ||||||
| HIKNvr::HIKNvr(){ |  | ||||||
|  |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief Initializes the NVR with the given login information and channel. |  | ||||||
|  *  |  | ||||||
|  * @param ip The IP address of the NVR. |  | ||||||
|  * @param port The port number of the NVR. |  | ||||||
|  * @param username The username for logging into the NVR. |  | ||||||
|  * @param password The password for logging into the NVR. |  | ||||||
|  * @param channel The channel number to set for the NVR. |  | ||||||
|  */ |  | ||||||
| bool HIKNvr::InitNvr(std::string ip, std::string port, std::string username, std::string password, int channel) |  | ||||||
| { |  | ||||||
|     if (Login(ip, port, username, password) == 0){ |  | ||||||
|         m_Channel = channel + 32; |  | ||||||
|         return true; |  | ||||||
|     } |  | ||||||
|     return false; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| int HIKNvr::GetNvrUTCDiff(){ |  | ||||||
|     NET_DVR_NETAPPCFG struNAC = {0}; |  | ||||||
|     DWORD ZoneSize = 0; |  | ||||||
|     if (NET_DVR_GetDVRConfig(LoginID, NET_DVR_GET_NETAPPCFG, 0, &struNAC, sizeof(NET_DVR_NETAPPCFG), &ZoneSize)){ |  | ||||||
|         return 5000; |  | ||||||
|     }; |  | ||||||
|     int nDiffHour = struNAC.struNtpClientParam.cTimeDifferenceH; |  | ||||||
|     int nDiffMin = struNAC.struNtpClientParam.cTimeDifferenceM; |  | ||||||
|     nDiffTotalMin = (nDiffHour < 0 ? -1 : 1) * (abs(nDiffHour) * 60 + nDiffMin); |  | ||||||
|     return (nDiffHour < 0 ? -1 : 1) * (abs(nDiffHour) * 60 + nDiffMin); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief 用年和月查询日 |  | ||||||
|  *  |  | ||||||
|  * @param select_time The selected time. |  | ||||||
|  * @param available_date_vec The available date vector. |  | ||||||
|  * @return true if the time region is found, false otherwise. |  | ||||||
|  */ |  | ||||||
| int HIKNvr::CheckTimeRegionWithMonth(DateTime select_time,std::vector<int>& available_date_vec) |  | ||||||
| { |  | ||||||
|     DateTime DateNow(select_time); |  | ||||||
|  |  | ||||||
|     // 查当月 |  | ||||||
|     NET_DVR_MRD_SEARCH_PARAM struSearchParam = {0}; |  | ||||||
|     NET_DVR_MRD_SEARCH_RESULT struSearchResult = {0}; |  | ||||||
|     struSearchParam.dwSize = sizeof(NET_DVR_MRD_SEARCH_PARAM); |  | ||||||
|     struSearchParam.wYear = DateNow.year(); |  | ||||||
|     struSearchParam.byMonth = DateNow.month(); |  | ||||||
|     struSearchParam.struStreamInfo.dwChannel = m_Channel; // channel |  | ||||||
|  |  | ||||||
|     struSearchParam.byLocalOrUTC = true; // 0:local time, 1:UTC time (时区) |  | ||||||
|     struSearchParam.byDrawFrame = 0; // 0:不抽帧,1:抽帧 |  | ||||||
|     struSearchParam.byStreamType = 0;// 0:主码流,1:子码流 |  | ||||||
|     // 查记录 |  | ||||||
|     if (!NET_DVR_GetDeviceConfig(this->LoginID, NET_DVR_GET_MONTHLY_RECORD_DISTRIBUTION, 0, &struSearchParam, sizeof(struSearchParam), NULL, &struSearchResult, sizeof(struSearchResult))) |  | ||||||
|     { |  | ||||||
|         int n = NET_DVR_GetLastError(); |  | ||||||
|         return n == NET_DVR_NETWORK_FAIL_CONNECT ? NVR_ERR_CONNECT_7 : NVR_ERR_HIK; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     for (int i = 0; i < 32; i++) |  | ||||||
|     { |  | ||||||
|         if (struSearchResult.byRecordDistribution[i]) |  | ||||||
|         { |  | ||||||
|             available_date_vec.push_back(i + 1); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     return NVR_SUC; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief Check if a given time falls within the available time range for the current day. |  | ||||||
|  *  |  | ||||||
|  * @param select_time The time to check. |  | ||||||
|  * @param available_time_vec A vector of available time ranges for the current day. |  | ||||||
|  * @return true if the given time falls within the available time range, false otherwise. |  | ||||||
|  */ |  | ||||||
| int HIKNvr::CheckTimeRegionWithDay(DateTime select_time, std::vector<TimeRecord> &available_time_vec) |  | ||||||
| { |  | ||||||
|     int nRet = NVR_SUC; |  | ||||||
|     GetNvrUTCDiff(); |  | ||||||
|  |  | ||||||
|     DateTime DateNow(select_time); |  | ||||||
|  |  | ||||||
|     int nYear = DateNow.year(); |  | ||||||
|     int nMonth = DateNow.month(); |  | ||||||
|     int nDay = DateNow.day(); |  | ||||||
|  |  | ||||||
|     NET_DVR_FILECOND FileCond; |  | ||||||
|  |  | ||||||
|     FileCond.dwFileType = 0xff;// 0xff:所有文件 |  | ||||||
|     FileCond.dwIsLocked = 0xff;// 0xff:所有文件 |  | ||||||
|     FileCond.dwUseCardNo = 0; //不使用卡号 |  | ||||||
|  |  | ||||||
|     FileCond.lChannel = m_Channel;//通道号 |  | ||||||
|  |  | ||||||
|     FileCond.struStartTime.dwYear = DateNow.year(); |  | ||||||
|     FileCond.struStartTime.dwMonth = DateNow.month(); |  | ||||||
|     FileCond.struStartTime.dwDay = DateNow.day();    |  | ||||||
|     FileCond.struStartTime.dwHour = 0; |  | ||||||
|     FileCond.struStartTime.dwMinute = 0; |  | ||||||
|     FileCond.struStartTime.dwSecond = 0; |  | ||||||
|  |  | ||||||
|     FileCond.struStopTime.dwYear = DateNow.year(); |  | ||||||
|     FileCond.struStopTime.dwMonth = DateNow.month(); |  | ||||||
|     FileCond.struStopTime.dwDay = DateNow.day(); |  | ||||||
|     FileCond.struStopTime.dwHour = 23; |  | ||||||
|     FileCond.struStopTime.dwMinute = 59; |  | ||||||
|     FileCond.struStopTime.dwSecond = 59; |  | ||||||
|  |  | ||||||
|     available_time_vec.clear(); |  | ||||||
|     LONG hFindHandle = NET_DVR_FindFile_V30(LoginID, &FileCond); |  | ||||||
|     if (-1 == hFindHandle) |  | ||||||
|     { |  | ||||||
|         nRet = NET_DVR_GetLastError(); |  | ||||||
|         return nRet == NET_DVR_NETWORK_FAIL_CONNECT?NVR_ERR_CONNECT_7:NVR_ERR_HIK; |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         NET_DVR_FINDDATA_V30 FindData; // 查找到的文件信息 |  | ||||||
|         nRet = NET_DVR_FindNextFile_V30(hFindHandle, &FindData); |  | ||||||
|         int ItemIndex = 0; |  | ||||||
|         while (nRet > 0) |  | ||||||
|         { |  | ||||||
|             if (NET_DVR_FILE_EXCEPTION == nRet)//查找文件时异常 |  | ||||||
|             { |  | ||||||
|                 break; |  | ||||||
|             } |  | ||||||
|             else if (NET_DVR_FILE_NOFIND == nRet)//没有文件 |  | ||||||
|             { |  | ||||||
|                 break; |  | ||||||
|             } |  | ||||||
|             else if (NET_DVR_NOMOREFILE == nRet) // 查找结束 |  | ||||||
|             { |  | ||||||
|                 break; |  | ||||||
|             } |  | ||||||
|             else if (NET_DVR_ISFINDING == nRet) // 正在查找 |  | ||||||
|             { |  | ||||||
|                 nRet = NET_DVR_FindNextFile_V30(hFindHandle, &FindData); |  | ||||||
|                 //请求过快,会出读错误。同时也是参考海康sdk写法。 |  | ||||||
|                 std::this_thread::sleep_for(std::chrono::milliseconds(5)); |  | ||||||
|             } |  | ||||||
|             else if (NET_DVR_FILE_SUCCESS == nRet) // 获取文件信息成功 |  | ||||||
|             { |  | ||||||
|                 // 保存文件信息 |  | ||||||
|                 TimeRecord tR; |  | ||||||
|  |  | ||||||
|                 if (nDay != FindData.struStartTime.dwDay)//起始不在今日 |  | ||||||
|                 { |  | ||||||
|                     tR.TimeStart.SetDateTime(FindData.struStartTime.dwYear, FindData.struStartTime.dwMonth, nDay, 0, 0, 0); |  | ||||||
|                 } |  | ||||||
|                 else//起始在今日 |  | ||||||
|                 { |  | ||||||
|                     tR.TimeStart.SetDateTime(FindData.struStartTime.dwYear, FindData.struStartTime.dwMonth, FindData.struStartTime.dwDay, FindData.struStartTime.dwHour, FindData.struStartTime.dwMinute, FindData.struStartTime.dwSecond); |  | ||||||
|                 } |  | ||||||
|                 if (nDay != FindData.struStopTime.dwDay)//结束不在今日 |  | ||||||
|                 { |  | ||||||
|                     tR.TimeEnd.SetDateTime(FindData.struStartTime.dwYear, FindData.struStartTime.dwMonth, FindData.struStartTime.dwDay, 23, 59, 59); |  | ||||||
|                 } |  | ||||||
|                 else//结束在今日 |  | ||||||
|                 { |  | ||||||
|                     tR.TimeEnd.SetDateTime(FindData.struStopTime.dwYear, FindData.struStopTime.dwMonth, FindData.struStopTime.dwDay, |  | ||||||
|                                            FindData.struStopTime.dwHour, FindData.struStopTime.dwMinute, FindData.struStopTime.dwSecond); |  | ||||||
|                 } |  | ||||||
|  |  | ||||||
|                 date::sys_days original_date_start{date::year{tR.TimeStart.year()} / date::month{static_cast<unsigned int>(tR.TimeStart.month())} / date::day{static_cast<unsigned int>(tR.TimeStart.day())}}; |  | ||||||
|                 date::sys_time<std::chrono::seconds> original_time_start{date::sys_days{original_date_start} + std::chrono::hours{tR.TimeStart.hour()} + std::chrono::minutes{tR.TimeStart.minute()} + std::chrono::seconds{tR.TimeStart.minute()}}; |  | ||||||
|                 date::sys_time<std::chrono::seconds> utc_plus_8_time_start = original_time_start - std::chrono::minutes{nDiffTotalMin}; |  | ||||||
|  |  | ||||||
|                 date::sys_days original_date_end{date::year{tR.TimeEnd.year()} / date::month{static_cast<unsigned int>(tR.TimeEnd.month())} / date::day{static_cast<unsigned int>(tR.TimeEnd.day())}}; |  | ||||||
|                 date::sys_time<std::chrono::seconds> original_time_end{date::sys_days{original_date_end} + std::chrono::hours{tR.TimeEnd.hour()} + std::chrono::minutes{tR.TimeEnd.minute()} + std::chrono::seconds{tR.TimeEnd.minute()}}; |  | ||||||
|                 date::sys_time<std::chrono::seconds> utc_plus_8_time_end = original_time_end - std::chrono::minutes{nDiffTotalMin}; |  | ||||||
|  |  | ||||||
|                 // 计算时间点到1970-01-01 00:00:00 UTC的时间间隔,即时间戳 |  | ||||||
|                 std::chrono::seconds timestamp = std::chrono::duration_cast<std::chrono::seconds>(utc_plus_8_time_start.time_since_epoch()); |  | ||||||
|                 tR.tmTimeStart = timestamp.count(); |  | ||||||
|                 timestamp = std::chrono::duration_cast<std::chrono::seconds>(utc_plus_8_time_end.time_since_epoch()); |  | ||||||
|                 tR.tmTimeEnd = timestamp.count(); |  | ||||||
|  |  | ||||||
|                 available_time_vec.emplace_back(tR); |  | ||||||
|                 nRet = NET_DVR_FindNextFile_V30(hFindHandle, &FindData); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         // 关闭查找,释放句柄 |  | ||||||
|         NET_DVR_FindClose_V30(hFindHandle); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     return NVR_SUC; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief Get the time region based on the selected time and value. |  | ||||||
|  *  |  | ||||||
|  * @param SelectTime The selected time. |  | ||||||
|  * @param Value The value used to calculate the time region. |  | ||||||
|  * @param TimeStart The start time of the time region. |  | ||||||
|  * @param TimeEnd The end time of the time region. |  | ||||||
|  * @return true if the time region is found, false otherwise. |  | ||||||
|  */ |  | ||||||
| bool HIKNvr::GetTimeRegion(DateTime SelectTime, int Value, DateTime &TimeStart, DateTime &TimeEnd) |  | ||||||
| { |  | ||||||
|     int nYear = SelectTime.year(); |  | ||||||
|     int nMonth = SelectTime.month(); |  | ||||||
|     int nDay = SelectTime.day(); |  | ||||||
|  |  | ||||||
|     // 时间格式 转换,找时间区间 |  | ||||||
|     int nHour = Value / 3600; |  | ||||||
|     int nMinute = Value / 60 - 60 * nHour; |  | ||||||
|     int nSecond = Value - (nMinute + 60 * nHour) * 60; |  | ||||||
|  |  | ||||||
|     TimeStart = SelectTime; |  | ||||||
|     TimeStart.hour() = nHour; |  | ||||||
|     TimeStart.minute() = nMinute; |  | ||||||
|     TimeStart.second() = nSecond;     |  | ||||||
|  |  | ||||||
|     bool bHave = false; |  | ||||||
|     for (auto it : m_TimeRecords) |  | ||||||
|     { |  | ||||||
|         if (it.IsInRecord(TimeStart)) |  | ||||||
|         { |  | ||||||
|             bHave = true; |  | ||||||
|             TimeEnd = it.TimeEnd; |  | ||||||
|             break; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     return bHave; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief Turn the time to json. |  | ||||||
|  *  |  | ||||||
|  * @param Time The time to be turned to json. |  | ||||||
|  * @param pAvailableDateVec The available date vector. |  | ||||||
|  * @return nlohmann::json& The json object. |  | ||||||
|  */ |  | ||||||
| nlohmann::json HIKNvr::TimeToJson(DateTime Time, std::vector<int> *pAvailableDateVec) |  | ||||||
| { |  | ||||||
|     nlohmann::json Message; |  | ||||||
|  |  | ||||||
|     //year and month |  | ||||||
|     Message["year"] = Time.year(); |  | ||||||
|     Message["month"] = Time.month(); |  | ||||||
|      |  | ||||||
|     //date |  | ||||||
|     if (pAvailableDateVec != nullptr) |  | ||||||
|     { |  | ||||||
|         nlohmann::json data; |  | ||||||
|         for (auto date : *pAvailableDateVec) |  | ||||||
|         { |  | ||||||
|             data.push_back(date); |  | ||||||
|         } |  | ||||||
|         Message["day"] = data; |  | ||||||
|     } |  | ||||||
|     return Message; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief Converts available time slots in a day to JSON format. |  | ||||||
|  *  |  | ||||||
|  * @param Time The date and time of the day. |  | ||||||
|  * @param pAvailableTimeVec A pointer to a vector of available time slots. |  | ||||||
|  * @return nlohmann::json& A reference to the JSON object containing the converted time slots. |  | ||||||
|  */ |  | ||||||
| nlohmann::json HIKNvr::TimeToJsonInDay(DateTime Time, std::vector<TimeRecord> *pAvailableTimeVec) |  | ||||||
| { |  | ||||||
|     nlohmann::json Message; |  | ||||||
|     if(pAvailableTimeVec != nullptr) |  | ||||||
|     { |  | ||||||
|         for(auto time : *pAvailableTimeVec) |  | ||||||
|         { |  | ||||||
|             nlohmann::json data; |  | ||||||
|             data["begin"] = time.tmTimeStart; |  | ||||||
|             data["end"] = time.tmTimeEnd; |  | ||||||
|             Message.push_back(data); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     return Message; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										59
									
								
								src/HIKNvr.h
									
									
									
									
									
								
							
							
						
						
									
										59
									
								
								src/HIKNvr.h
									
									
									
									
									
								
							| @@ -1,59 +0,0 @@ | |||||||
| #pragma once |  | ||||||
| #include "json.hpp" |  | ||||||
| #include "HIKBase.h" |  | ||||||
| #include "DecisionPlatform.h" |  | ||||||
| #include "DataTime.h" |  | ||||||
| #include <vector> |  | ||||||
|  |  | ||||||
| #define NVR_SUC 0 |  | ||||||
| #define NVR_ERR_HIK  6 |  | ||||||
| #define NVR_ERR_CONNECT_7  7 |  | ||||||
|  |  | ||||||
| struct TimeRecord |  | ||||||
| { |  | ||||||
|     DateTime TimeStart; |  | ||||||
|     DateTime TimeEnd; |  | ||||||
|     long long tmTimeStart; |  | ||||||
|     long long tmTimeEnd; |  | ||||||
|     // 目前是针对每天记录比对,所以只比对time即可。 |  | ||||||
|     bool IsInRecord(DateTime time_in) |  | ||||||
|     { |  | ||||||
|         if (TimeStart < time_in && TimeEnd > time_in) |  | ||||||
|         { |  | ||||||
|             return true; |  | ||||||
|         } |  | ||||||
|         return false; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| class HIKNvr : public HIKBase |  | ||||||
| { |  | ||||||
| public: |  | ||||||
|     HIKNvr(); |  | ||||||
|     //初始化 Nvr |  | ||||||
|     bool InitNvr(std::string ip, std::string port, std::string username, std::string password, int channel); |  | ||||||
|  |  | ||||||
|     //按月查询 |  | ||||||
|     int CheckTimeRegionWithMonth(DateTime select_time, std::vector<int> &available_date_vec); |  | ||||||
|  |  | ||||||
|     //按日查询 |  | ||||||
|     int CheckTimeRegionWithDay(DateTime select_time, std::vector<TimeRecord> &available_time_vec);     |  | ||||||
|  |  | ||||||
|     //though input SelectTime get the time region |  | ||||||
|     bool GetTimeRegion(DateTime select_time,int value ,DateTime &time_start,DateTime &time_end); |  | ||||||
|  |  | ||||||
|     int GetNvrUTCDiff(); |  | ||||||
|     int nDiffTotalMin; |  | ||||||
|  |  | ||||||
| public: |  | ||||||
|     // 将时间转换成json |  | ||||||
|     nlohmann::json TimeToJson(DateTime Time,std::vector<int> *pAvailableDateVec); |  | ||||||
|     nlohmann::json TimeToJsonInDay(DateTime Time,std::vector<TimeRecord> *pAvailableTimeVec); |  | ||||||
|  |  | ||||||
| private:     |  | ||||||
|     //record the time in the Nvr |  | ||||||
|     std::vector<TimeRecord> m_TimeRecords; |  | ||||||
|     //Nvr channel |  | ||||||
|     int m_Channel; |  | ||||||
|  |  | ||||||
| }; |  | ||||||
| @@ -1,34 +0,0 @@ | |||||||
| #ifndef CHRONO_IO_H |  | ||||||
| #define CHRONO_IO_H |  | ||||||
|  |  | ||||||
| // The MIT License (MIT) |  | ||||||
| // |  | ||||||
| // Copyright (c) 2016, 2017 Howard Hinnant |  | ||||||
| // |  | ||||||
| // Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
| // of this software and associated documentation files (the "Software"), to deal |  | ||||||
| // in the Software without restriction, including without limitation the rights |  | ||||||
| // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
| // copies of the Software, and to permit persons to whom the Software is |  | ||||||
| // furnished to do so, subject to the following conditions: |  | ||||||
| // |  | ||||||
| // The above copyright notice and this permission notice shall be included in all |  | ||||||
| // copies or substantial portions of the Software. |  | ||||||
| // |  | ||||||
| // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |  | ||||||
| // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |  | ||||||
| // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |  | ||||||
| // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |  | ||||||
| // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |  | ||||||
| // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |  | ||||||
| // SOFTWARE. |  | ||||||
| // |  | ||||||
| // Our apologies.  When the previous paragraph was written, lowercase had not yet |  | ||||||
| // been invented (that would involve another several millennia of evolution). |  | ||||||
| // We did not mean to shout. |  | ||||||
|  |  | ||||||
| // This functionality has moved to "date.h" |  | ||||||
|  |  | ||||||
| #include "date.h" |  | ||||||
|  |  | ||||||
| #endif  // CHRONO_IO_H |  | ||||||
							
								
								
									
										8234
									
								
								src/date/date.h
									
									
									
									
									
								
							
							
						
						
									
										8234
									
								
								src/date/date.h
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										3031
									
								
								src/date/islamic.h
									
									
									
									
									
								
							
							
						
						
									
										3031
									
								
								src/date/islamic.h
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1761
									
								
								src/date/iso_week.h
									
									
									
									
									
								
							
							
						
						
									
										1761
									
								
								src/date/iso_week.h
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										3052
									
								
								src/date/julian.h
									
									
									
									
									
								
							
							
						
						
									
										3052
									
								
								src/date/julian.h
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										950
									
								
								src/date/ptz.h
									
									
									
									
									
								
							
							
						
						
									
										950
									
								
								src/date/ptz.h
									
									
									
									
									
								
							| @@ -1,950 +0,0 @@ | |||||||
| #ifndef PTZ_H |  | ||||||
| #define PTZ_H |  | ||||||
|  |  | ||||||
| // The MIT License (MIT) |  | ||||||
| // |  | ||||||
| // Copyright (c) 2017 Howard Hinnant |  | ||||||
| // |  | ||||||
| // Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
| // of this software and associated documentation files (the "Software"), to deal |  | ||||||
| // in the Software without restriction, including without limitation the rights |  | ||||||
| // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
| // copies of the Software, and to permit persons to whom the Software is |  | ||||||
| // furnished to do so, subject to the following conditions: |  | ||||||
| // |  | ||||||
| // The above copyright notice and this permission notice shall be included in all |  | ||||||
| // copies or substantial portions of the Software. |  | ||||||
| // |  | ||||||
| // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |  | ||||||
| // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |  | ||||||
| // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |  | ||||||
| // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |  | ||||||
| // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |  | ||||||
| // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |  | ||||||
| // SOFTWARE. |  | ||||||
|  |  | ||||||
| // This header allows Posix-style time zones as specified for TZ here: |  | ||||||
| // http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03 |  | ||||||
| // |  | ||||||
| // Posix::time_zone can be constructed with a posix-style string and then used in |  | ||||||
| // a zoned_time like so: |  | ||||||
| // |  | ||||||
| // zoned_time<system_clock::duration, Posix::time_zone> zt{"EST5EDT,M3.2.0,M11.1.0", |  | ||||||
| //                                                         system_clock::now()}; |  | ||||||
| // or: |  | ||||||
| // |  | ||||||
| // Posix::time_zone tz{"EST5EDT,M3.2.0,M11.1.0"}; |  | ||||||
| // zoned_time<system_clock::duration, Posix::time_zone> zt{tz, system_clock::now()}; |  | ||||||
| // |  | ||||||
| // In C++17 CTAD simplifies this to: |  | ||||||
| // |  | ||||||
| // Posix::time_zone tz{"EST5EDT,M3.2.0,M11.1.0"}; |  | ||||||
| // zoned_time zt{tz, system_clock::now()}; |  | ||||||
| // |  | ||||||
| // Extension to the Posix rules to allow a constant daylight saving offset: |  | ||||||
| // |  | ||||||
| // If the rule set is missing (everything starting with ','), then |  | ||||||
| // there must be exactly one abbreviation (std or daylight) with |  | ||||||
| // length 3 or greater, and that will be used as the constant offset. If |  | ||||||
| // there are two, the std abbreviation is silently set to "", and the |  | ||||||
| // result is constant daylight saving. If there are zero abbreviations |  | ||||||
| // with no rule set, an exception is thrown. |  | ||||||
| // |  | ||||||
| // Example: |  | ||||||
| // "EST5" yields a constant offset of -5h with 0h save and "EST abbreviation. |  | ||||||
| // "5EDT" yields a constant offset of -4h with 1h save and "EDT" abbreviation. |  | ||||||
| // "EST5EDT" and "5EDT4" are both equal to "5EDT". |  | ||||||
| // |  | ||||||
| // Note, Posix-style time zones are not recommended for all of the reasons described here: |  | ||||||
| // https://stackoverflow.com/tags/timezone/info |  | ||||||
| // |  | ||||||
| // They are provided here as a non-trivial custom time zone example, and if you really |  | ||||||
| // have to have Posix time zones, you're welcome to use this one. |  | ||||||
|  |  | ||||||
| #include "date/tz.h" |  | ||||||
| #include <algorithm> |  | ||||||
| #include <cctype> |  | ||||||
| #include <ostream> |  | ||||||
| #include <string> |  | ||||||
|  |  | ||||||
| namespace Posix |  | ||||||
| { |  | ||||||
|  |  | ||||||
| namespace detail |  | ||||||
| { |  | ||||||
|  |  | ||||||
| #if HAS_STRING_VIEW |  | ||||||
|  |  | ||||||
| using string_t = std::string_view; |  | ||||||
|  |  | ||||||
| #else  // !HAS_STRING_VIEW |  | ||||||
|  |  | ||||||
| using string_t = std::string; |  | ||||||
|  |  | ||||||
| #endif  // !HAS_STRING_VIEW |  | ||||||
|  |  | ||||||
| class rule; |  | ||||||
|  |  | ||||||
| void throw_invalid(const string_t& s, unsigned i, const string_t& message); |  | ||||||
| unsigned read_date(const string_t& s, unsigned i, rule& r); |  | ||||||
| unsigned read_name(const string_t& s, unsigned i, std::string& name); |  | ||||||
| unsigned read_signed_time(const string_t& s, unsigned i, std::chrono::seconds& t); |  | ||||||
| unsigned read_unsigned_time(const string_t& s, unsigned i, std::chrono::seconds& t); |  | ||||||
| unsigned read_unsigned(const string_t& s, unsigned i,  unsigned limit, unsigned& u, |  | ||||||
|                        const string_t& message = string_t{}); |  | ||||||
|  |  | ||||||
| class rule |  | ||||||
| { |  | ||||||
|     enum {off, J, M, N}; |  | ||||||
|  |  | ||||||
|     date::month m_; |  | ||||||
|     date::weekday wd_; |  | ||||||
|     unsigned short n_    : 14; |  | ||||||
|     unsigned short mode_ : 2; |  | ||||||
|     std::chrono::duration<std::int32_t> time_ = std::chrono::hours{2}; |  | ||||||
|  |  | ||||||
| public: |  | ||||||
|     rule() : mode_(off) {} |  | ||||||
|  |  | ||||||
|     bool ok() const {return mode_ != off;} |  | ||||||
|     date::local_seconds operator()(date::year y) const; |  | ||||||
|     std::string to_string() const; |  | ||||||
|  |  | ||||||
|     friend std::ostream& operator<<(std::ostream& os, const rule& r); |  | ||||||
|     friend unsigned read_date(const string_t& s, unsigned i, rule& r); |  | ||||||
|     friend bool operator==(const rule& x, const rule& y); |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| inline |  | ||||||
| bool |  | ||||||
| operator==(const rule& x, const rule& y) |  | ||||||
| { |  | ||||||
|     if (x.mode_ != y.mode_) |  | ||||||
|         return false; |  | ||||||
|     switch (x.mode_) |  | ||||||
|     { |  | ||||||
|     case rule::J: |  | ||||||
|     case rule::N: |  | ||||||
|         return x.n_ == y.n_; |  | ||||||
|     case rule::M: |  | ||||||
|         return x.m_ == y.m_ && x.n_ == y.n_ && x.wd_ == y.wd_; |  | ||||||
|     default: |  | ||||||
|         return true; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| inline |  | ||||||
| bool |  | ||||||
| operator!=(const rule& x, const rule& y) |  | ||||||
| { |  | ||||||
|     return !(x == y); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| inline |  | ||||||
| date::local_seconds |  | ||||||
| rule::operator()(date::year y) const |  | ||||||
| { |  | ||||||
|     using date::local_days; |  | ||||||
|     using date::January; |  | ||||||
|     using date::days; |  | ||||||
|     using date::last; |  | ||||||
|     using sec = std::chrono::seconds; |  | ||||||
|     date::local_seconds t; |  | ||||||
|     switch (mode_) |  | ||||||
|     { |  | ||||||
|     case J: |  | ||||||
|         t = local_days{y/January/0} + days{n_ + (y.is_leap() && n_ > 59)} + sec{time_}; |  | ||||||
|         break; |  | ||||||
|     case M: |  | ||||||
|         t = (n_ == 5 ? local_days{y/m_/wd_[last]} : local_days{y/m_/wd_[n_]}) + sec{time_}; |  | ||||||
|         break; |  | ||||||
|     case N: |  | ||||||
|         t = local_days{y/January/1} + days{n_} + sec{time_}; |  | ||||||
|         break; |  | ||||||
|     default: |  | ||||||
|         assert(!"rule called with bad mode"); |  | ||||||
|     } |  | ||||||
|     return t; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| inline |  | ||||||
| std::string |  | ||||||
| rule::to_string() const |  | ||||||
| { |  | ||||||
|     using namespace std::chrono; |  | ||||||
|     auto print_offset = [](seconds off) |  | ||||||
|         { |  | ||||||
|             std::string nm; |  | ||||||
|             if (off != hours{2}) |  | ||||||
|             { |  | ||||||
|                 date::hh_mm_ss<seconds> offset{off}; |  | ||||||
|                 nm = '/'; |  | ||||||
|                 nm += std::to_string(offset.hours().count()); |  | ||||||
|                 if (offset.minutes() != minutes{0} || offset.seconds() != seconds{0}) |  | ||||||
|                 { |  | ||||||
|                     nm += ':'; |  | ||||||
|                     if (offset.minutes() < minutes{10}) |  | ||||||
|                         nm += '0'; |  | ||||||
|                     nm += std::to_string(offset.minutes().count()); |  | ||||||
|                     if (offset.seconds() != seconds{0}) |  | ||||||
|                     { |  | ||||||
|                         nm += ':'; |  | ||||||
|                         if (offset.seconds() < seconds{10}) |  | ||||||
|                             nm += '0'; |  | ||||||
|                         nm += std::to_string(offset.seconds().count()); |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|             return nm; |  | ||||||
|         }; |  | ||||||
|  |  | ||||||
|     std::string nm; |  | ||||||
|     switch (mode_) |  | ||||||
|     { |  | ||||||
|     case rule::J: |  | ||||||
|         nm = 'J'; |  | ||||||
|         nm += std::to_string(n_); |  | ||||||
|         break; |  | ||||||
|     case rule::M: |  | ||||||
|         nm = 'M'; |  | ||||||
|         nm += std::to_string(static_cast<unsigned>(m_)); |  | ||||||
|         nm += '.'; |  | ||||||
|         nm += std::to_string(n_); |  | ||||||
|         nm += '.'; |  | ||||||
|         nm += std::to_string(wd_.c_encoding()); |  | ||||||
|         break; |  | ||||||
|     case rule::N: |  | ||||||
|         nm = std::to_string(n_); |  | ||||||
|         break; |  | ||||||
|     default: |  | ||||||
|         break; |  | ||||||
|     } |  | ||||||
|     nm += print_offset(time_); |  | ||||||
|     return nm; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| inline |  | ||||||
| std::ostream& |  | ||||||
| operator<<(std::ostream& os, const rule& r) |  | ||||||
| { |  | ||||||
|     switch (r.mode_) |  | ||||||
|     { |  | ||||||
|     case rule::J: |  | ||||||
|         os << 'J' << r.n_ << date::format(" %T", r.time_); |  | ||||||
|         break; |  | ||||||
|     case rule::M: |  | ||||||
|         if (r.n_ == 5) |  | ||||||
|             os << r.m_/r.wd_[date::last]; |  | ||||||
|         else |  | ||||||
|             os << r.m_/r.wd_[r.n_]; |  | ||||||
|         os <<  date::format(" %T", r.time_); |  | ||||||
|         break; |  | ||||||
|     case rule::N: |  | ||||||
|         os << r.n_ << date::format(" %T", r.time_); |  | ||||||
|         break; |  | ||||||
|     default: |  | ||||||
|         break; |  | ||||||
|     } |  | ||||||
|     return os; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| }  // namespace detail |  | ||||||
|  |  | ||||||
| class time_zone |  | ||||||
| { |  | ||||||
|     std::string          std_abbrev_; |  | ||||||
|     std::string          dst_abbrev_ = {}; |  | ||||||
|     std::chrono::seconds offset_; |  | ||||||
|     std::chrono::seconds save_ = std::chrono::hours{1}; |  | ||||||
|     detail::rule         start_rule_; |  | ||||||
|     detail::rule         end_rule_; |  | ||||||
|  |  | ||||||
| public: |  | ||||||
|     explicit time_zone(const detail::string_t& name); |  | ||||||
|  |  | ||||||
|     template <class Duration> |  | ||||||
|         date::sys_info   get_info(date::sys_time<Duration> st) const; |  | ||||||
|     template <class Duration> |  | ||||||
|         date::local_info get_info(date::local_time<Duration> tp) const; |  | ||||||
|  |  | ||||||
|     template <class Duration> |  | ||||||
|         date::sys_time<typename std::common_type<Duration, std::chrono::seconds>::type> |  | ||||||
|         to_sys(date::local_time<Duration> tp) const; |  | ||||||
|  |  | ||||||
|     template <class Duration> |  | ||||||
|         date::sys_time<typename std::common_type<Duration, std::chrono::seconds>::type> |  | ||||||
|         to_sys(date::local_time<Duration> tp, date::choose z) const; |  | ||||||
|  |  | ||||||
|     template <class Duration> |  | ||||||
|         date::local_time<typename std::common_type<Duration, std::chrono::seconds>::type> |  | ||||||
|         to_local(date::sys_time<Duration> tp) const; |  | ||||||
|  |  | ||||||
|     friend std::ostream& operator<<(std::ostream& os, const time_zone& z); |  | ||||||
|  |  | ||||||
|     const time_zone* operator->() const {return this;} |  | ||||||
|  |  | ||||||
|     std::string name() const; |  | ||||||
|  |  | ||||||
|     friend bool operator==(const time_zone& x, const time_zone& y); |  | ||||||
|  |  | ||||||
| private: |  | ||||||
|     date::sys_seconds get_start(date::year y) const; |  | ||||||
|     date::sys_seconds get_prev_start(date::year y) const; |  | ||||||
|     date::sys_seconds get_next_start(date::year y) const; |  | ||||||
|     date::sys_seconds get_end(date::year y) const; |  | ||||||
|     date::sys_seconds get_prev_end(date::year y) const; |  | ||||||
|     date::sys_seconds get_next_end(date::year y) const; |  | ||||||
|     date::sys_info contant_offset() const; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| inline |  | ||||||
| date::sys_seconds |  | ||||||
| time_zone::get_start(date::year y) const |  | ||||||
| { |  | ||||||
|     return date::sys_seconds{(start_rule_(y) - offset_).time_since_epoch()}; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| inline |  | ||||||
| date::sys_seconds |  | ||||||
| time_zone::get_prev_start(date::year y) const |  | ||||||
| { |  | ||||||
|     return date::sys_seconds{(start_rule_(--y) - offset_).time_since_epoch()}; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| inline |  | ||||||
| date::sys_seconds |  | ||||||
| time_zone::get_next_start(date::year y) const |  | ||||||
| { |  | ||||||
|     return date::sys_seconds{(start_rule_(++y) - offset_).time_since_epoch()}; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| inline |  | ||||||
| date::sys_seconds |  | ||||||
| time_zone::get_end(date::year y) const |  | ||||||
| { |  | ||||||
|     return date::sys_seconds{(end_rule_(y) - (offset_ + save_)).time_since_epoch()}; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| inline |  | ||||||
| date::sys_seconds |  | ||||||
| time_zone::get_prev_end(date::year y) const |  | ||||||
| { |  | ||||||
|     return date::sys_seconds{(end_rule_(--y) - (offset_ + save_)).time_since_epoch()}; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| inline |  | ||||||
| date::sys_seconds |  | ||||||
| time_zone::get_next_end(date::year y) const |  | ||||||
| { |  | ||||||
|     return date::sys_seconds{(end_rule_(++y) - (offset_ + save_)).time_since_epoch()}; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| inline |  | ||||||
| date::sys_info |  | ||||||
| time_zone::contant_offset() const |  | ||||||
| { |  | ||||||
|     using date::year; |  | ||||||
|     using date::sys_info; |  | ||||||
|     using date::sys_days; |  | ||||||
|     using date::January; |  | ||||||
|     using date::December; |  | ||||||
|     using date::last; |  | ||||||
|     using std::chrono::minutes; |  | ||||||
|     sys_info r; |  | ||||||
|     r.begin = sys_days{year::min()/January/1}; |  | ||||||
|     r.end   = sys_days{year::max()/December/last}; |  | ||||||
|     if (std_abbrev_.size() > 0) |  | ||||||
|     { |  | ||||||
|         r.abbrev = std_abbrev_; |  | ||||||
|         r.offset = offset_; |  | ||||||
|         r.save = {}; |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         r.abbrev = dst_abbrev_; |  | ||||||
|         r.offset = offset_ + save_; |  | ||||||
|         r.save = date::ceil<minutes>(save_); |  | ||||||
|     } |  | ||||||
|     return r; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| inline |  | ||||||
| time_zone::time_zone(const detail::string_t& s) |  | ||||||
| { |  | ||||||
|     using detail::read_name; |  | ||||||
|     using detail::read_signed_time; |  | ||||||
|     using detail::throw_invalid; |  | ||||||
|     auto i = read_name(s, 0, std_abbrev_); |  | ||||||
|     auto std_name_i = i; |  | ||||||
|     auto abbrev_name_i = i; |  | ||||||
|     i = read_signed_time(s, i, offset_); |  | ||||||
|     offset_ = -offset_; |  | ||||||
|     if (i != s.size()) |  | ||||||
|     { |  | ||||||
|         i = read_name(s, i, dst_abbrev_); |  | ||||||
|         abbrev_name_i = i; |  | ||||||
|         if (i != s.size()) |  | ||||||
|         { |  | ||||||
|             if (s[i] != ',') |  | ||||||
|             { |  | ||||||
|                 i = read_signed_time(s, i, save_); |  | ||||||
|                 save_ = -save_ - offset_; |  | ||||||
|             } |  | ||||||
|             if (i != s.size()) |  | ||||||
|             { |  | ||||||
|                 if (s[i] != ',') |  | ||||||
|                     throw_invalid(s, i, "Expecting end of string or ',' to start rule"); |  | ||||||
|                 ++i; |  | ||||||
|                 i = read_date(s, i, start_rule_); |  | ||||||
|                 if (i == s.size() || s[i] != ',') |  | ||||||
|                     throw_invalid(s, i, "Expecting ',' and then the ending rule"); |  | ||||||
|                 ++i; |  | ||||||
|                 i = read_date(s, i, end_rule_); |  | ||||||
|                 if (i != s.size()) |  | ||||||
|                     throw_invalid(s, i, "Found unexpected trailing characters"); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     if (start_rule_.ok()) |  | ||||||
|     { |  | ||||||
|         if (std_abbrev_.size() < 3) |  | ||||||
|             throw_invalid(s, std_name_i, "Zone with rules must have a std" |  | ||||||
|                                          " abbreviation of length 3 or greater"); |  | ||||||
|         if (dst_abbrev_.size() < 3) |  | ||||||
|             throw_invalid(s, abbrev_name_i, "Zone with rules must have a daylight" |  | ||||||
|                                             " abbreviation of length 3 or greater"); |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         if (dst_abbrev_.size() >= 3) |  | ||||||
|         { |  | ||||||
|             std_abbrev_.clear(); |  | ||||||
|         } |  | ||||||
|         else if (std_abbrev_.size() < 3) |  | ||||||
|         { |  | ||||||
|             throw_invalid(s, std_name_i, "Zone must have at least one abbreviation" |  | ||||||
|                                          " of length 3 or greater"); |  | ||||||
|         } |  | ||||||
|         else |  | ||||||
|         { |  | ||||||
|             dst_abbrev_.clear(); |  | ||||||
|             save_ = {}; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template <class Duration> |  | ||||||
| date::sys_info |  | ||||||
| time_zone::get_info(date::sys_time<Duration> st) const |  | ||||||
| { |  | ||||||
|     using date::sys_info; |  | ||||||
|     using date::year_month_day; |  | ||||||
|     using date::sys_days; |  | ||||||
|     using date::floor; |  | ||||||
|     using date::ceil; |  | ||||||
|     using date::days; |  | ||||||
|     using date::year; |  | ||||||
|     using date::January; |  | ||||||
|     using date::December; |  | ||||||
|     using date::last; |  | ||||||
|     using std::chrono::minutes; |  | ||||||
|     sys_info r{}; |  | ||||||
|     r.offset = offset_; |  | ||||||
|     if (start_rule_.ok()) |  | ||||||
|     { |  | ||||||
|         auto y = year_month_day{floor<days>(st)}.year(); |  | ||||||
|         if (st >= get_next_start(y)) |  | ||||||
|             ++y; |  | ||||||
|         else if (st < get_prev_end(y)) |  | ||||||
|             --y; |  | ||||||
|         auto start = get_start(y); |  | ||||||
|         auto end   = get_end(y); |  | ||||||
|         if (start <= end)  // (northern hemisphere) |  | ||||||
|         { |  | ||||||
|             if (start <= st && st < end) |  | ||||||
|             { |  | ||||||
|                 r.begin = start; |  | ||||||
|                 r.end = end; |  | ||||||
|                 r.offset += save_; |  | ||||||
|                 r.save = ceil<minutes>(save_); |  | ||||||
|                 r.abbrev = dst_abbrev_; |  | ||||||
|             } |  | ||||||
|             else if (st < start) |  | ||||||
|             { |  | ||||||
|                 r.begin = get_prev_end(y); |  | ||||||
|                 r.end = start; |  | ||||||
|                 r.abbrev = std_abbrev_; |  | ||||||
|             } |  | ||||||
|             else  // st >= end |  | ||||||
|             { |  | ||||||
|                 r.begin = end; |  | ||||||
|                 r.end = get_next_start(y); |  | ||||||
|                 r.abbrev = std_abbrev_; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         else  // end < start (southern hemisphere) |  | ||||||
|         { |  | ||||||
|             if (end <= st && st < start) |  | ||||||
|             { |  | ||||||
|                 r.begin = end; |  | ||||||
|                 r.end = start; |  | ||||||
|                 r.abbrev = std_abbrev_; |  | ||||||
|             } |  | ||||||
|             else if (st < end) |  | ||||||
|             { |  | ||||||
|                 r.begin = get_prev_start(y); |  | ||||||
|                 r.end = end; |  | ||||||
|                 r.offset += save_; |  | ||||||
|                 r.save = ceil<minutes>(save_); |  | ||||||
|                 r.abbrev = dst_abbrev_; |  | ||||||
|             } |  | ||||||
|             else  // st >= start |  | ||||||
|             { |  | ||||||
|                 r.begin = start; |  | ||||||
|                 r.end = get_next_end(y); |  | ||||||
|                 r.offset += save_; |  | ||||||
|                 r.save = ceil<minutes>(save_); |  | ||||||
|                 r.abbrev = dst_abbrev_; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|         r = contant_offset(); |  | ||||||
|     assert(r.begin <= st && st < r.end); |  | ||||||
|     return r; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template <class Duration> |  | ||||||
| date::local_info |  | ||||||
| time_zone::get_info(date::local_time<Duration> tp) const |  | ||||||
| { |  | ||||||
|     using date::local_info; |  | ||||||
|     using date::year_month_day; |  | ||||||
|     using date::days; |  | ||||||
|     using date::sys_days; |  | ||||||
|     using date::sys_seconds; |  | ||||||
|     using date::year; |  | ||||||
|     using date::ceil; |  | ||||||
|     using date::January; |  | ||||||
|     using date::December; |  | ||||||
|     using date::last; |  | ||||||
|     using std::chrono::seconds; |  | ||||||
|     using std::chrono::minutes; |  | ||||||
|     local_info r{}; |  | ||||||
|     using date::floor; |  | ||||||
|     if (start_rule_.ok()) |  | ||||||
|     { |  | ||||||
|         auto y = year_month_day{floor<days>(tp)}.year(); |  | ||||||
|         auto start = get_start(y); |  | ||||||
|         auto end   = get_end(y); |  | ||||||
|         auto utcs = sys_seconds{floor<seconds>(tp - offset_).time_since_epoch()}; |  | ||||||
|         auto utcd = sys_seconds{floor<seconds>(tp - (offset_ + save_)).time_since_epoch()}; |  | ||||||
|         auto northern = start <= end; |  | ||||||
|         if ((utcs < start) != (utcd < start)) |  | ||||||
|         { |  | ||||||
|             if (northern) |  | ||||||
|                 r.first.begin = get_prev_end(y); |  | ||||||
|             else |  | ||||||
|                 r.first.begin = end; |  | ||||||
|             r.first.end = start; |  | ||||||
|             r.first.offset = offset_; |  | ||||||
|             r.first.abbrev = std_abbrev_; |  | ||||||
|             r.second.begin = start; |  | ||||||
|             if (northern) |  | ||||||
|                 r.second.end = end; |  | ||||||
|             else |  | ||||||
|                 r.second.end = get_next_end(y); |  | ||||||
|             r.second.abbrev = dst_abbrev_; |  | ||||||
|             r.second.offset = offset_ + save_; |  | ||||||
|             r.second.save = ceil<minutes>(save_); |  | ||||||
|             r.result = save_ > seconds{0} ? local_info::nonexistent |  | ||||||
|                                           : local_info::ambiguous; |  | ||||||
|         } |  | ||||||
|         else if ((utcs < end) != (utcd < end)) |  | ||||||
|         { |  | ||||||
|             if (northern) |  | ||||||
|                 r.first.begin = start; |  | ||||||
|             else |  | ||||||
|                 r.first.begin = get_prev_start(y); |  | ||||||
|             r.first.end = end; |  | ||||||
|             r.first.offset = offset_ + save_; |  | ||||||
|             r.first.save = ceil<minutes>(save_); |  | ||||||
|             r.first.abbrev = dst_abbrev_; |  | ||||||
|             r.second.begin = end; |  | ||||||
|             if (northern) |  | ||||||
|                 r.second.end = get_next_start(y); |  | ||||||
|             else |  | ||||||
|                 r.second.end = start; |  | ||||||
|             r.second.abbrev = std_abbrev_; |  | ||||||
|             r.second.offset = offset_; |  | ||||||
|             r.result = save_ > seconds{0} ? local_info::ambiguous |  | ||||||
|                                           : local_info::nonexistent; |  | ||||||
|         } |  | ||||||
|         else |  | ||||||
|             r.first = get_info(utcs); |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|         r.first = contant_offset(); |  | ||||||
|     return r; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template <class Duration> |  | ||||||
| date::sys_time<typename std::common_type<Duration, std::chrono::seconds>::type> |  | ||||||
| time_zone::to_sys(date::local_time<Duration> tp) const |  | ||||||
| { |  | ||||||
|     using date::local_info; |  | ||||||
|     using date::sys_time; |  | ||||||
|     using date::ambiguous_local_time; |  | ||||||
|     using date::nonexistent_local_time; |  | ||||||
|     auto i = get_info(tp); |  | ||||||
|     if (i.result == local_info::nonexistent) |  | ||||||
|         throw nonexistent_local_time(tp, i); |  | ||||||
|     else if (i.result == local_info::ambiguous) |  | ||||||
|         throw ambiguous_local_time(tp, i); |  | ||||||
|     return sys_time<Duration>{tp.time_since_epoch()} - i.first.offset; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template <class Duration> |  | ||||||
| date::sys_time<typename std::common_type<Duration, std::chrono::seconds>::type> |  | ||||||
| time_zone::to_sys(date::local_time<Duration> tp, date::choose z) const |  | ||||||
| { |  | ||||||
|     using date::local_info; |  | ||||||
|     using date::sys_time; |  | ||||||
|     using date::choose; |  | ||||||
|     auto i = get_info(tp); |  | ||||||
|     if (i.result == local_info::nonexistent) |  | ||||||
|     { |  | ||||||
|         return i.first.end; |  | ||||||
|     } |  | ||||||
|     else if (i.result == local_info::ambiguous) |  | ||||||
|     { |  | ||||||
|         if (z == choose::latest) |  | ||||||
|             return sys_time<Duration>{tp.time_since_epoch()} - i.second.offset; |  | ||||||
|     } |  | ||||||
|     return sys_time<Duration>{tp.time_since_epoch()} - i.first.offset; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template <class Duration> |  | ||||||
| date::local_time<typename std::common_type<Duration, std::chrono::seconds>::type> |  | ||||||
| time_zone::to_local(date::sys_time<Duration> tp) const |  | ||||||
| { |  | ||||||
|     using date::local_time; |  | ||||||
|     using std::chrono::seconds; |  | ||||||
|     using LT = local_time<typename std::common_type<Duration, seconds>::type>; |  | ||||||
|     auto i = get_info(tp); |  | ||||||
|     return LT{(tp + i.offset).time_since_epoch()}; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| inline |  | ||||||
| std::ostream& |  | ||||||
| operator<<(std::ostream& os, const time_zone& z) |  | ||||||
| { |  | ||||||
|     using date::operator<<; |  | ||||||
|     os << '{'; |  | ||||||
|     os << z.std_abbrev_ << ", " << z.dst_abbrev_ << date::format(", %T, ", z.offset_) |  | ||||||
|        << date::format("%T, [", z.save_) << z.start_rule_ << ", " << z.end_rule_ << ")}"; |  | ||||||
|     return os; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| inline |  | ||||||
| std::string |  | ||||||
| time_zone::name() const |  | ||||||
| { |  | ||||||
|     using namespace date; |  | ||||||
|     using namespace std::chrono; |  | ||||||
|     auto print_abbrev = [](std::string const& nm) |  | ||||||
|         { |  | ||||||
|             if (std::any_of(nm.begin(), nm.end(), |  | ||||||
|                          [](char c) |  | ||||||
|                          { |  | ||||||
|                              return !std::isalpha(c); |  | ||||||
|                          })) |  | ||||||
|             { |  | ||||||
|                 return '<' + nm + '>'; |  | ||||||
|             } |  | ||||||
|             return nm; |  | ||||||
|         }; |  | ||||||
|     auto print_offset = [](seconds off) |  | ||||||
|         { |  | ||||||
|             std::string nm; |  | ||||||
|             hh_mm_ss<seconds> offset{-off}; |  | ||||||
|             if (offset.is_negative()) |  | ||||||
|                 nm += '-'; |  | ||||||
|             nm += std::to_string(offset.hours().count()); |  | ||||||
|             if (offset.minutes() != minutes{0} || offset.seconds() != seconds{0}) |  | ||||||
|             { |  | ||||||
|                 nm += ':'; |  | ||||||
|                 if (offset.minutes() < minutes{10}) |  | ||||||
|                     nm += '0'; |  | ||||||
|                 nm += std::to_string(offset.minutes().count()); |  | ||||||
|                 if (offset.seconds() != seconds{0}) |  | ||||||
|                 { |  | ||||||
|                     nm += ':'; |  | ||||||
|                     if (offset.seconds() < seconds{10}) |  | ||||||
|                         nm += '0'; |  | ||||||
|                     nm += std::to_string(offset.seconds().count()); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|             return nm; |  | ||||||
|         }; |  | ||||||
|     auto nm = print_abbrev(std_abbrev_); |  | ||||||
|     nm += print_offset(offset_); |  | ||||||
|     if (!dst_abbrev_.empty()) |  | ||||||
|     { |  | ||||||
|         nm += print_abbrev(dst_abbrev_); |  | ||||||
|         if (save_ != hours{1}) |  | ||||||
|             nm += print_offset(offset_+save_); |  | ||||||
|         if (start_rule_.ok()) |  | ||||||
|         { |  | ||||||
|             nm += ','; |  | ||||||
|             nm += start_rule_.to_string(); |  | ||||||
|             nm += ','; |  | ||||||
|             nm += end_rule_.to_string(); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     return nm; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| inline |  | ||||||
| bool |  | ||||||
| operator==(const time_zone& x, const time_zone& y) |  | ||||||
| { |  | ||||||
|     return x.std_abbrev_ == y.std_abbrev_ && |  | ||||||
|            x.dst_abbrev_ == y. dst_abbrev_ && |  | ||||||
|            x.offset_ == y.offset_ && |  | ||||||
|            x.save_ == y.save_ && |  | ||||||
|            x.start_rule_ == y.start_rule_ && |  | ||||||
|            x.end_rule_ == y.end_rule_; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| inline |  | ||||||
| bool |  | ||||||
| operator!=(const time_zone& x, const time_zone& y) |  | ||||||
| { |  | ||||||
|     return !(x == y); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| namespace detail |  | ||||||
| { |  | ||||||
|  |  | ||||||
| inline |  | ||||||
| void |  | ||||||
| throw_invalid(const string_t& s, unsigned i, const string_t& message) |  | ||||||
| { |  | ||||||
|     throw std::runtime_error(std::string("Invalid time_zone initializer.\n") + |  | ||||||
|                              std::string(message) + ":\n" + |  | ||||||
|                              std::string(s) + '\n' + |  | ||||||
|                              "\x1b[1;32m" + |  | ||||||
|                              std::string(i, '~') + '^' + |  | ||||||
|                              std::string(i < s.size() ? s.size()-i-1 : 0, '~') + |  | ||||||
|                              "\x1b[0m"); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| inline |  | ||||||
| unsigned |  | ||||||
| read_date(const string_t& s, unsigned i, rule& r) |  | ||||||
| { |  | ||||||
|     using date::month; |  | ||||||
|     using date::weekday; |  | ||||||
|     if (i == s.size()) |  | ||||||
|         throw_invalid(s, i, "Expected rule but found end of string"); |  | ||||||
|     if (s[i] == 'J') |  | ||||||
|     { |  | ||||||
|         ++i; |  | ||||||
|         unsigned n; |  | ||||||
|         i = read_unsigned(s, i, 3, n, "Expected to find the Julian day [1, 365]"); |  | ||||||
|         if (!(1 <= n && n <= 365)) |  | ||||||
|             throw_invalid(s, i-1, "Expected Julian day to be in the range [1, 365]"); |  | ||||||
|         r.mode_ = rule::J; |  | ||||||
|         r.n_ = n; |  | ||||||
|     } |  | ||||||
|     else if (s[i] == 'M') |  | ||||||
|     { |  | ||||||
|         ++i; |  | ||||||
|         unsigned m; |  | ||||||
|         i = read_unsigned(s, i, 2, m, "Expected to find month [1, 12]"); |  | ||||||
|         if (!(1 <= m && m <= 12)) |  | ||||||
|             throw_invalid(s, i-1, "Expected month to be in the range [1, 12]"); |  | ||||||
|         if (i == s.size() || s[i] != '.') |  | ||||||
|             throw_invalid(s, i, "Expected '.' after month"); |  | ||||||
|         ++i; |  | ||||||
|         unsigned n; |  | ||||||
|         i = read_unsigned(s, i, 1, n, "Expected to find week number [1, 5]"); |  | ||||||
|         if (!(1 <= n && n <= 5)) |  | ||||||
|             throw_invalid(s, i-1, "Expected week number to be in the range [1, 5]"); |  | ||||||
|         if (i == s.size() || s[i] != '.') |  | ||||||
|             throw_invalid(s, i, "Expected '.' after weekday index"); |  | ||||||
|         ++i; |  | ||||||
|         unsigned wd; |  | ||||||
|         i = read_unsigned(s, i, 1, wd, "Expected to find day of week [0, 6]"); |  | ||||||
|         if (wd > 6) |  | ||||||
|             throw_invalid(s, i-1, "Expected day of week to be in the range [0, 6]"); |  | ||||||
|         r.mode_ = rule::M; |  | ||||||
|         r.m_ = month{m}; |  | ||||||
|         r.wd_ = weekday{wd}; |  | ||||||
|         r.n_ = n; |  | ||||||
|     } |  | ||||||
|     else if (std::isdigit(s[i])) |  | ||||||
|     { |  | ||||||
|         unsigned n; |  | ||||||
|         i = read_unsigned(s, i, 3, n); |  | ||||||
|         if (n > 365) |  | ||||||
|             throw_invalid(s, i-1, "Expected Julian day to be in the range [0, 365]"); |  | ||||||
|         r.mode_ = rule::N; |  | ||||||
|         r.n_ = n; |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|         throw_invalid(s, i, "Expected 'J', 'M', or a digit to start rule"); |  | ||||||
|     if (i != s.size() && s[i] == '/') |  | ||||||
|     { |  | ||||||
|         ++i; |  | ||||||
|         std::chrono::seconds t; |  | ||||||
|         i = read_unsigned_time(s, i, t); |  | ||||||
|         r.time_ = t; |  | ||||||
|     } |  | ||||||
|     return i; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| inline |  | ||||||
| unsigned |  | ||||||
| read_name(const string_t& s, unsigned i, std::string& name) |  | ||||||
| { |  | ||||||
|     if (i == s.size()) |  | ||||||
|         throw_invalid(s, i, "Expected a name but found end of string"); |  | ||||||
|     if (s[i] == '<') |  | ||||||
|     { |  | ||||||
|         ++i; |  | ||||||
|         while (true) |  | ||||||
|         { |  | ||||||
|             if (i == s.size()) |  | ||||||
|                 throw_invalid(s, i, |  | ||||||
|                               "Expected to find closing '>', but found end of string"); |  | ||||||
|             if (s[i] == '>') |  | ||||||
|                 break; |  | ||||||
|             name.push_back(s[i]); |  | ||||||
|             ++i; |  | ||||||
|         } |  | ||||||
|         ++i; |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         while (i != s.size() && std::isalpha(s[i])) |  | ||||||
|         { |  | ||||||
|             name.push_back(s[i]); |  | ||||||
|             ++i; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     return i; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| inline |  | ||||||
| unsigned |  | ||||||
| read_signed_time(const string_t& s, unsigned i, |  | ||||||
|                                   std::chrono::seconds& t) |  | ||||||
| { |  | ||||||
|     if (i == s.size()) |  | ||||||
|         throw_invalid(s, i, "Expected to read signed time, but found end of string"); |  | ||||||
|     bool negative = false; |  | ||||||
|     if (s[i] == '-') |  | ||||||
|     { |  | ||||||
|         negative = true; |  | ||||||
|         ++i; |  | ||||||
|     } |  | ||||||
|     else if (s[i] == '+') |  | ||||||
|         ++i; |  | ||||||
|     i = read_unsigned_time(s, i, t); |  | ||||||
|     if (negative) |  | ||||||
|         t = -t; |  | ||||||
|     return i; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| inline |  | ||||||
| unsigned |  | ||||||
| read_unsigned_time(const string_t& s, unsigned i, std::chrono::seconds& t) |  | ||||||
| { |  | ||||||
|     using std::chrono::seconds; |  | ||||||
|     using std::chrono::minutes; |  | ||||||
|     using std::chrono::hours; |  | ||||||
|     if (i == s.size()) |  | ||||||
|         throw_invalid(s, i, "Expected to read unsigned time, but found end of string"); |  | ||||||
|     unsigned x; |  | ||||||
|     i = read_unsigned(s, i, 2, x, "Expected to find hours [0, 24]"); |  | ||||||
|     if (x > 24) |  | ||||||
|         throw_invalid(s, i-1, "Expected hours to be in the range [0, 24]"); |  | ||||||
|     t = hours{x}; |  | ||||||
|     if (i != s.size() && s[i] == ':') |  | ||||||
|     { |  | ||||||
|         ++i; |  | ||||||
|         i = read_unsigned(s, i, 2, x, "Expected to find minutes [0, 59]"); |  | ||||||
|         if (x > 59) |  | ||||||
|             throw_invalid(s, i-1, "Expected minutes to be in the range [0, 59]"); |  | ||||||
|         t += minutes{x}; |  | ||||||
|         if (i != s.size() && s[i] == ':') |  | ||||||
|         { |  | ||||||
|             ++i; |  | ||||||
|             i = read_unsigned(s, i, 2, x, "Expected to find seconds [0, 59]"); |  | ||||||
|             if (x > 59) |  | ||||||
|                 throw_invalid(s, i-1, "Expected seconds to be in the range [0, 59]"); |  | ||||||
|             t += seconds{x}; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     return i; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| inline |  | ||||||
| unsigned |  | ||||||
| read_unsigned(const string_t& s, unsigned i, unsigned limit, unsigned& u, |  | ||||||
|               const string_t& message) |  | ||||||
| { |  | ||||||
|     if (i == s.size() || !std::isdigit(s[i])) |  | ||||||
|         throw_invalid(s, i, message); |  | ||||||
|     u = static_cast<unsigned>(s[i] - '0'); |  | ||||||
|     unsigned count = 1; |  | ||||||
|     for (++i; count < limit && i != s.size() && std::isdigit(s[i]); ++i, ++count) |  | ||||||
|         u = u * 10 + static_cast<unsigned>(s[i] - '0'); |  | ||||||
|     return i; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| }  // namespace detail |  | ||||||
|  |  | ||||||
| }  // namespace Posix |  | ||||||
|  |  | ||||||
| namespace date |  | ||||||
| { |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| struct zoned_traits<Posix::time_zone> |  | ||||||
| { |  | ||||||
|  |  | ||||||
| #if HAS_STRING_VIEW |  | ||||||
|  |  | ||||||
|     static |  | ||||||
|     Posix::time_zone |  | ||||||
|     locate_zone(std::string_view name) |  | ||||||
|     { |  | ||||||
|         return Posix::time_zone{name}; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
| #else  // !HAS_STRING_VIEW |  | ||||||
|  |  | ||||||
|     static |  | ||||||
|     Posix::time_zone |  | ||||||
|     locate_zone(const std::string& name) |  | ||||||
|     { |  | ||||||
|         return Posix::time_zone{name}; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     static |  | ||||||
|     Posix::time_zone |  | ||||||
|     locate_zone(const char* name) |  | ||||||
|     { |  | ||||||
|         return Posix::time_zone{name}; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
| #endif  // !HAS_STRING_VIEW |  | ||||||
|  |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| }  // namespace date |  | ||||||
|  |  | ||||||
| #endif  // PTZ_H |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										4073
									
								
								src/date/tz.cpp
									
									
									
									
									
								
							
							
						
						
									
										4073
									
								
								src/date/tz.cpp
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2792
									
								
								src/date/tz.h
									
									
									
									
									
								
							
							
						
						
									
										2792
									
								
								src/date/tz.h
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,316 +0,0 @@ | |||||||
| #ifndef TZ_PRIVATE_H |  | ||||||
| #define TZ_PRIVATE_H |  | ||||||
|  |  | ||||||
| // The MIT License (MIT) |  | ||||||
| // |  | ||||||
| // Copyright (c) 2015, 2016 Howard Hinnant |  | ||||||
| // |  | ||||||
| // Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
| // of this software and associated documentation files (the "Software"), to deal |  | ||||||
| // in the Software without restriction, including without limitation the rights |  | ||||||
| // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
| // copies of the Software, and to permit persons to whom the Software is |  | ||||||
| // furnished to do so, subject to the following conditions: |  | ||||||
| // |  | ||||||
| // The above copyright notice and this permission notice shall be included in all |  | ||||||
| // copies or substantial portions of the Software. |  | ||||||
| // |  | ||||||
| // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |  | ||||||
| // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |  | ||||||
| // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |  | ||||||
| // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |  | ||||||
| // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |  | ||||||
| // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |  | ||||||
| // SOFTWARE. |  | ||||||
| // |  | ||||||
| // Our apologies.  When the previous paragraph was written, lowercase had not yet |  | ||||||
| // been invented (that would involve another several millennia of evolution). |  | ||||||
| // We did not mean to shout. |  | ||||||
|  |  | ||||||
| #if !defined(_MSC_VER) || (_MSC_VER >= 1900) |  | ||||||
| #include "tz.h" |  | ||||||
| #else |  | ||||||
| #include "date.h" |  | ||||||
| #include <vector> |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| namespace date |  | ||||||
| { |  | ||||||
|  |  | ||||||
| namespace detail |  | ||||||
| { |  | ||||||
|  |  | ||||||
| #if !USE_OS_TZDB |  | ||||||
|  |  | ||||||
| enum class tz {utc, local, standard}; |  | ||||||
|  |  | ||||||
| //forward declare to avoid warnings in gcc 6.2 |  | ||||||
| class MonthDayTime; |  | ||||||
| std::istream& operator>>(std::istream& is, MonthDayTime& x); |  | ||||||
| std::ostream& operator<<(std::ostream& os, const MonthDayTime& x); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class MonthDayTime |  | ||||||
| { |  | ||||||
| private: |  | ||||||
|     struct pair |  | ||||||
|     { |  | ||||||
| #if defined(_MSC_VER) && (_MSC_VER < 1900) |  | ||||||
|         pair() : month_day_(date::jan / 1), weekday_(0U) {} |  | ||||||
|  |  | ||||||
|         pair(const date::month_day& month_day, const date::weekday& weekday) |  | ||||||
|             : month_day_(month_day), weekday_(weekday) {} |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
|         date::month_day month_day_; |  | ||||||
|         date::weekday   weekday_; |  | ||||||
|     }; |  | ||||||
|  |  | ||||||
|     enum Type {month_day, month_last_dow, lteq, gteq}; |  | ||||||
|  |  | ||||||
|     Type                         type_{month_day}; |  | ||||||
|  |  | ||||||
| #if !defined(_MSC_VER) || (_MSC_VER >= 1900) |  | ||||||
|     union U |  | ||||||
| #else |  | ||||||
|     struct U |  | ||||||
| #endif |  | ||||||
|     { |  | ||||||
|         date::month_day          month_day_; |  | ||||||
|         date::month_weekday_last month_weekday_last_; |  | ||||||
|         pair                     month_day_weekday_; |  | ||||||
|  |  | ||||||
| #if !defined(_MSC_VER) || (_MSC_VER >= 1900) |  | ||||||
|         U() : month_day_{date::jan/1} {} |  | ||||||
| #else |  | ||||||
|         U() : |  | ||||||
|             month_day_(date::jan/1), |  | ||||||
|             month_weekday_last_(date::month(0U), date::weekday_last(date::weekday(0U))) |  | ||||||
|         {} |  | ||||||
|  |  | ||||||
| #endif // !defined(_MSC_VER) || (_MSC_VER >= 1900) |  | ||||||
|  |  | ||||||
|         U& operator=(const date::month_day& x); |  | ||||||
|         U& operator=(const date::month_weekday_last& x); |  | ||||||
|         U& operator=(const pair& x); |  | ||||||
|     } u; |  | ||||||
|  |  | ||||||
|     std::chrono::hours           h_{0}; |  | ||||||
|     std::chrono::minutes         m_{0}; |  | ||||||
|     std::chrono::seconds         s_{0}; |  | ||||||
|     tz                           zone_{tz::local}; |  | ||||||
|  |  | ||||||
| public: |  | ||||||
|     MonthDayTime() = default; |  | ||||||
|     MonthDayTime(local_seconds tp, tz timezone); |  | ||||||
|     MonthDayTime(const date::month_day& md, tz timezone); |  | ||||||
|  |  | ||||||
|     date::day day() const; |  | ||||||
|     date::month month() const; |  | ||||||
|     tz zone() const {return zone_;} |  | ||||||
|  |  | ||||||
|     void canonicalize(date::year y); |  | ||||||
|  |  | ||||||
|     sys_seconds |  | ||||||
|        to_sys(date::year y, std::chrono::seconds offset, std::chrono::seconds save) const; |  | ||||||
|     sys_days to_sys_days(date::year y) const; |  | ||||||
|  |  | ||||||
|     sys_seconds to_time_point(date::year y) const; |  | ||||||
|     int compare(date::year y, const MonthDayTime& x, date::year yx, |  | ||||||
|                 std::chrono::seconds offset, std::chrono::minutes prev_save) const; |  | ||||||
|  |  | ||||||
|     friend std::istream& operator>>(std::istream& is, MonthDayTime& x); |  | ||||||
|     friend std::ostream& operator<<(std::ostream& os, const MonthDayTime& x); |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| // A Rule specifies one or more set of datetimes without using an offset. |  | ||||||
| // Multiple dates are specified with multiple years.  The years in effect |  | ||||||
| // go from starting_year_ to ending_year_, inclusive.  starting_year_ <= |  | ||||||
| // ending_year_. save_ is in effect for times from the specified time |  | ||||||
| // onward, including the specified time. When the specified time is |  | ||||||
| // local, it uses the save_ from the chronologically previous Rule, or if |  | ||||||
| // there is none, 0. |  | ||||||
|  |  | ||||||
| //forward declare to avoid warnings in gcc 6.2 |  | ||||||
| class Rule; |  | ||||||
| bool operator==(const Rule& x, const Rule& y); |  | ||||||
| bool operator<(const Rule& x, const Rule& y); |  | ||||||
| bool operator==(const Rule& x, const date::year& y); |  | ||||||
| bool operator<(const Rule& x, const date::year& y); |  | ||||||
| bool operator==(const date::year& x, const Rule& y); |  | ||||||
| bool operator<(const date::year& x, const Rule& y); |  | ||||||
| bool operator==(const Rule& x, const std::string& y); |  | ||||||
| bool operator<(const Rule& x, const std::string& y); |  | ||||||
| bool operator==(const std::string& x, const Rule& y); |  | ||||||
| bool operator<(const std::string& x, const Rule& y); |  | ||||||
| std::ostream& operator<<(std::ostream& os, const Rule& r); |  | ||||||
|  |  | ||||||
| class Rule |  | ||||||
| { |  | ||||||
| private: |  | ||||||
|     std::string          name_; |  | ||||||
|     date::year           starting_year_{0}; |  | ||||||
|     date::year           ending_year_{0}; |  | ||||||
|     MonthDayTime         starting_at_; |  | ||||||
|     std::chrono::minutes save_{0}; |  | ||||||
|     std::string          abbrev_; |  | ||||||
|  |  | ||||||
| public: |  | ||||||
|     Rule() = default; |  | ||||||
|     explicit Rule(const std::string& s); |  | ||||||
|     Rule(const Rule& r, date::year starting_year, date::year ending_year); |  | ||||||
|  |  | ||||||
|     const std::string& name() const {return name_;} |  | ||||||
|     const std::string& abbrev() const {return abbrev_;} |  | ||||||
|  |  | ||||||
|     const MonthDayTime&         mdt()           const {return starting_at_;} |  | ||||||
|     const date::year&           starting_year() const {return starting_year_;} |  | ||||||
|     const date::year&           ending_year()   const {return ending_year_;} |  | ||||||
|     const std::chrono::minutes& save()          const {return save_;} |  | ||||||
|  |  | ||||||
|     static void split_overlaps(std::vector<Rule>& rules); |  | ||||||
|  |  | ||||||
|     friend bool operator==(const Rule& x, const Rule& y); |  | ||||||
|     friend bool operator<(const Rule& x, const Rule& y); |  | ||||||
|     friend bool operator==(const Rule& x, const date::year& y); |  | ||||||
|     friend bool operator<(const Rule& x, const date::year& y); |  | ||||||
|     friend bool operator==(const date::year& x, const Rule& y); |  | ||||||
|     friend bool operator<(const date::year& x, const Rule& y); |  | ||||||
|     friend bool operator==(const Rule& x, const std::string& y); |  | ||||||
|     friend bool operator<(const Rule& x, const std::string& y); |  | ||||||
|     friend bool operator==(const std::string& x, const Rule& y); |  | ||||||
|     friend bool operator<(const std::string& x, const Rule& y); |  | ||||||
|  |  | ||||||
|     friend std::ostream& operator<<(std::ostream& os, const Rule& r); |  | ||||||
|  |  | ||||||
| private: |  | ||||||
|     date::day day() const; |  | ||||||
|     date::month month() const; |  | ||||||
|     static void split_overlaps(std::vector<Rule>& rules, std::size_t i, std::size_t& e); |  | ||||||
|     static bool overlaps(const Rule& x, const Rule& y); |  | ||||||
|     static void split(std::vector<Rule>& rules, std::size_t i, std::size_t k, |  | ||||||
|                       std::size_t& e); |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| inline bool operator!=(const Rule& x, const Rule& y) {return !(x == y);} |  | ||||||
| inline bool operator> (const Rule& x, const Rule& y) {return   y < x;} |  | ||||||
| inline bool operator<=(const Rule& x, const Rule& y) {return !(y < x);} |  | ||||||
| inline bool operator>=(const Rule& x, const Rule& y) {return !(x < y);} |  | ||||||
|  |  | ||||||
| inline bool operator!=(const Rule& x, const date::year& y) {return !(x == y);} |  | ||||||
| inline bool operator> (const Rule& x, const date::year& y) {return   y < x;} |  | ||||||
| inline bool operator<=(const Rule& x, const date::year& y) {return !(y < x);} |  | ||||||
| inline bool operator>=(const Rule& x, const date::year& y) {return !(x < y);} |  | ||||||
|  |  | ||||||
| inline bool operator!=(const date::year& x, const Rule& y) {return !(x == y);} |  | ||||||
| inline bool operator> (const date::year& x, const Rule& y) {return   y < x;} |  | ||||||
| inline bool operator<=(const date::year& x, const Rule& y) {return !(y < x);} |  | ||||||
| inline bool operator>=(const date::year& x, const Rule& y) {return !(x < y);} |  | ||||||
|  |  | ||||||
| inline bool operator!=(const Rule& x, const std::string& y) {return !(x == y);} |  | ||||||
| inline bool operator> (const Rule& x, const std::string& y) {return   y < x;} |  | ||||||
| inline bool operator<=(const Rule& x, const std::string& y) {return !(y < x);} |  | ||||||
| inline bool operator>=(const Rule& x, const std::string& y) {return !(x < y);} |  | ||||||
|  |  | ||||||
| inline bool operator!=(const std::string& x, const Rule& y) {return !(x == y);} |  | ||||||
| inline bool operator> (const std::string& x, const Rule& y) {return   y < x;} |  | ||||||
| inline bool operator<=(const std::string& x, const Rule& y) {return !(y < x);} |  | ||||||
| inline bool operator>=(const std::string& x, const Rule& y) {return !(x < y);} |  | ||||||
|  |  | ||||||
| struct zonelet |  | ||||||
| { |  | ||||||
|     enum tag {has_rule, has_save, is_empty}; |  | ||||||
|  |  | ||||||
|     std::chrono::seconds gmtoff_; |  | ||||||
|     tag tag_ = has_rule; |  | ||||||
|  |  | ||||||
| #if !defined(_MSC_VER) || (_MSC_VER >= 1900) |  | ||||||
|     union U |  | ||||||
| #else |  | ||||||
|     struct U |  | ||||||
| #endif |  | ||||||
|     { |  | ||||||
|         std::string          rule_; |  | ||||||
|         std::chrono::minutes save_; |  | ||||||
|  |  | ||||||
|         ~U() {} |  | ||||||
|         U() {} |  | ||||||
|         U(const U&) {} |  | ||||||
|         U& operator=(const U&) = delete; |  | ||||||
|     } u; |  | ||||||
|  |  | ||||||
|     std::string                        format_; |  | ||||||
|     date::year                         until_year_{0}; |  | ||||||
|     MonthDayTime                       until_date_; |  | ||||||
|     sys_seconds                        until_utc_; |  | ||||||
|     local_seconds                      until_std_; |  | ||||||
|     local_seconds                      until_loc_; |  | ||||||
|     std::chrono::minutes               initial_save_{0}; |  | ||||||
|     std::string                        initial_abbrev_; |  | ||||||
|     std::pair<const Rule*, date::year> first_rule_{nullptr, date::year::min()}; |  | ||||||
|     std::pair<const Rule*, date::year> last_rule_{nullptr, date::year::max()}; |  | ||||||
|  |  | ||||||
|     ~zonelet(); |  | ||||||
|     zonelet(); |  | ||||||
|     zonelet(const zonelet& i); |  | ||||||
|     zonelet& operator=(const zonelet&) = delete; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| #else  // USE_OS_TZDB |  | ||||||
|  |  | ||||||
| struct ttinfo |  | ||||||
| { |  | ||||||
|     std::int32_t  tt_gmtoff; |  | ||||||
|     unsigned char tt_isdst; |  | ||||||
|     unsigned char tt_abbrind; |  | ||||||
|     unsigned char pad[2]; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| static_assert(sizeof(ttinfo) == 8, ""); |  | ||||||
|  |  | ||||||
| struct expanded_ttinfo |  | ||||||
| { |  | ||||||
|     std::chrono::seconds offset; |  | ||||||
|     std::string          abbrev; |  | ||||||
|     bool                 is_dst; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| struct transition |  | ||||||
| { |  | ||||||
|     sys_seconds            timepoint; |  | ||||||
|     const expanded_ttinfo* info; |  | ||||||
|  |  | ||||||
|     transition(sys_seconds tp, const expanded_ttinfo* i = nullptr) |  | ||||||
|         : timepoint(tp) |  | ||||||
|         , info(i) |  | ||||||
|         {} |  | ||||||
|  |  | ||||||
|     friend |  | ||||||
|     std::ostream& |  | ||||||
|     operator<<(std::ostream& os, const transition& t) |  | ||||||
|     { |  | ||||||
|         using date::operator<<; |  | ||||||
|         os << t.timepoint << "Z "; |  | ||||||
|         if (t.info->offset >= std::chrono::seconds{0}) |  | ||||||
|             os << '+'; |  | ||||||
|         os << make_time(t.info->offset); |  | ||||||
|         if (t.info->is_dst > 0) |  | ||||||
|             os << " daylight "; |  | ||||||
|         else |  | ||||||
|             os << " standard "; |  | ||||||
|         os << t.info->abbrev; |  | ||||||
|         return os; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| #endif  // USE_OS_TZDB |  | ||||||
|  |  | ||||||
| }  // namespace detail |  | ||||||
|  |  | ||||||
| }  // namespace date |  | ||||||
|  |  | ||||||
| #if defined(_MSC_VER) && (_MSC_VER < 1900) |  | ||||||
| #include "tz.h" |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #endif  // TZ_PRIVATE_H |  | ||||||
| @@ -1,111 +0,0 @@ | |||||||
| #ifndef DATA_TYPE_H |  | ||||||
| #define DATA_TYPE_H |  | ||||||
| #define FRAME_HEAD_MAGIC 0x03211546  |  | ||||||
| #define SYSTEM_SYNC_ID    2 |  | ||||||
|  |  | ||||||
| #ifdef __LINUX__ |  | ||||||
| typedef unsigned char            UCHAR; |  | ||||||
| typedef unsigned char*          PBYTE; |  | ||||||
| typedef char*                    LPTSTR; |  | ||||||
| typedef    unsigned short             USHORT; |  | ||||||
| typedef int                     HANDLE; |  | ||||||
| typedef unsigned long           ULONG; |  | ||||||
| typedef unsigned long           DWORD; |  | ||||||
| #endif //#ifdef __LINUX__ |  | ||||||
|  |  | ||||||
| typedef struct tagFrameInfo{ |  | ||||||
|     ULONG    SyncId; /* 00000000000000000000000000010b */ |  | ||||||
|     ULONG    Magic; |  | ||||||
|     USHORT    FrameType; /* I frames , P frames or BBP frames Audio frames or dsp status etc */ |  | ||||||
|     ULONG    Length; /*lenth include this header */ |  | ||||||
|     ULONG    FrameNumber; /* serial number of this frame */ |  | ||||||
|     UCHAR    Breakable; /* indicate if stream breakable, you could restart new file(with PktSysHeader) if true */ |  | ||||||
|     /*ULONG   Ack;*/ |  | ||||||
|     ULONG    PTS; /* system clock when this frames is processed */ |  | ||||||
| }TMFRAME_HEADER, *PTMFRAME_HEADER; |  | ||||||
|  |  | ||||||
| typedef enum { |  | ||||||
|    StandardNone                   = 0x80000000, |  | ||||||
|    StandardNTSC                   = 0x00000001, |  | ||||||
|    StandardPAL                    = 0x00000002, |  | ||||||
|    StandardSECAM                  = 0x00000004, |  | ||||||
| } VideoStandard_t;                |  | ||||||
|  |  | ||||||
|  |  | ||||||
| typedef enum { |  | ||||||
|     PktError = 0, |  | ||||||
|     PktIFrames = 0x0001, |  | ||||||
|     PktPFrames = 0x0002, |  | ||||||
|     PktBBPFrames = 0x0004, |  | ||||||
|     PktAudioFrames = 0x0008, |  | ||||||
|     PktMotionDetection = 0x00010, |  | ||||||
|     PktDspStatus = 0x00020, |  | ||||||
|     PktOrigImage = 0x00040, |  | ||||||
|     PktSysHeader = 0x00080, |  | ||||||
|     PktBPFrames = 0x00100, |  | ||||||
|     PktSFrames = 0x00200, |  | ||||||
|     PktSubIFrames = 0x00400, |  | ||||||
|     PktSubPFrames = 0x00800, |  | ||||||
|     PktSubBBPFrames = 0x01000, |  | ||||||
|     PktSubSysHeader = 0x02000 |  | ||||||
| }FrameType_t; |  | ||||||
|  |  | ||||||
| typedef struct tagVersion{ |  | ||||||
|     ULONG DspVersion, DspBuildNum; |  | ||||||
|     ULONG DriverVersion, DriverBuildNum; |  | ||||||
|     ULONG SDKVersion, SDKBuildNum; |  | ||||||
| }VERSION_INFO, *PVERSION_INFO; |  | ||||||
|  |  | ||||||
| typedef enum { |  | ||||||
|     ENC_CIF_FORMAT = 0, |  | ||||||
|     ENC_QCIF_FORMAT = 1, |  | ||||||
|     ENC_2CIF_FORMAT = 2, |  | ||||||
|     ENC_4CIF_FORMAT = 3, |  | ||||||
|     ENC_QQCIF_FORMAT = 4, |  | ||||||
|     ENC_CIFQCIF_FORMAT =5, |  | ||||||
|     ENC_CIFQQCIF_FORMAT =6, |  | ||||||
|     ENC_DCIF_FORMAT =7, |  | ||||||
|     ENC_VGA_FORMAT=8 |  | ||||||
| }PictureFormat_t; |  | ||||||
|      |  | ||||||
| typedef struct tagMotionData{ |  | ||||||
|     PictureFormat_t PicFormat; |  | ||||||
|     ULONG HorizeBlocks; |  | ||||||
|     ULONG VerticalBlocks; |  | ||||||
|     ULONG BlockSize; |  | ||||||
| }MOTION_DATA_HEADER, *PMOTION_DATA_HEADER; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #define _OSD_BASE            0x9000                /*base address of special character*/ |  | ||||||
| #define    _OSD_YEAR4            (_OSD_BASE+0)        /*show year time by length of 4 , for example: 2005*/ |  | ||||||
| #define _OSD_YEAR2            (_OSD_BASE+1)        /*show year time by length of 2, for example: 05    */ |  | ||||||
| #define _OSD_MONTH3            (_OSD_BASE+2)        /*show month time in English, for example: Jan*/ |  | ||||||
| #define _OSD_MONTH2            (_OSD_BASE+3)        /*show month time by two Arabic numerals, for example: 07*/ |  | ||||||
| #define _OSD_DAY            (_OSD_BASE+4)        /*show day time by two Arabic numerals, for example: 31*/ |  | ||||||
| #define _OSD_WEEK3            (_OSD_BASE+5)        /*show week time in English: MON<4F><4E>SUN*/ |  | ||||||
| #define    _OSD_CWEEK1            (_OSD_BASE+6)        /*show week time in Chinese GB code*/ |  | ||||||
| #define    _OSD_HOUR24            (_OSD_BASE+7)        /*show 24 hours clock: 00<30><30>23    */ |  | ||||||
| #define    _OSD_HOUR12            (_OSD_BASE+8)        /*show 12 hours clock: 00<30><30>12*/ |  | ||||||
| #define    _OSD_MINUTE            (_OSD_BASE+9)        /*show minute time by length of 2: 00<30><30>59*/ |  | ||||||
| #define _OSD_SECOND            (_OSD_BASE+10)        /*show second time by length of 2: 00<30><30>59*/ |  | ||||||
| #define _OSD_MILISECOND        (_OSD_BASE+11)        /*show millisecond time by length of 3: 000~999*/ |  | ||||||
| #define _OSD_APM            (_OSD_BASE+14)        /*show a.m. or p.m. by length of 2 bit, AM or PM*/ |  | ||||||
|  |  | ||||||
| //For new added APIs to set OSD: SetEncoderOsdDisplayMode, SetDecoderOsdDisplayMode and SetDisplayOsdDisplayMode in v6.0 SDK, we use new basic address of special character. |  | ||||||
| #define _OSD_BASE_EX        0x90000                /*base address of special character*/ |  | ||||||
| #define    _OSD_YEAR4_EX        (_OSD_BASE_EX+0)    /*the same as _OSD_YEAR4*/ |  | ||||||
| #define _OSD_YEAR2_EX        (_OSD_BASE_EX+1)    /*the same as _OSD_YEAR2*/ |  | ||||||
| #define _OSD_MONTH3_EX        (_OSD_BASE_EX+2)    /*the same as _OSD_MONTH3*/ |  | ||||||
| #define _OSD_MONTH2_EX        (_OSD_BASE_EX+3)    /*the same as _OSD_MONTH2*/ |  | ||||||
| #define _OSD_DAY_EX            (_OSD_BASE_EX+4)    /*the same as _OSD_DAY*/ |  | ||||||
| #define _OSD_WEEK3_EX        (_OSD_BASE_EX+5)    /*the same as _OSD_WEEK3*/ |  | ||||||
| #define    _OSD_CWEEK1_EX        (_OSD_BASE_EX+6)    /*the same as _OSD_CWEEK1*/ |  | ||||||
| #define    _OSD_HOUR24_EX        (_OSD_BASE_EX+7)    /*the same as _OSD_HOUR24*/ |  | ||||||
| #define    _OSD_HOUR12_EX        (_OSD_BASE_EX+8)    /*the same as _OSD_HOUR12*/ |  | ||||||
| #define    _OSD_MINUTE_EX        (_OSD_BASE_EX+9)    /*the same as _OSD_MINUTE*/ |  | ||||||
| #define _OSD_SECOND_EX        (_OSD_BASE_EX+10)    /*the same as _OSD_SECOND*/ |  | ||||||
| #define _OSD_MILISECOND_EX    (_OSD_BASE_EX+11)    /*the same as _OSD_MILISECOND*/ |  | ||||||
| #define _OSD_APM_EX            (_OSD_BASE_EX+14)    /*the same as _OSD_APM*/ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #endif |  | ||||||
| @@ -1,451 +0,0 @@ | |||||||
| /////////////////////////////////////////////////////////////////////////// |  | ||||||
| // DS-40xxHC/HF BOARD SYSTEM SDK                     //     |  | ||||||
| ///////////////////////////////////////////////////////////////////////////  |  | ||||||
|  |  | ||||||
| #ifndef DECODECARD_SDK_H |  | ||||||
| #define DECODECARD_SDK_H |  | ||||||
|  |  | ||||||
| #include "datatype.h" |  | ||||||
|  |  | ||||||
| #define DLLEXPORT_API  extern "C" __declspec(dllexport) |  | ||||||
| #define ERR_WAIT_TIMEOUT                0xc0000001 |  | ||||||
| #define ERR_INVALID_HANDLE                0xc0000002 |  | ||||||
| #define ERR_INVALID_ARGUMENT                0xc0000003 |  | ||||||
| #define ERR_DDRAW_CREATE_FAILED                0xc0000004 |  | ||||||
| #define ERR_DDRAW_CAPS_FAULT                0xc0000005 |  | ||||||
| #define ERR_SET_COOPERATIVELEVEL_FAILED            0xc0000006 |  | ||||||
| #define ERR_PRIMARY_SURFACE_CREATE_FAILED        0xc0000007 |  | ||||||
| #define ERR_GET_OVERLAY_ADDRESS_FAILED            0xc0000008 |  | ||||||
| #define ERR_OVERLAY_SURFACE_CREATE_FAILED        0xc0000009 |  | ||||||
| #define ERR_OVERLAY_UPDATE_FAILED            0xc000000a |  | ||||||
| #define ERR_TMMAN_FAILURE                0xc000000b |  | ||||||
| #define ERR_CHANNELMAGIC_MISMATCH            0xc000000c |  | ||||||
| #define ERR_CALLBACK_REGISTERED                0xc000000d |  | ||||||
| #define ERR_QUEUE_OVERFLOW                0xc000000e |  | ||||||
| #define ERR_STREAM_THREAD_FAILURE            0xc000000f |  | ||||||
| #define ERR_THREAD_STOP_ERROR                0xc0000010 |  | ||||||
| #define ERR_NOT_SUPPORT                    0xc0000011 |  | ||||||
| #define ERR_OUTOF_MEMORY                0xc0000012 |  | ||||||
| #define ERR_DSP_BUSY                    0xc0000013 |  | ||||||
| #define ERR_DATA_ERROR                    0xc0000014 |  | ||||||
| #define ERR_KERNEL                    0xc0000016 |  | ||||||
| #define ERR_OFFSCREEN_CREATE_FAILED            0xc0000017 |  | ||||||
| #define ERR_MULTICLOCK_FAILURE                0xc0000018 |  | ||||||
| #define ERR_INVALID_DEVICE                0xc0000019 |  | ||||||
| #define ERR_INVALID_DRIVER                0xc000001a |  | ||||||
| //error code for MD card |  | ||||||
| #define HWERR_SUCCESS                        0 |  | ||||||
| #define HWERR_ALLOCATE_MEMORY                0xc1000001 |  | ||||||
| #define HWERR_INVALID_HANDLE                0xc1000002 |  | ||||||
| #define HWERR_DDRAW_CREATE_FAILED            0xc1000003 |  | ||||||
| #define HWERR_DDRAW_CAPS_FAULT                0xc1000004 |  | ||||||
| #define HWERR_SET_COOPERATIVELEVEL_FAILED        0xc1000005 |  | ||||||
| #define HWERR_PRIMARY_SURFACE_CREATE_FAILED        0xc1000006 |  | ||||||
| #define HWERR_OVERLAY_CREATE_FAILED            0xc1000007 |  | ||||||
| #define HWERR_GET_OVERLAY_ADDRESS_FAILED        0xc1000008 |  | ||||||
| #define HWERR_OVERLAY_UPDATE_FAILED            0xc1000009 |  | ||||||
| #define HWERR_SURFACE_NULL                0xc100000a |  | ||||||
| #define HWERR_FILEHEADER_UNKNOWN            0xc100000b |  | ||||||
| #define HWERR_CREATE_FILE_FAILED            0xc100000c |  | ||||||
| #define HWERR_FILE_SIZE_ZERO                0xc100000d |  | ||||||
| #define HWERR_FILE_SIZE_INVALID                0xc100000d |  | ||||||
| #define HWERR_CREATE_OBJ_FAILED                0xc100000e |  | ||||||
| #define HWERR_CHANNELMAGIC_MISMATCH            0xc100000f |  | ||||||
| #define HWERR_PARA_OVER                    0xc1000010 |  | ||||||
| #define HWERR_ORDER                    0xc1000011 |  | ||||||
| #define HWERR_COMMAND                    0xc1000012 |  | ||||||
| #define HWERR_UNSUPPORTED                0xc1000013 |  | ||||||
| #define HWERR_DSPOPEN                    0xc1000014 |  | ||||||
| #define HWERR_DSPLOAD                    0xc1000015 |  | ||||||
| #define HWERR_ALLOCATE_DSPMEMORY            0xc1000016 |  | ||||||
| #define HWERR_DSPCHECHER                0xc1000017 |  | ||||||
| #define HWERR_IMGFILE_UNKNOWN                0xc1000018 |  | ||||||
| #define HWERR_INVALID_FILE                0xc1000019 |  | ||||||
| //standart |  | ||||||
| #define HW_PAL                            2 |  | ||||||
| #define HW_NTSC                            1 |  | ||||||
| //jump direction |  | ||||||
| #define HW_JUMP_FORWARD                    309  |  | ||||||
| #define HW_JUMP_BACKWARD                310 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| typedef enum tagTypeVideoFormat |  | ||||||
| { |  | ||||||
|    vdfRGB8A_233              = 0x00000001, |  | ||||||
|    vdfRGB8R_332              = 0x00000002, |  | ||||||
|    vdfRGB15Alpha             = 0x00000004, |  | ||||||
|    vdfRGB16                  = 0x00000008, |  | ||||||
|    vdfRGB24                  = 0x00000010, |  | ||||||
|    vdfRGB24Alpha             = 0x00000020, |  | ||||||
|     |  | ||||||
|    vdfYUV420Planar           = 0x00000040, |  | ||||||
|    vdfYUV422Planar           = 0x00000080, |  | ||||||
|    vdfYUV411Planar           = 0x00000100, |  | ||||||
|    vdfYUV420Interspersed     = 0x00000200, |  | ||||||
|    vdfYUV422Interspersed     = 0x00000400, |  | ||||||
|    vdfYUV411Interspersed     = 0x00000800, |  | ||||||
|    vdfYUV422Sequence         = 0x00001000,   /* U0, Y0, V0, Y1:  For VO overlay */ |  | ||||||
|    vdfYUV422SequenceAlpha    = 0x00002000,    |  | ||||||
|    /* U0, Y0, V0, Y1:  For VO overlay, with low bit for alpha blending */ |  | ||||||
|    vdfMono                   = 0x00004000,  /* 8 bit monochrome */ |  | ||||||
|  |  | ||||||
|    vdfYUV444Planar           = 0x00008000, |  | ||||||
| }TypeVideoFormat; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| typedef enum _BitrateControlType_t |  | ||||||
| { |  | ||||||
|     brCBR = 0, |  | ||||||
|     brVBR = 1, |  | ||||||
| }BitrateControlType_t; |  | ||||||
|  |  | ||||||
| typedef enum _BOARD_TYPE_DS |  | ||||||
| { |  | ||||||
|     DS400XM             =0, |  | ||||||
|     DS400XH                =1, |  | ||||||
|     DS4004HC            =2, |  | ||||||
|     DS4008HC            =3, |  | ||||||
|     DS4016HC            =4, |  | ||||||
|     DS4001HF            =5, |  | ||||||
|     DS4004HF            =6, |  | ||||||
|     DS4002MD            =7, |  | ||||||
|     DS4004MD            =8,        //4004MD |  | ||||||
|     DS4016HCS            =9,        //4016HCS |  | ||||||
|     DS4002HT            =10,    //4002HT |  | ||||||
|     DS4004HT            =11,    //4004HT |  | ||||||
|     DS4008HT            =12,    //4008HT |  | ||||||
|     DS4004HC_PLUS        =13,    //4004HC+ |  | ||||||
|     DS4008HC_PLUS        =14,    //4008HC+ |  | ||||||
|     DS4016HC_PLUS        =15,    //4016HC+ |  | ||||||
|     DS4008HF            =16,    //4008HF |  | ||||||
|     DS4008MD            =17,    //4008MD |  | ||||||
|     DS4008HS            =18,    //4008HS |  | ||||||
|     DS4016HS            =19,    //4016HS |  | ||||||
|     INVALID_BOARD_TYPE    =0xffffffff, |  | ||||||
| }BOARD_TYPE_DS; |  | ||||||
|  |  | ||||||
| #define STREAM_TYPE_VIDEO    1 |  | ||||||
| #define STREAM_TYPE_AUDIO    2 |  | ||||||
| #define STREAM_TYPE_AVSYNC    3 |  | ||||||
| #define DRAWFUN(x)                void  (CALLBACK* x)(long nPort,HDC hDc,LONG nUser) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| typedef void (*LOGRECORD_CALLBACK)(char *str, void *context); |  | ||||||
| typedef int (*STREAM_READ_CALLBACK)(ULONG channelNumber, void *context); |  | ||||||
| typedef int (*STREAM_DIRECT_READ_CALLBACK)(ULONG channelNumber,void *DataBuf,DWORD Length,int FrameType,void *context); |  | ||||||
|  |  | ||||||
| typedef struct tagChannelCapability{ |  | ||||||
|     UCHAR bAudioPreview; |  | ||||||
|     UCHAR bAlarmIO; |  | ||||||
|     UCHAR bWatchDog; |  | ||||||
| }CHANNEL_CAPABILITY, *PCHANNEL_CAPABILITY; |  | ||||||
|  |  | ||||||
| typedef struct tagFramsStatistics{ |  | ||||||
|     ULONG VideoFrames; |  | ||||||
|     ULONG AudioFrames; |  | ||||||
|     ULONG FramesLost; |  | ||||||
|     ULONG QueueOverflow; |  | ||||||
|     ULONG CurBps; |  | ||||||
| }FRAMES_STATISTICS, *PFRAMES_STATISTICS; |  | ||||||
|  |  | ||||||
| DLLEXPORT_API int __stdcall InitDSPs(); |  | ||||||
| DLLEXPORT_API int __stdcall DeInitDSPs(); |  | ||||||
| DLLEXPORT_API HANDLE __stdcall ChannelOpen(int ChannelNum); |  | ||||||
| DLLEXPORT_API int __stdcall ChannelClose(HANDLE hChannelHandle); |  | ||||||
| DLLEXPORT_API int __stdcall GetTotalChannels(); |  | ||||||
| DLLEXPORT_API int __stdcall GetTotalDSPs(); |  | ||||||
| DLLEXPORT_API int __stdcall StartVideoPreview(HANDLE hChannelHandle,HWND WndHandle, RECT *rect, BOOLEAN bOverlay, int VideoFormat, int FrameRate); |  | ||||||
| DLLEXPORT_API int __stdcall StopVideoPreview(HANDLE hChannelHandle); |  | ||||||
| DLLEXPORT_API int __stdcall SetVideoPara(HANDLE hChannelHandle, int Brightness, int Contrast, int Saturation, int Hue); |  | ||||||
| DLLEXPORT_API int __stdcall GetVideoPara(HANDLE hChannelHandle, VideoStandard_t *VideoStandard, int *Brightness, int *Contrast, int *Saturation, int *Hue); |  | ||||||
| DLLEXPORT_API int __stdcall GetVideoSignal(HANDLE  hChannelHandle); |  | ||||||
| DLLEXPORT_API int __stdcall GetSDKVersion(PVERSION_INFO VersionInfo); |  | ||||||
| DLLEXPORT_API int __stdcall GetCapability(HANDLE hChannelHandle, CHANNEL_CAPABILITY *Capability); |  | ||||||
| DLLEXPORT_API int __stdcall GetLastErrorNum(HANDLE hChannelHandle, ULONG *DspError, ULONG *SdkError); |  | ||||||
| DLLEXPORT_API int __stdcall SetStreamType(HANDLE hChannelHandle, USHORT Type); |  | ||||||
| DLLEXPORT_API int __stdcall GetStreamType(HANDLE hChannelHandle, USHORT *StreamType); |  | ||||||
| DLLEXPORT_API int __stdcall GetFramesStatistics(HANDLE hChannelHandle,     PFRAMES_STATISTICS framesStatistics); |  | ||||||
| DLLEXPORT_API int __stdcall StartMotionDetection(HANDLE hChannelHandle); |  | ||||||
| DLLEXPORT_API int __stdcall GetBoardInfo(HANDLE hChannelHandle, ULONG *BoardType, UCHAR *SerialNo); |  | ||||||
| DLLEXPORT_API int __stdcall StopMotionDetection(HANDLE hChannelHandle); |  | ||||||
| DLLEXPORT_API int __stdcall GetOriginalImage(HANDLE hChannelHandle, UCHAR *ImageBuf, ULONG *Size); |  | ||||||
| DLLEXPORT_API int __stdcall RegisterLogRecordCallback(LOGRECORD_CALLBACK LogRecordFunc, void *Context); |  | ||||||
| DLLEXPORT_API int __stdcall SetAudioPreview(HANDLE hChannelHandle, BOOL bEnable); |  | ||||||
| DLLEXPORT_API int __stdcall ReadStreamData(HANDLE hChannelHandle, void *DataBuf, DWORD *Length, int *FrameType); |  | ||||||
| DLLEXPORT_API int __stdcall RegisterMessageNotifyHandle(HWND hWnd, UINT MessageId); |  | ||||||
| DLLEXPORT_API int __stdcall StartVideoCapture(HANDLE hChannelHandle); |  | ||||||
| DLLEXPORT_API int __stdcall StopVideoCapture(HANDLE hChannelHandle); |  | ||||||
| DLLEXPORT_API int __stdcall SetIBPMode(HANDLE hChannelHandle, int KeyFrameIntervals, int BFrames, int PFrames, int FrameRate); |  | ||||||
| DLLEXPORT_API int __stdcall SetDefaultQuant(HANDLE hChannelHandle, int IQuantVal, int PQuantVal, int BQuantVal); |  | ||||||
| DLLEXPORT_API int __stdcall SetOsd(HANDLE hChannelHandle, BOOL Enable); |  | ||||||
|  |  | ||||||
| DLLEXPORT_API int __stdcall SetLogo(HANDLE hChannelHandle, int x, int y, int w, int h, unsigned char *yuv); |  | ||||||
| DLLEXPORT_API int __stdcall StopLogo(HANDLE hChannelHandle); |  | ||||||
| DLLEXPORT_API int __stdcall SetupMotionDetection(HANDLE hChannelHandle, RECT *RectList, int iAreas); |  | ||||||
| DLLEXPORT_API int __stdcall MotionAnalyzer(HANDLE hChannelHandle, char *MotionData, int iThreshold, int *iResult); |  | ||||||
| DLLEXPORT_API int __stdcall LoadYUVFromBmpFile(char *FileName, unsigned char *yuv, int BufLen, int *Width, int *Height); |  | ||||||
| DLLEXPORT_API int __stdcall SaveYUVToBmpFile(char *FileName, unsigned char *yuv, int Width, int Height); |  | ||||||
| DLLEXPORT_API int __stdcall CaptureIFrame(HANDLE hChannelHandle); |  | ||||||
| DLLEXPORT_API int __stdcall RegisterStreamReadCallback(STREAM_READ_CALLBACK StreamReadCallback, void *Context); |  | ||||||
| DLLEXPORT_API int __stdcall AdjustMotionDetectPrecision(HANDLE hChannelHandle,  |  | ||||||
|                                            int iGrade, int iFastMotionDetectFps,  |  | ||||||
|                                            int iSlowMotionDetectFps); |  | ||||||
| DLLEXPORT_API int __stdcall SetupBitrateControl(HANDLE hChannelHandle, ULONG MaxBps); |  | ||||||
| DLLEXPORT_API int __stdcall SetOverlayColorKey(COLORREF DestColorKey); |  | ||||||
| DLLEXPORT_API int __stdcall SetOsdDisplayMode(HANDLE hChannelHandle, int Brightness, BOOL Translucent, int parameter, USHORT *Format1, USHORT *Format2); |  | ||||||
| DLLEXPORT_API int __stdcall SetLogoDisplayMode(HANDLE hChannelHandle, COLORREF ColorKey, BOOL Translucent, int TwinkleInterval); |  | ||||||
| DLLEXPORT_API int __stdcall SetEncoderPictureFormat(HANDLE hChannelHandle, PictureFormat_t PictureFormat); |  | ||||||
| DLLEXPORT_API int __stdcall SetVideoStandard(HANDLE hChannelHandle, VideoStandard_t VideoStandard); |  | ||||||
| DLLEXPORT_API int __stdcall RestoreOverlay(); |  | ||||||
| DLLEXPORT_API int __stdcall ResetDSP(int DspNumber); |  | ||||||
| DLLEXPORT_API int __stdcall GetSoundLevel(HANDLE hChannelHandle); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| DLLEXPORT_API int __stdcall SetBitrateControlMode(HANDLE hChannelHandle, BitrateControlType_t brc); |  | ||||||
| DLLEXPORT_API int __stdcall SetupNotifyThreshold(HANDLE hChannelHandle, int iFramesThreshold); |  | ||||||
|  |  | ||||||
| DLLEXPORT_API int __stdcall SetupSubChannel(HANDLE hChannelHandle, int iSubChannel); |  | ||||||
| DLLEXPORT_API int __stdcall GetSubChannelStreamType(void  *DataBuf, int FrameType); |  | ||||||
| //add for HC/HF  |  | ||||||
| DLLEXPORT_API int __stdcall RegisterStreamDirectReadCallback(STREAM_DIRECT_READ_CALLBACK StreamDirectReadCallback,void *Context); |  | ||||||
| DLLEXPORT_API int __stdcall RegisterDrawFun(DWORD nport, DRAWFUN(DrawFun),LONG nUser); |  | ||||||
| DLLEXPORT_API int __stdcall SetupMask(HANDLE hChannelHandle, RECT *rectList, int iAreas); |  | ||||||
| DLLEXPORT_API int __stdcall StopMask(HANDLE hChannelHandle); |  | ||||||
| DLLEXPORT_API int __stdcall SetSubEncoderPictureFormat(HANDLE hChannelHandle, PictureFormat_t PictureFormat); |  | ||||||
| DLLEXPORT_API int __stdcall StartSubVideoCapture(HANDLE hChannelHandle); |  | ||||||
| DLLEXPORT_API int __stdcall StopSubVideoCapture(HANDLE hChannelHandle); |  | ||||||
| DLLEXPORT_API int __stdcall SetupDateTime(HANDLE hChannelHandle, SYSTEMTIME *now); |  | ||||||
| /* |  | ||||||
|     <20><><EFBFBD><EFBFBD>Ϊ1.7<EFBFBD>汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><EFBFBD>ܡ<EFBFBD> |  | ||||||
|     <20>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD>ܻ<EFBFBD><DCBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĺ<DEB8><C4BA><EFBFBD><EFBFBD>ơ<EFBFBD> |  | ||||||
| */ |  | ||||||
| //ԭʼͼ<CABC><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| typedef void (*IMAGE_STREAM_CALLBACK)(UINT channelNumber,void *context ); |  | ||||||
| DLLEXPORT_API int __stdcall SetImageStream(HANDLE hChannel,BOOL bStart,UINT fps,UINT width,UINT height,unsigned char *imageBuffer); |  | ||||||
| DLLEXPORT_API int __stdcall RegisterImageStreamCallback(IMAGE_STREAM_CALLBACK,void *context); |  | ||||||
| /* |  | ||||||
|     <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>λ<EFBFBD>ã<EFBFBD> |  | ||||||
|         (x,y)Ϊϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͻ<EFBFBD><CFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭʼͼ<CABC><CDBC><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ꡣ |  | ||||||
|         x<><78><EFBFBD><EFBFBD>Ϊ2<CEAA><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|         (x,y)<29><><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA>йأ<D0B9><D8A3><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>벻ƥ<EBB2BB>䣬 |  | ||||||
|     <20><><EFBFBD>ܻᵼ<DCBB><E1B5BC>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9>ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| */ |  | ||||||
| DLLEXPORT_API int __stdcall SetInputVideoPosition(HANDLE hChannel,UINT x,UINT y); |  | ||||||
| DLLEXPORT_API int __stdcall StopRegisterDrawFun(DWORD nport); |  | ||||||
|  |  | ||||||
| /* |  | ||||||
|     3.0 |  | ||||||
| */ |  | ||||||
| #define SERIAL_NUMBER_LENGTH    12    //<2F>忨<EFBFBD><E5BFA8><EFBFBD>кų<D0BA><C5B3><EFBFBD> |  | ||||||
| typedef struct tagDS_BOARD_DETAIL |  | ||||||
| { |  | ||||||
|     BOARD_TYPE_DS type;                    //<2F>忨<EFBFBD><E5BFA8><EFBFBD><EFBFBD> |  | ||||||
|     BYTE sn[16];                        //<2F><><EFBFBD>к<EFBFBD> |  | ||||||
|     UINT dspCount;                        //<2F>忨<EFBFBD><E5BFA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DSP<53><50><EFBFBD><EFBFBD> |  | ||||||
|     UINT firstDspIndex;                    //<2F>忨<EFBFBD>ϵ<EFBFBD>һ<EFBFBD><D2BB>DSP<53><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     UINT encodeChannelCount;            //<2F>忨<EFBFBD><E5BFA8><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     UINT firstEncodeChannelIndex;        //<2F>忨<EFBFBD>ϵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     UINT decodeChannelCount;            //<2F>忨<EFBFBD><E5BFA8><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     UINT firstDecodeChannelIndex;        //<2F>忨<EFBFBD>ϵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     UINT displayChannelCount;            //<2F>忨<EFBFBD><E5BFA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     UINT firstDisplayChannelIndex;        //<2F>忨<EFBFBD>ϵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     UINT reserved1; |  | ||||||
|     UINT reserved2; |  | ||||||
|     UINT reserved3; |  | ||||||
|     UINT reserved4; |  | ||||||
| }DS_BOARD_DETAIL; |  | ||||||
| typedef struct tagDSP_DETAIL |  | ||||||
| { |  | ||||||
|     UINT encodeChannelCount;            //<2F>忨<EFBFBD><E5BFA8><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     UINT firstEncodeChannelIndex;        //<2F>忨<EFBFBD>ϵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     UINT decodeChannelCount;            //<2F>忨<EFBFBD><E5BFA8><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     UINT firstDecodeChannelIndex;        //<2F>忨<EFBFBD>ϵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     UINT displayChannelCount;            //<2F>忨<EFBFBD><E5BFA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     UINT firstDisplayChannelIndex;        //<2F>忨<EFBFBD>ϵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     UINT reserved1; |  | ||||||
|     UINT reserved2; |  | ||||||
|     UINT reserved3; |  | ||||||
|     UINT reserved4; |  | ||||||
| }DSP_DETAIL; |  | ||||||
| DLLEXPORT_API unsigned int __stdcall GetBoardCount(); |  | ||||||
| DLLEXPORT_API int __stdcall GetBoardDetail(UINT boardNum,DS_BOARD_DETAIL *pBoardDetail); |  | ||||||
| DLLEXPORT_API unsigned int __stdcall GetDspCount(); |  | ||||||
| DLLEXPORT_API int __stdcall GetDspDetail(UINT dspNum,DSP_DETAIL *pDspDetail); |  | ||||||
| DLLEXPORT_API unsigned int __stdcall GetEncodeChannelCount(); |  | ||||||
| DLLEXPORT_API unsigned int __stdcall GetDecodeChannelCount(); |  | ||||||
| DLLEXPORT_API unsigned int __stdcall GetDisplayChannelCount(); |  | ||||||
| DLLEXPORT_API int __stdcall SetDefaultVideoStandard(VideoStandard_t VideoStandard); |  | ||||||
| DLLEXPORT_API int __stdcall SetVideoDetectPrecision(HANDLE hChannel,unsigned int value); |  | ||||||
| DLLEXPORT_API int __stdcall SetSubStreamType(HANDLE hChannelHandle, USHORT Type); |  | ||||||
| DLLEXPORT_API int __stdcall GetSubStreamType(HANDLE hChannelHandle, USHORT *StreamType); |  | ||||||
|  |  | ||||||
| #define MAX_DISPLAY_REGION        16 |  | ||||||
| typedef struct tagREGION_PARAM |  | ||||||
| { |  | ||||||
|     UINT left; |  | ||||||
|     UINT top; |  | ||||||
|     UINT width; |  | ||||||
|     UINT height; |  | ||||||
|     COLORREF color; |  | ||||||
|     UINT param; |  | ||||||
| }REGION_PARAM; |  | ||||||
| DLLEXPORT_API int __stdcall SetDisplayStandard(UINT nDisplayChannel,VideoStandard_t VideoStandard); |  | ||||||
| DLLEXPORT_API int __stdcall SetDisplayRegion(UINT nDisplayChannel,UINT nRegionCount,REGION_PARAM *pParam,UINT nReserved); |  | ||||||
| DLLEXPORT_API int __stdcall ClearDisplayRegion(UINT nDisplayChannel,UINT nRegionFlag); |  | ||||||
| DLLEXPORT_API int __stdcall SetDisplayRegionPosition(UINT nDisplayChannel,UINT nRegion,UINT nLeft,UINT nTop); |  | ||||||
| DLLEXPORT_API int __stdcall FillDisplayRegion(UINT nDisplayChannel,UINT nRegion,unsigned char *pImage); |  | ||||||
| DLLEXPORT_API int __stdcall SetEncoderVideoExtOutput(UINT nEncodeChannel,UINT nPort,BOOL bOpen,UINT nDisplayChannel,UINT nDisplayRegion,UINT nReserved); |  | ||||||
| DLLEXPORT_API int __stdcall SetDecoderVideoExtOutput(UINT nDecodeChannel,UINT nPort,BOOL bOpen,UINT nDisplayChannel,UINT nDisplayRegion,UINT nReserved); |  | ||||||
| DLLEXPORT_API int __stdcall SetDecoderVideoOutput(UINT nDecodeChannel,UINT nPort,BOOL bOpen,UINT nDisplayChannel,UINT nDisplayRegion,UINT nReserved); |  | ||||||
| DLLEXPORT_API int __stdcall SetDecoderAudioOutput(UINT nDecodeChannel,BOOL bOpen,UINT nOutputChannel); |  | ||||||
| //3.1 |  | ||||||
| DLLEXPORT_API int __stdcall SetDeInterlace(HANDLE hChannelHandle,UINT mode,UINT level); |  | ||||||
| DLLEXPORT_API int __stdcall SetPreviewOverlayMode(BOOL bTrue); |  | ||||||
|  |  | ||||||
| //DECODE functions for DS4002MD |  | ||||||
| #if defined( _WINDLL) |  | ||||||
|     #define PLAYER_API  extern "C"__declspec(dllexport)  |  | ||||||
| #else |  | ||||||
|     #define PLAYER_API  extern "C" __declspec(dllimport)  |  | ||||||
| #endif |  | ||||||
| typedef struct tagDISPLAY_PARA |  | ||||||
| { |  | ||||||
|     long bToScreen; |  | ||||||
|     long bToVideoOut; |  | ||||||
|     long nLeft; |  | ||||||
|     long nTop; |  | ||||||
|     long nWidth; |  | ||||||
|     long nHeight; |  | ||||||
|     long nReserved; |  | ||||||
| }DISPLAY_PARA,*PDISPLAY_PARA; |  | ||||||
| //Version info |  | ||||||
| typedef struct tagVERSION{ |  | ||||||
|     ULONG DspVersion, DspBuildNum; |  | ||||||
|     ULONG DriverVersion, DriverBuildNum; |  | ||||||
|     ULONG SDKVersion, SDKBuildNum; |  | ||||||
| }HW_VERSION, *PHW_VERSION; |  | ||||||
|  |  | ||||||
| //init part |  | ||||||
| PLAYER_API int __stdcall HW_InitDirectDraw(HWND hParent,COLORREF colorKey); |  | ||||||
| PLAYER_API int __stdcall HW_ReleaseDirectDraw(); |  | ||||||
| PLAYER_API int __stdcall HW_InitDecDevice(long *pDeviceTotal); |  | ||||||
| PLAYER_API int __stdcall HW_ReleaseDecDevice(); |  | ||||||
| PLAYER_API int __stdcall HW_ChannelOpen(long nChannelNum,HANDLE* phChannel); |  | ||||||
| PLAYER_API int __stdcall HW_ChannelClose(HANDLE hChannel); |  | ||||||
| //open part |  | ||||||
|  |  | ||||||
| PLAYER_API int __stdcall HW_OpenStream(HANDLE hChannel,PBYTE pFileHeadBuf,DWORD nSize); |  | ||||||
| DLLEXPORT_API int __stdcall HW_ResetStream(HANDLE hChannel); |  | ||||||
| PLAYER_API int __stdcall HW_CloseStream(HANDLE hChannel); |  | ||||||
| PLAYER_API int __stdcall HW_InputData(HANDLE hChannel,PBYTE pBuf,DWORD nSize); |  | ||||||
| PLAYER_API int __stdcall HW_OpenFile(HANDLE hChannel,LPTSTR sFileName); |  | ||||||
| PLAYER_API int __stdcall HW_CloseFile(HANDLE hChannel); |  | ||||||
|  |  | ||||||
| //play part |  | ||||||
| PLAYER_API int __stdcall HW_SetDisplayPara(HANDLE hChannel,DISPLAY_PARA *pPara); |  | ||||||
| PLAYER_API int __stdcall HW_Play(HANDLE hChannel); |  | ||||||
| PLAYER_API int __stdcall HW_Stop(HANDLE hChannel); |  | ||||||
| PLAYER_API int __stdcall HW_Pause(HANDLE hChannel,ULONG bPause); |  | ||||||
|  |  | ||||||
| //sound part |  | ||||||
| PLAYER_API int __stdcall HW_PlaySound(HANDLE hChannel); |  | ||||||
| PLAYER_API int __stdcall HW_StopSound(HANDLE hChannel); |  | ||||||
| PLAYER_API int __stdcall HW_SetVolume(HANDLE hChannel,ULONG nVolume); |  | ||||||
| //overlay part |  | ||||||
| PLAYER_API int __stdcall HW_RefreshSurface(); |  | ||||||
| PLAYER_API int __stdcall HW_RestoreSurface(); |  | ||||||
| PLAYER_API int __stdcall HW_ClearSurface(); |  | ||||||
| PLAYER_API int __stdcall HW_ZoomOverlay(RECT* pSrcClientRect, RECT* pDecScreenRect); |  | ||||||
| //cut file |  | ||||||
| PLAYER_API int __stdcall HW_StartCapFile(HANDLE hChannel,LPTSTR sFileName); |  | ||||||
| PLAYER_API int __stdcall HW_StopCapFile(HANDLE hChannel); |  | ||||||
| //capture picture |  | ||||||
| PLAYER_API int __stdcall HW_GetYV12Image(HANDLE hChannel, PBYTE pBuffer, ULONG nSize); |  | ||||||
| PLAYER_API int __stdcall HW_GetPictureSize(HANDLE hChannel,ULONG* pWidth, ULONG* pHeight); |  | ||||||
| PLAYER_API int __stdcall HW_ConvertToBmpFile(BYTE * pBuf,ULONG nSize,ULONG nWidth,ULONG nHeight,char *sFileName,ULONG nReserved); |  | ||||||
| //setting and getting  part |  | ||||||
| PLAYER_API int __stdcall HW_Jump(HANDLE hChannel,ULONG nDirection); |  | ||||||
| PLAYER_API int __stdcall HW_SetJumpInterval(HANDLE hChannel,ULONG nSecond); |  | ||||||
| PLAYER_API int __stdcall HW_GetSpeed(HANDLE hChannel,long *pSpeed); |  | ||||||
| PLAYER_API int __stdcall HW_SetSpeed(HANDLE hChannel,long nSpeed); |  | ||||||
| PLAYER_API int __stdcall HW_SetPlayPos(HANDLE hChannel,ULONG nPos); |  | ||||||
| PLAYER_API int __stdcall HW_GetPlayPos(HANDLE hChannel,ULONG* pPos); |  | ||||||
| PLAYER_API int __stdcall HW_GetVersion(PHW_VERSION pVersion); |  | ||||||
| PLAYER_API int __stdcall HW_GetCurrentFrameRate(HANDLE hChannel,ULONG* pFrameRate); |  | ||||||
| PLAYER_API int __stdcall HW_GetCurrentFrameNum(HANDLE hChannel,ULONG* pFrameNum); |  | ||||||
| PLAYER_API int __stdcall HW_GetFileTotalFrames(HANDLE hChannel,ULONG* pTotalFrames); |  | ||||||
| PLAYER_API int __stdcall HW_GetFileTime(HANDLE hChannel, ULONG* pFileTime); |  | ||||||
| PLAYER_API int __stdcall HW_GetCurrentFrameTime(HANDLE hChannel,ULONG* pFrameTime); |  | ||||||
| PLAYER_API int __stdcall HW_GetPlayedFrames(HANDLE hChannel,ULONG *pDecVFrames); |  | ||||||
| PLAYER_API int __stdcall HW_GetDeviceSerialNo(HANDLE hChannel,ULONG *pDeviceSerialNo); |  | ||||||
| PLAYER_API int __stdcall HW_SetFileEndMsg(HANDLE hChannel,HWND hWnd,UINT nMsg); |  | ||||||
| PLAYER_API int __stdcall HW_SetStreamOpenMode(HANDLE hChannel,ULONG nMode); |  | ||||||
| PLAYER_API int __stdcall HW_GetStreamOpenMode(HANDLE hChannel,ULONG *pMode); |  | ||||||
| PLAYER_API int __stdcall HW_SetVideoOutStandard(HANDLE hChannel,ULONG nStandard); |  | ||||||
| PLAYER_API int __stdcall HW_SetDspDeadlockMsg(HWND hWnd,UINT nMsg); |  | ||||||
| PLAYER_API int __stdcall HW_GetChannelNum(long nDspNum,long *pChannelNum,ULONG nNumsToGet,ULONG * pNumsGotten); |  | ||||||
| PLAYER_API int __stdcall HW_ResetDsp(long nDspNum); |  | ||||||
| PLAYER_API int __stdcall HW_SetAudioPreview(HANDLE hChannel, BOOL bEnable); |  | ||||||
| ////////////////////////////////////////////// |  | ||||||
|  |  | ||||||
| PLAYER_API int __stdcall HW_OpenStreamEx(HANDLE hChannel,PBYTE pFileHeadBuf,DWORD nSize); |  | ||||||
| PLAYER_API int __stdcall HW_CloseStreamEx(HANDLE hChannel); |  | ||||||
| PLAYER_API int __stdcall HW_InputVideoData(HANDLE hChannel,PBYTE pBuf,DWORD nSize); |  | ||||||
| PLAYER_API int __stdcall HW_InputAudioData(HANDLE hChannel,PBYTE pBuf,DWORD nSize); |  | ||||||
|  |  | ||||||
| //4.0 |  | ||||||
| PLAYER_API int __stdcall SetOsdDisplayModeEx(HANDLE hChannelHandle,int color,BOOL Translucent,int param,int nLineCount,USHORT **Format); |  | ||||||
| typedef void (*MOTION_DETECTION_CALLBACK)(ULONG channelNumber,BOOL bMotionDetected,void *context); |  | ||||||
| PLAYER_API int __stdcall SetupMotionDetectionEx(HANDLE hChannelHandle,int iGrade,int iFastMotionDetectFps, |  | ||||||
|                                                    int iSlowMotionDetectFps,UINT delay,RECT *RectList, int iAreas, |  | ||||||
|                                                    MOTION_DETECTION_CALLBACK MotionDetectionCallback,int reserved); |  | ||||||
| PLAYER_API int __stdcall GetJpegImage(HANDLE hChannelHandle,UCHAR *ImageBuf,ULONG *Size,UINT nQuality); |  | ||||||
| //WatchDog |  | ||||||
| PLAYER_API int __stdcall SetWatchDog(UINT boardNumber,BOOL bEnable); |  | ||||||
| //4.1 |  | ||||||
| typedef void (*FILE_REF_DONE_CALLBACK)(UINT nChannel,UINT nSize); |  | ||||||
| PLAYER_API int __stdcall HW_SetFileRef(HANDLE hChannel,BOOL bEnable,FILE_REF_DONE_CALLBACK FileRefDoneCallback); |  | ||||||
| PLAYER_API int __stdcall HW_LocateByAbsoluteTime(HANDLE hChannel,SYSTEMTIME time); |  | ||||||
| PLAYER_API int __stdcall HW_LocateByFrameNumber(HANDLE hChannel,UINT frmNum); |  | ||||||
| PLAYER_API int __stdcall HW_GetCurrentAbsoluteTime(HANDLE hChannel,SYSTEMTIME *pTime); |  | ||||||
| PLAYER_API int __stdcall HW_GetFileAbsoluteTime(HANDLE hChannel,SYSTEMTIME *pStartTime,SYSTEMTIME *pEndTime); |  | ||||||
| //4.2 |  | ||||||
| DLLEXPORT_API int __stdcall HW_ImportFileRef(HANDLE hChannel,char *pBuffer,UINT nSize); |  | ||||||
| DLLEXPORT_API int __stdcall HW_ExportFileRef(HANDLE hChannel,char *pBuffer,UINT nSize); |  | ||||||
| DLLEXPORT_API int __stdcall SetDisplayVideoCapture(UINT nDisplayChannel,BOOL bStart,UINT fps,UINT width,UINT height,unsigned char *imageBuffer); |  | ||||||
| DLLEXPORT_API int __stdcall RegisterDisplayVideoCaptureCallback(IMAGE_STREAM_CALLBACK DisplayVideoCaptureCallback,void *context); |  | ||||||
| DLLEXPORT_API int __stdcall SetDisplayVideoBrightness(UINT chan,int Brightness); |  | ||||||
| DLLEXPORT_API int __stdcall SetChannelStreamCRC(HANDLE hChannel,BOOL bEnable); |  | ||||||
| DLLEXPORT_API int __stdcall SetSubChannelStreamCRC(HANDLE hChannel,BOOL bEnable); |  | ||||||
| DLLEXPORT_API int __stdcall HW_SetDecoderPostProcess(HANDLE hChannel,UINT param); |  | ||||||
| // |  | ||||||
| typedef void (*DECODER_VIDEO_CAPTURE_CALLBACK)(UINT nChannelNumber,void *DataBuf,UINT width,UINT height,UINT nFrameNum,UINT nFrameTime,SYSTEMTIME *pFrameAbsoluteTime,void *context); |  | ||||||
| DLLEXPORT_API int __stdcall RegisterDecoderVideoCaptureCallback(DECODER_VIDEO_CAPTURE_CALLBACK DecoderVideoCaptureCallback,void *context); |  | ||||||
| DLLEXPORT_API int __stdcall HW_SetDecoderVideoCapture(HANDLE hChannel,BOOL bStart,UINT param); |  | ||||||
| DLLEXPORT_API int __stdcall HW_InputDataByFrame(HANDLE hChannel,PBYTE pBuf,DWORD nSize); |  | ||||||
| /* |  | ||||||
| <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ץ<EFBFBD>Ľӿ<EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԡ<EFBFBD><D4A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD>ܻ<EFBFBD><DCBB><EFBFBD><EFBFBD>ġ<DEB8> |  | ||||||
| */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|     short x,y,width,height; |  | ||||||
| }FACE_AREA_DEMO; |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|     FACE_AREA_DEMO faceArea; |  | ||||||
|     FACE_AREA_DEMO leftEyeArea; |  | ||||||
|     FACE_AREA_DEMO rightEyeArea; |  | ||||||
|     FACE_AREA_DEMO leftPupilArea; |  | ||||||
|     FACE_AREA_DEMO rightPupilArea; |  | ||||||
|     FACE_AREA_DEMO noseArea; |  | ||||||
|     FACE_AREA_DEMO mouthArea; |  | ||||||
| }FACE_INFO_DEMO; |  | ||||||
| typedef void (*FACE_DETECTION_DEMO_CALLBACK)(UINT nChannel,UINT nFaceCount,FACE_INFO_DEMO *pFaceInfo, |  | ||||||
|                                         char *pData,UINT nDataSize,UINT nImageWidth,UINT nImageHeight); |  | ||||||
|  |  | ||||||
| DLLEXPORT_API int __stdcall SetFaceDetectionDemo(HANDLE hChannelHandle,BOOL bEnable, |  | ||||||
|                                                  UINT nFrameInterval,FACE_DETECTION_DEMO_CALLBACK pFunc, |  | ||||||
|                                                  BOOL bCompress,UINT nCompressQuality,BOOL bLocateEyePos); |  | ||||||
|  |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,760 +0,0 @@ | |||||||
| #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;     |  | ||||||
|  |  | ||||||
| //<2F><><EFBFBD>۹<EFBFBD><DBB9>ܴ<EFBFBD><DCB4><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| #define PLAYM4_FEC_ERR_ENABLEFAIL                100 // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7> |  | ||||||
| #define PLAYM4_FEC_ERR_NOTENABLE                101 // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>û<EFBFBD>м<EFBFBD><D0BC><EFBFBD> |  | ||||||
| #define PLAYM4_FEC_ERR_NOSUBPORT                102 // <20>Ӷ˿<D3B6>û<EFBFBD>з<EFBFBD><D0B7><EFBFBD> |  | ||||||
| #define PLAYM4_FEC_ERR_PARAMNOTINIT                103 // û<>г<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ӧ<EFBFBD>˿ڵIJ<DAB5><C4B2><EFBFBD> |  | ||||||
| #define PLAYM4_FEC_ERR_SUBPORTOVER                104 // <20>Ӷ˿<D3B6><CBBF>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| #define PLAYM4_FEC_ERR_EFFECTNOTSUPPORT            105 // <20>ð<EFBFBD>װ<EFBFBD><D7B0>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>֧<EFBFBD><D6A7> |  | ||||||
| #define PLAYM4_FEC_ERR_INVALIDWND                106 // <20>Ƿ<EFBFBD><C7B7>Ĵ<EFBFBD><C4B4><EFBFBD> |  | ||||||
| #define PLAYM4_FEC_ERR_PTZOVERFLOW                107 // PTZλ<5A><CEBB>Խ<EFBFBD><D4BD> |  | ||||||
| #define PLAYM4_FEC_ERR_RADIUSINVALID            108 // Բ<>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD>Ƿ<EFBFBD> |  | ||||||
| #define PLAYM4_FEC_ERR_UPDATENOTSUPPORT            109 // ָ<><D6B8><EFBFBD>İ<EFBFBD>װ<EFBFBD><D7B0>ʽ<EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>²<EFBFBD>֧<EFBFBD><D6A7> |  | ||||||
| #define PLAYM4_FEC_ERR_NOPLAYPORT                110 // <20><><EFBFBD>ſ<EFBFBD><C5BF>˿<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| #define PLAYM4_FEC_ERR_PARAMVALID                111 // <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA> |  | ||||||
| #define PLAYM4_FEC_ERR_INVALIDPORT                112 // <20>Ƿ<EFBFBD><C7B7>Ӷ˿<D3B6> |  | ||||||
| #define PLAYM4_FEC_ERR_PTZZOOMOVER                113 // PTZ<54><5A><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΧԽ<CEA7><D4BD> |  | ||||||
| #define PLAYM4_FEC_ERR_OVERMAXPORT                114  // <20><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD>ֵĽ<D6B5><C4BD><EFBFBD>ͨ<EFBFBD><CDA8>Ϊ<EFBFBD>ĸ<EFBFBD> |  | ||||||
| #define PLAYM4_FEC_ERR_ENABLED                  115  //<2F>ö˿<C3B6><CBBF>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> |  | ||||||
| #define PLAYM4_FEC_ERR_D3DACCENOTENABLE            116 // D3D<33><44><EFBFBD><EFBFBD>û<EFBFBD>п<EFBFBD><D0BF><EFBFBD> |  | ||||||
|  |  | ||||||
|  |  | ||||||
| //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  |  | ||||||
|  |  | ||||||
| // <20><><EFBFBD>º궨<C2BA><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>HIK_MEDIAINFO<46>ṹ |  | ||||||
| #define FOURCC_HKMI            0x484B4D49    // "HKMI" HIK_MEDIAINFO<46>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD> |  | ||||||
| // ϵͳ<CFB5><CDB3>װ<EFBFBD><D7B0>ʽ     |  | ||||||
| #define SYSTEM_NULL            0x0                // û<><C3BB>ϵͳ<CFB5>㣬<EFBFBD><E3A3AC><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>     |  | ||||||
| #define SYSTEM_HIK          0x1                // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> |  | ||||||
| #define SYSTEM_MPEG2_PS     0x2                // PS<50><53>װ |  | ||||||
| #define SYSTEM_MPEG2_TS     0x3                // TS<54><53>װ |  | ||||||
| #define SYSTEM_RTP          0x4                // rtp<74><70>װ |  | ||||||
| #define SYSTEM_RTPHIK       0x401                // rtp<74><70>װ |  | ||||||
|  |  | ||||||
| // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| #define VIDEO_NULL          0x0 // û<><C3BB><EFBFBD><EFBFBD>Ƶ |  | ||||||
| #define VIDEO_H264          0x1 // <20><><EFBFBD><EFBFBD>H.264 |  | ||||||
| #define VIDEO_MPEG4         0x3 // <20><>MPEG4 |  | ||||||
| #define VIDEO_MJPEG            0x4 |  | ||||||
| #define VIDEO_AVC264        0x0100 |  | ||||||
|  |  | ||||||
| // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| #define AUDIO_NULL          0x0000 // û<><C3BB><EFBFBD><EFBFBD>Ƶ |  | ||||||
| #define AUDIO_ADPCM         0x1000 // ADPCM  |  | ||||||
| #define AUDIO_MPEG          0x2000 // MPEG ϵ<><CFB5><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>MPEG<45><47>Ƶ |  | ||||||
| #define AUDIO_AAC            0X2001 // AAC <20><><EFBFBD><EFBFBD> |  | ||||||
| // Gϵ<47><CFB5><EFBFBD><EFBFBD>Ƶ |  | ||||||
| #define AUDIO_RAW_DATA8        0x7000      //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ8k<38><6B>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD> |  | ||||||
| #define AUDIO_RAW_UDATA16    0x7001      //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ16k<36><6B>ԭʼ<D4AD><CABC><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>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 //ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ     |  | ||||||
| #define SYNCDATA_IVS        2 //ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ |  | ||||||
|  |  | ||||||
| //motion flow type |  | ||||||
| #define    MOTION_FLOW_NONE            0 |  | ||||||
| #define MOTION_FLOW_CPU                1 |  | ||||||
| #define MOTION_FLOW_GPU                2 |  | ||||||
|  |  | ||||||
| //<2F><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| #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; |  | ||||||
|  |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|     long         nPort;        //ͨ<><CDA8><EFBFBD><EFBFBD> |  | ||||||
|     char         *pBuf;        //<2F><><EFBFBD>صĵ<D8B5>һ·ͼ<C2B7><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> |  | ||||||
|     unsigned int nBufLen;      //<2F><><EFBFBD>صĵ<D8B5>һ·ͼ<C2B7><CDBC><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С |  | ||||||
|     char         *pBuf1;       //<2F><><EFBFBD>صĵڶ<C4B5>·ͼ<C2B7><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> |  | ||||||
|     unsigned int nBufLen1;     //<2F><><EFBFBD>صĵڶ<C4B5>·ͼ<C2B7><CDBC><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С |  | ||||||
|     char         *pBuf2;       //<2F><><EFBFBD>صĵ<D8B5><C4B5><EFBFBD>·ͼ<C2B7><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> |  | ||||||
|     unsigned int nBufLen2;     //<2F><><EFBFBD>صĵ<D8B5><C4B5><EFBFBD>·ͼ<C2B7><CDBC><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С |  | ||||||
|     unsigned int nWidth;       //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     unsigned int nHeight;      //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     unsigned int nStamp;       //ʱ<><CAB1><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD> |  | ||||||
|     unsigned int nType;        //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     void         *pUser;       //<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     unsigned int reserved[4];  //<2F><><EFBFBD><EFBFBD> |  | ||||||
| }DISPLAY_INFO_YUV; |  | ||||||
|  |  | ||||||
| //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;        //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ͣ<EFBFBD>Ŀǰ<C4BF>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ |  | ||||||
|     DWORD dwDataLen;        //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> |  | ||||||
|     BYTE* pData;            //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ݽṹ<DDBD><E1B9B9>ָ<EFBFBD><D6B8>,<2C><><EFBFBD><EFBFBD>IVS_INFO<46>ṹ |  | ||||||
| } 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;            // <20>汾<EFBFBD>ţ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Ϣ<EFBFBD>ṹ<EFBFBD>汾<EFBFBD>ţ<EFBFBD>ĿǰΪ0x0101,<2C><>1.01<EFBFBD>汾<EFBFBD><EFBFBD>01<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>汾<EFBFBD>ţ<EFBFBD>01<EFBFBD><EFBFBD><EFBFBD>Ӱ汾<EFBFBD>š<EFBFBD> |  | ||||||
|     unsigned short  device_id;                // <20>豸ID<49><44><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD>/<2F><><EFBFBD><EFBFBD>             |  | ||||||
|      |  | ||||||
|     unsigned short  system_format;          // ϵͳ<CFB5><CDB3>װ<EFBFBD><D7B0> |  | ||||||
|     unsigned short  video_format;           // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|  |  | ||||||
|     unsigned short  audio_format;           // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     unsigned char   audio_channels;         // ͨ<><CDA8><EFBFBD><EFBFBD>   |  | ||||||
|     unsigned char   audio_bits_per_sample;  // <20><>λ<EFBFBD><CEBB> |  | ||||||
|     unsigned int    audio_samplesrate;      // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>  |  | ||||||
|     unsigned int    audio_bitrate;          // ѹ<><D1B9><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>,<2C><>λ<EFBFBD><CEBB>bit |  | ||||||
|  |  | ||||||
|     unsigned int    reserved[4];            // <20><><EFBFBD><EFBFBD> |  | ||||||
| }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 //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>  |  | ||||||
| { |  | ||||||
|     DWORD dwYear;    //<2F><> |  | ||||||
|     DWORD dwMon;    //<2F><> |  | ||||||
|     DWORD dwDay;    //<2F><> |  | ||||||
|     DWORD dwHour;    //ʱ |  | ||||||
|     DWORD dwMin;    //<2F><> |  | ||||||
|     DWORD dwSec;    //<2F><> |  | ||||||
|     DWORD dwMs;        //<2F><><EFBFBD><EFBFBD> |  | ||||||
| } PLAYM4_SYSTEM_TIME; |  | ||||||
|  |  | ||||||
| //ENCRYPT Info |  | ||||||
| typedef struct{ |  | ||||||
|     long nVideoEncryptType;  //<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     long nAudioEncryptType;  //<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     long nSetSecretKey;      //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ã<EFBFBD>1<EFBFBD><31>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><D4BF>0<EFBFBD><30>ʾû<CABE><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ |  | ||||||
| }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_SetDisplayCallBackYUV(LONG nPort, void (CALLBACK* DisplayCBFun)(DISPLAY_INFO_YUV *pstDisplayInfo), BOOL bTrue, void* pUser); |  | ||||||
| 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 BOOL __stdcall PlayM4_SetOverlayPriInfoFlag(LONG nPort, DWORD nIntelType, BOOL bTrue,const char *pFontPath); |  | ||||||
|  |  | ||||||
| //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); |  | ||||||
|  |  | ||||||
| //PLAYM4_API BOOL __stdcall PlayM4_SetDecodeERC(long nPort, unsigned int nLevel); |  | ||||||
|  |  | ||||||
| #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_     //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ṹ |  | ||||||
| { |  | ||||||
|       int            nSessionInfoType;   //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>SDP<44><50><EFBFBD><EFBFBD><EFBFBD>纣<EFBFBD><E7BAA3>˽<EFBFBD><CBBD><EFBFBD><EFBFBD>Ϣͷ |  | ||||||
|       int            nSessionInfoLen;    //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD> |  | ||||||
|       unsigned char* pSessionInfoData;   //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD> |  | ||||||
|  |  | ||||||
| } 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  //<2F><><EFBFBD><EFBFBD>ת |  | ||||||
| #define R_ANGLE_L90  0  //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת90<39><30> |  | ||||||
| #define R_ANGLE_R90  1  //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת90<39><30> |  | ||||||
| #define R_ANGLE_180  2  //<2F><>ת180<38><30> |  | ||||||
|  |  | ||||||
| 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_     //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ṹ |  | ||||||
| { |  | ||||||
|     BYTE*   pData;            //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     DWORD   dwDatalen;        //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> |  | ||||||
|     DWORD    dwDataType;        //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     DWORD    dwTimeStamp;    //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> |  | ||||||
| } PLAYM4_ADDITION_INFO; |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| //dwGroupIndex <20><>Լ<EFBFBD><D4BC>ȡֵ0~3<><33><EFBFBD><EFBFBD>һ<EFBFBD>汾ȡ<E6B1BE><C8A1>ͬ<EFBFBD><CDAC>ֻ<EFBFBD><D6BB>ͬ<EFBFBD><CDAC>closestream<61><6D><EFBFBD><EFBFBD> |  | ||||||
| PLAYM4_API BOOL __stdcall PlayM4_SetSycGroup(LONG nPort, DWORD dwGroupIndex); |  | ||||||
| //<2F>ݲ<EFBFBD>ʵ<EFBFBD>ִ˺<D6B4><CBBA><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ʼʱ<CABC>䲻һ<E4B2BB>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㣬ͬһ<CDAC><D2BB><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>һ· |  | ||||||
| PLAYM4_API BOOL __stdcall PlayM4_SetSycStartTime(LONG nPort, PLAYM4_SYSTEM_TIME *pstSystemTime); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| // <20><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>صĽӿ<C4BD> |  | ||||||
| #ifndef FISH_EYE_TAG |  | ||||||
| #define FISH_EYE_TAG |  | ||||||
|  |  | ||||||
| // <20><>װ<EFBFBD><D7B0><EFBFBD><EFBFBD> |  | ||||||
| typedef enum tagFECPlaceType |  | ||||||
| { |  | ||||||
|     FEC_PLACE_WALL    = 0x1,        // <20><>װ<EFBFBD><D7B0>ʽ        (<28><><EFBFBD><EFBFBD>ˮƽ) |  | ||||||
|     FEC_PLACE_FLOOR   = 0x2,        // <20><><EFBFBD>氲װ        (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) |  | ||||||
|     FEC_PLACE_CEILING = 0x3,        // <20><>װ<EFBFBD><D7B0>ʽ        (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) |  | ||||||
|  |  | ||||||
| }FECPLACETYPE; |  | ||||||
|  |  | ||||||
| typedef enum tagFECCorrectType |  | ||||||
| { |  | ||||||
|     FEC_CORRECT_PTZ = 0x100,        // PTZ |  | ||||||
|     FEC_CORRECT_180 = 0x200,        // 180<38>Ƚ<EFBFBD><C8BD><EFBFBD>  <20><><EFBFBD><EFBFBD>Ӧ2P<32><50> |  | ||||||
|     FEC_CORRECT_360 = 0x300,        // 360ȫ<30><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ӧ1P<31><50> |  | ||||||
|     FEC_CORRECT_LAT = 0x400         //γ<><CEB3>չ<EFBFBD><D5B9> |  | ||||||
|  |  | ||||||
| }FECCORRECTTYPE; |  | ||||||
|  |  | ||||||
| typedef struct tagCycleParam |  | ||||||
| { |  | ||||||
|     float    fRadiusLeft;    // Բ<><D4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD> |  | ||||||
|     float    fRadiusRight;    // Բ<><D4B2><EFBFBD><EFBFBD><EFBFBD>ұ<EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD> |  | ||||||
|     float   fRadiusTop;        // Բ<><D4B2><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>Y<EFBFBD><59><EFBFBD><EFBFBD> |  | ||||||
|     float   fRadiusBottom;    // Բ<><D4B2><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>Y<EFBFBD><59><EFBFBD><EFBFBD> |  | ||||||
|  |  | ||||||
| }CYCLEPARAM; |  | ||||||
|  |  | ||||||
| typedef struct tagPTZParam |  | ||||||
| { |  | ||||||
|     float fPTZPositionX;        // PTZ <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> X<><58><EFBFBD><EFBFBD> |  | ||||||
|     float fPTZPositionY;        // PTZ <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> Y<><59><EFBFBD><EFBFBD>     |  | ||||||
|  |  | ||||||
| }PTZPARAM; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| /********************************************* |  | ||||||
|       |  | ||||||
|  |  | ||||||
|  ********************************************/ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| // <20><><EFBFBD>±<EFBFBD><C2B1>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|   |  | ||||||
|  |  | ||||||
| #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;            // <20><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|  |  | ||||||
|     unsigned int    nPlaceAndCorrect;        // <20><>װ<EFBFBD><D7B0>ʽ<EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD>ȡ<EFBFBD><C8A1>SetParam<61><6D>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ч,<2C><>ֵ<EFBFBD><D6B5>ʾ<EFBFBD><CABE>װ<EFBFBD><D7B0>ʽ<EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD>ĺ<EFBFBD> |  | ||||||
|  |  | ||||||
|     PTZPARAM        stPTZParam;                // PTZ У<><D0A3><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD> |  | ||||||
|  |  | ||||||
|     CYCLEPARAM        stCycleParam;            // <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>Բ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD> |  | ||||||
|  |  | ||||||
|     float            fZoom;                    // PTZ <20><>ʾ<EFBFBD>ķ<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD> |  | ||||||
|  |  | ||||||
|     float            fWideScanOffset;        // 180<38><30><EFBFBD><EFBFBD>360<36><30>У<EFBFBD><D0A3><EFBFBD><EFBFBD>ƫ<EFBFBD>ƽǶ<C6BD> |  | ||||||
|  |  | ||||||
|     int                nResver[16];            // <20><><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD> |  | ||||||
|  |  | ||||||
| }FISHEYEPARAM; |  | ||||||
|  |  | ||||||
| typedef void (__stdcall * FISHEYE_CallBack )( void* pUser  , unsigned int  nSubPort , unsigned int nCBType , void * hDC ,   unsigned int nWidth , unsigned int nHeight);  |  | ||||||
|  |  | ||||||
| #endif |  | ||||||
| // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| PLAYM4_API BOOL __stdcall PlayM4_FEC_Enable(LONG nPort); |  | ||||||
|  |  | ||||||
| // <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> |  | ||||||
| PLAYM4_API BOOL __stdcall PlayM4_FEC_Disable(LONG nPort); |  | ||||||
|  |  | ||||||
| // <20><>ȡ<EFBFBD><C8A1><EFBFBD>۽<EFBFBD><DBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӷ˿<D3B6> [1~31]  |  | ||||||
| PLAYM4_API BOOL  __stdcall PlayM4_FEC_GetPort(LONG nPort, unsigned int* nSubPort,FECPLACETYPE emPlaceType,FECCORRECTTYPE emCorrectType); |  | ||||||
|  |  | ||||||
| // ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD>۽<EFBFBD><DBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӷ˿<D3B6> |  | ||||||
| PLAYM4_API BOOL __stdcall PlayM4_FEC_DelPort(LONG nPort , unsigned int nSubPort); |  | ||||||
|  |  | ||||||
| // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۽<EFBFBD><DBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| PLAYM4_API BOOL __stdcall PlayM4_FEC_SetParam(LONG nPort , unsigned int nSubPort , FISHEYEPARAM * pPara); |  | ||||||
|  |  | ||||||
| // <20><>ȡ<EFBFBD><C8A1><EFBFBD>۽<EFBFBD><DBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| PLAYM4_API BOOL __stdcall PlayM4_FEC_GetParam(LONG nPort , unsigned int nSubPort , FISHEYEPARAM * pPara); |  | ||||||
|  |  | ||||||
| // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>л<EFBFBD> |  | ||||||
| PLAYM4_API BOOL __stdcall PlayM4_FEC_SetWnd(LONG nPort , unsigned int nSubPort , void * hWnd); |  | ||||||
|  |  | ||||||
| // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۴<EFBFBD><DBB4>ڵĻ<DAB5>ͼ<EFBFBD>ص<EFBFBD> |  | ||||||
| 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); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| //ͼ<><CDBC><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD> |  | ||||||
| #ifndef PLAYM4_HIKVIE_TAG |  | ||||||
| #define PLAYM4_HIKVIE_TAG |  | ||||||
|  |  | ||||||
| typedef struct _PLAYM4_VIE_DYNPARAM_ |  | ||||||
| { |  | ||||||
|     int moduFlag;      //<2F><><EFBFBD>õ<EFBFBD><C3B5>㷨<EFBFBD><E3B7A8><EFBFBD><EFBFBD>ģ<EFBFBD>飬<EFBFBD><E9A3AC>PLAYM4_VIE_MODULES<45>ж<EFBFBD><D0B6><EFBFBD> |  | ||||||
|     //<2F><> PLAYM4_VIE_MODU_ADJ | PLAYM4_VIE_MODU_EHAN |  | ||||||
|     //ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD>ú<C3BA><F3A3ACB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     //PLAYM4_VIE_MODU_ADJ |  | ||||||
|     int brightVal;     //<2F><><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD>ֵ<EFBFBD><D6B5>[-255, 255] |  | ||||||
|     int contrastVal;   //<2F>Աȶȵ<C8B6><C8B5><EFBFBD>ֵ<EFBFBD><D6B5>[-256, 255] |  | ||||||
|     int colorVal;      //<2F><><EFBFBD>Ͷȵ<CDB6><C8B5><EFBFBD>ֵ<EFBFBD><D6B5>[-256, 255] |  | ||||||
|     //PLAYM4_VIE_MODU_EHAN |  | ||||||
|     int toneScale;     //<2F>˲<EFBFBD><CBB2><EFBFBD>Χ<EFBFBD><CEA7>[0, 100] |  | ||||||
|     int toneGain;      //<2F>Աȶȵ<C8B6><C8B5>ڣ<EFBFBD>ȫ<EFBFBD>ֶԱȶ<D4B1><C8B6><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>[-256, 255] |  | ||||||
|     int toneOffset;    //<2F><><EFBFBD>ȵ<EFBFBD><C8B5>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>ֵƫ<D6B5>ƣ<EFBFBD>[-255, 255] |  | ||||||
|     int toneColor;     //<2F><>ɫ<EFBFBD><C9AB><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>[-256, 255] |  | ||||||
|     //PLAYM4_VIE_MODU_DEHAZE |  | ||||||
|     int dehazeLevel;   //ȥ<><C8A5>ǿ<EFBFBD>ȣ<EFBFBD>[0, 255] |  | ||||||
|     int dehazeTrans;   //<><CDB8>ֵ<EFBFBD><D6B5>[0, 255] |  | ||||||
|     int dehazeBright;  //<2F><><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD><EFBFBD>[0, 255] |  | ||||||
|     //PLAYM4_VIE_MODU_DENOISE |  | ||||||
|     int denoiseLevel;  //ȥ<><C8A5>ǿ<EFBFBD>ȣ<EFBFBD>[0, 255] |  | ||||||
|     //PLAYM4_VIE_MODU_SHARPEN |  | ||||||
|     int usmAmount;     //<2F><><EFBFBD><EFBFBD>ǿ<EFBFBD>ȣ<EFBFBD>[0, 255] |  | ||||||
|     int usmRadius;     //<2F>뾶<F1BBAFB0><EBBEB6>[1, 15] |  | ||||||
|     int usmThreshold;  //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>[0, 255] |  | ||||||
|     //PLAYM4_VIE_MODU_DEBLOCK |  | ||||||
|     int deblockLevel;  //ȥ<><C8A5>ǿ<EFBFBD>ȣ<EFBFBD>[0, 100] |  | ||||||
|     //PLAYM4_VIE_MODU_LENS |  | ||||||
|     int lensWarp;      //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[-256, 255] |  | ||||||
|     int lensZoom;      //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[-256, 255] |  | ||||||
|     //PLAYM4_VIE_MODU_CRB |  | ||||||
|     //<2F><><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD> |  | ||||||
| } PLAYM4_VIE_PARACONFIG; |  | ||||||
|  |  | ||||||
| typedef enum _PLAYM4_VIE_MODULES |  | ||||||
| { |  | ||||||
|     PLAYM4_VIE_MODU_ADJ      = 0x00000001, //ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     PLAYM4_VIE_MODU_EHAN     = 0x00000002, //<2F>ֲ<EFBFBD><D6B2><EFBFBD>ǿģ<C7BF><C4A3> |  | ||||||
|     PLAYM4_VIE_MODU_DEHAZE   = 0x00000004, //ȥ<><C8A5>ģ<EFBFBD><C4A3> |  | ||||||
|     PLAYM4_VIE_MODU_DENOISE  = 0x00000008, //ȥ<><C8A5>ģ<EFBFBD><C4A3> |  | ||||||
|     PLAYM4_VIE_MODU_SHARPEN  = 0x00000010, //<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> |  | ||||||
|     PLAYM4_VIE_MODU_DEBLOCK  = 0x00000020, //ȥ<><C8A5><EFBFBD>˲<EFBFBD>ģ<EFBFBD><C4A3> |  | ||||||
|     PLAYM4_VIE_MODU_CRB      = 0x00000040, //ɫ<><C9AB>ƽ<EFBFBD><C6BD>ģ<EFBFBD><C4A3> |  | ||||||
|     PLAYM4_VIE_MODU_LENS     = 0x00000080, //<2F><>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> |  | ||||||
| }PLAYM4_VIE_MODULES; |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| //<2F><><EFBFBD>ùر<C3B9>/<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> |  | ||||||
| //dwModuFlag<61><67>ӦPLAYM4_VIE_MODULES<45><53>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>鿪<EFBFBD><E9BFAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϵIJ<CFB5><C4B2><EFBFBD>; |  | ||||||
| //<2F>ر<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD>õIJ<C3B5><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| //<2F><><EFBFBD><EFBFBD><EFBFBD>ӿڵ<D3BF><DAB5>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸýӿڿ<D3BF><DABF><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><F3A3BBB7><EFBFBD><F2A3ACB7>ش<EFBFBD><D8B4><EFBFBD> |  | ||||||
| PLAYM4_API BOOL __stdcall PlayM4_VIE_SetModuConfig(LONG lPort,int nModuFlag,BOOL bEnable); |  | ||||||
|  |  | ||||||
| //<2F><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULLȫͼ<C8AB><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫͼ<C8AB><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫͼ<C8AB><CDBC><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>16*16<31><36><EFBFBD><EFBFBD> |  | ||||||
| //<2F><>֧<EFBFBD><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD>˵4<CBB5><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>汾<EFBFBD><E6B1BE><EFBFBD><EFBFBD>ֻ֧<D6BB><D6A7>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5>ͱ<EFBFBD><CDB1><EFBFBD> |  | ||||||
| PLAYM4_API BOOL __stdcall PlayM4_VIE_SetRegion(LONG lPort,LONG lRegNum,RECT* pRect); |  | ||||||
|  |  | ||||||
| //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> |  | ||||||
| PLAYM4_API BOOL __stdcall PlayM4_VIE_GetModuConfig(LONG lPort,int* pdwModuFlag); |  | ||||||
|  |  | ||||||
| //<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD> |  | ||||||
| //δ<><CEB4><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| PLAYM4_API BOOL __stdcall PlayM4_VIE_SetParaConfig(LONG lPort,PLAYM4_VIE_PARACONFIG* pParaConfig); |  | ||||||
|  |  | ||||||
| //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD> |  | ||||||
| PLAYM4_API BOOL __stdcall PlayM4_VIE_GetParaConfig(LONG lPort,PLAYM4_VIE_PARACONFIG* pParaConfig); |  | ||||||
|  |  | ||||||
| //<2F><><EFBFBD><EFBFBD>Ƶͬ<C6B5><CDAC><EFBFBD>ӿ<EFBFBD> |  | ||||||
| PLAYM4_API BOOL __stdcall PlayM4_SyncToAudio(LONG nPort, BOOL bSyncToAudio); |  | ||||||
|  |  | ||||||
| // ˽<><CBBD><EFBFBD><EFBFBD>Ϣģ<CFA2><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| typedef enum _PLAYM4_PRIDATA_RENDER |  | ||||||
| {     |  | ||||||
|     PLAYM4_RENDER_ANA_INTEL_DATA   = 0x00000001, //<2F><><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD> |  | ||||||
|     PLAYM4_RENDER_MD               = 0x00000002, //<2F>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     PLAYM4_RENDER_ADD_POS          = 0x00000004, //POS<4F><53>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>         |  | ||||||
|     PLAYM4_RENDER_ADD_PIC          = 0x00000008, //ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD> |  | ||||||
|     PLAYM4_RENDER_FIRE_DETCET      = 0x00000010,  //<2F>ȳ<EFBFBD><C8B3><EFBFBD><EFBFBD><EFBFBD>Ϣ |  | ||||||
|     PLAYM4_RENDER_TEM              = 0x00000020,   //<2F>¶<EFBFBD><C2B6><EFBFBD>Ϣ |  | ||||||
|     PLAYM4_RENDER_TRACK_TEM        = 0x00000040,    //<2F>켣<EFBFBD><ECBCA3>Ϣ |  | ||||||
|     PLAYM4_RENDER_THERMAL          = 0x00000080 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̻<EFBFBD><CCBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ |  | ||||||
| }PLAYM4_PRIDATA_RENDER; |  | ||||||
|  |  | ||||||
| typedef enum _PLAYM4_THERMAL_FLAG |  | ||||||
| { |  | ||||||
|     PLAYM4_THERMAL_FIREMASK = 0x00000001, //<2F>̻<EFBFBD><CCBB><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     PLAYM4_THERMAL_RULEGAS = 0x00000002, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     PLAYM4_THERMAL_TARGETGAS = 0x00000004 //Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| }PLAYM4_THERMAL_FLAG; |  | ||||||
|  |  | ||||||
| typedef enum _PLAYM4_FIRE_ALARM{ |  | ||||||
|     PLAYM4_FIRE_FRAME_DIS           = 0x00000001, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ |  | ||||||
|     PLAYM4_FIRE_MAX_TEMP            = 0x00000002, //<2F><><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD> |  | ||||||
|     PLAYM4_FIRE_MAX_TEMP_POSITION   = 0x00000004, //<2F><><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>ʾ |  | ||||||
|     PLAYM4_FIRE_DISTANCE            = 0x00000008, //<2F><><EFBFBD><EFBFBD><EFBFBD>¶Ⱦ<C2B6><C8BE><EFBFBD>}PLAYM4_FIRE_ALARM |  | ||||||
| }PLAYM4_FIRE_ALARM; |  | ||||||
|  |  | ||||||
| typedef enum _PLAYM4_TEM_FLAG{ |  | ||||||
|     PLAYM4_TEM_REGION_BOX           = 0x00000001, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     PLAYM4_TEM_REGION_LINE          = 0x00000002, //<2F>߲<EFBFBD><DFB2><EFBFBD> |  | ||||||
|     PLAYM4_TEM_REGION_POINT         = 0x00000004, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}PLAYM4_TEM_FLAG |  | ||||||
| }PLAYM4_TEM_FLAG; |  | ||||||
|  |  | ||||||
| typedef enum _PLAYM4_TRACK_FLAG |  | ||||||
| { |  | ||||||
|     PLAYM4_TRACK_PEOPLE = 0x00000001, //<2F>˹켣 |  | ||||||
|     PLAYM4_TRACK_VEHICLE = 0x00000002, //<2F><><EFBFBD>켣 |  | ||||||
| }PLAYM4_TRACK_FLAG; |  | ||||||
|  |  | ||||||
| typedef struct TI_PTZ_INFO_ |  | ||||||
| { |  | ||||||
|     unsigned short dwDefVer;    //<2F>ṹ<EFBFBD><E1B9B9><EFBFBD>汾 |  | ||||||
|     unsigned short dwLength;    //PTZ_info<66><6F><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>8<EFBFBD>ֽ<EFBFBD>Ϊ<EFBFBD><CEAA>λ |  | ||||||
|     DWORD          dwP;    //P<><50>0~3600<30><30> |  | ||||||
|     DWORD          dwT;         //T<><54>0~3600<30><30> |  | ||||||
|     DWORD          dwZ;         //Z<><5A>0~3600<30><30> |  | ||||||
|     BYTE        chFSMState; //<2F><><EFBFBD><EFBFBD>״̬ |  | ||||||
|     BYTE           bClearFocusState; //<2F>۽<EFBFBD><DBBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>0,1<><31> |  | ||||||
|     BYTE        reserved[6]; //6<><36><EFBFBD>ֽڱ<D6BD><DAB1><EFBFBD> |  | ||||||
| }PTZ_INFO; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD> |  | ||||||
| PLAYM4_API BOOL __stdcall PlayM4_RenderPrivateData(LONG nPort, int nIntelType, BOOL bTrue); |  | ||||||
|  |  | ||||||
| PLAYM4_API BOOL __stdcall PlayM4_RenderPrivateDataEx(LONG nPort, int nIntelType, int nSubType, BOOL bTrue); |  | ||||||
|  |  | ||||||
| // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>,nType=0<><30>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD><DCB1><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>仯<EFBFBD>ͻص<CDBB><D8B5><EFBFBD>nType=1<><31>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD> |  | ||||||
| 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 <20><>ʾ<EFBFBD><CABE>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0>ʾ֡PTZ<54><5A>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD>ʽ<EFBFBD>洢<EFBFBD><E6B4A2>pInfo<66>ڣ<EFBFBD>plLen<65><6E><EFBFBD>س<EFBFBD><D8B3><EFBFBD><EFBFBD><EFBFBD>Ϣ |  | ||||||
| PLAYM4_API BOOL __stdcall PlayM4_GetStreamAdditionalInfo(LONG nPort, LONG lType, BYTE* pInfo, LONG* plLen); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #endif //_PLAYM4_H_ |  | ||||||
| @@ -1,111 +0,0 @@ | |||||||
| #ifndef DATA_TYPE_H |  | ||||||
| #define DATA_TYPE_H |  | ||||||
| #define FRAME_HEAD_MAGIC 0x03211546  |  | ||||||
| #define SYSTEM_SYNC_ID    2 |  | ||||||
|  |  | ||||||
| #ifdef __LINUX__ |  | ||||||
| typedef unsigned char            UCHAR; |  | ||||||
| typedef unsigned char*          PBYTE; |  | ||||||
| typedef char*                    LPTSTR; |  | ||||||
| typedef    unsigned short             USHORT; |  | ||||||
| typedef int                     HANDLE; |  | ||||||
| typedef unsigned long           ULONG; |  | ||||||
| typedef unsigned long           DWORD; |  | ||||||
| #endif //#ifdef __LINUX__ |  | ||||||
|  |  | ||||||
| typedef struct tagFrameInfo{ |  | ||||||
|     ULONG    SyncId; /* 00000000000000000000000000010b */ |  | ||||||
|     ULONG    Magic; |  | ||||||
|     USHORT    FrameType; /* I frames , P frames or BBP frames Audio frames or dsp status etc */ |  | ||||||
|     ULONG    Length; /*lenth include this header */ |  | ||||||
|     ULONG    FrameNumber; /* serial number of this frame */ |  | ||||||
|     UCHAR    Breakable; /* indicate if stream breakable, you could restart new file(with PktSysHeader) if true */ |  | ||||||
|     /*ULONG   Ack;*/ |  | ||||||
|     ULONG    PTS; /* system clock when this frames is processed */ |  | ||||||
| }TMFRAME_HEADER, *PTMFRAME_HEADER; |  | ||||||
|  |  | ||||||
| typedef enum { |  | ||||||
|    StandardNone                   = 0x80000000, |  | ||||||
|    StandardNTSC                   = 0x00000001, |  | ||||||
|    StandardPAL                    = 0x00000002, |  | ||||||
|    StandardSECAM                  = 0x00000004, |  | ||||||
| } VideoStandard_t;                |  | ||||||
|  |  | ||||||
|  |  | ||||||
| typedef enum { |  | ||||||
|     PktError = 0, |  | ||||||
|     PktIFrames = 0x0001, |  | ||||||
|     PktPFrames = 0x0002, |  | ||||||
|     PktBBPFrames = 0x0004, |  | ||||||
|     PktAudioFrames = 0x0008, |  | ||||||
|     PktMotionDetection = 0x00010, |  | ||||||
|     PktDspStatus = 0x00020, |  | ||||||
|     PktOrigImage = 0x00040, |  | ||||||
|     PktSysHeader = 0x00080, |  | ||||||
|     PktBPFrames = 0x00100, |  | ||||||
|     PktSFrames = 0x00200, |  | ||||||
|     PktSubIFrames = 0x00400, |  | ||||||
|     PktSubPFrames = 0x00800, |  | ||||||
|     PktSubBBPFrames = 0x01000, |  | ||||||
|     PktSubSysHeader = 0x02000 |  | ||||||
| }FrameType_t; |  | ||||||
|  |  | ||||||
| typedef struct tagVersion{ |  | ||||||
|     ULONG DspVersion, DspBuildNum; |  | ||||||
|     ULONG DriverVersion, DriverBuildNum; |  | ||||||
|     ULONG SDKVersion, SDKBuildNum; |  | ||||||
| }VERSION_INFO, *PVERSION_INFO; |  | ||||||
|  |  | ||||||
| typedef enum { |  | ||||||
|     ENC_CIF_FORMAT = 0, |  | ||||||
|     ENC_QCIF_FORMAT = 1, |  | ||||||
|     ENC_2CIF_FORMAT = 2, |  | ||||||
|     ENC_4CIF_FORMAT = 3, |  | ||||||
|     ENC_QQCIF_FORMAT = 4, |  | ||||||
|     ENC_CIFQCIF_FORMAT =5, |  | ||||||
|     ENC_CIFQQCIF_FORMAT =6, |  | ||||||
|     ENC_DCIF_FORMAT =7, |  | ||||||
|     ENC_VGA_FORMAT=8 |  | ||||||
| }PictureFormat_t; |  | ||||||
|      |  | ||||||
| typedef struct tagMotionData{ |  | ||||||
|     PictureFormat_t PicFormat; |  | ||||||
|     ULONG HorizeBlocks; |  | ||||||
|     ULONG VerticalBlocks; |  | ||||||
|     ULONG BlockSize; |  | ||||||
| }MOTION_DATA_HEADER, *PMOTION_DATA_HEADER; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #define _OSD_BASE            0x9000                /*base address of special character*/ |  | ||||||
| #define    _OSD_YEAR4            (_OSD_BASE+0)        /*show year time by length of 4 , for example: 2005*/ |  | ||||||
| #define _OSD_YEAR2            (_OSD_BASE+1)        /*show year time by length of 2, for example: 05    */ |  | ||||||
| #define _OSD_MONTH3            (_OSD_BASE+2)        /*show month time in English, for example: Jan*/ |  | ||||||
| #define _OSD_MONTH2            (_OSD_BASE+3)        /*show month time by two Arabic numerals, for example: 07*/ |  | ||||||
| #define _OSD_DAY            (_OSD_BASE+4)        /*show day time by two Arabic numerals, for example: 31*/ |  | ||||||
| #define _OSD_WEEK3            (_OSD_BASE+5)        /*show week time in English: MON<4F><4E>SUN*/ |  | ||||||
| #define    _OSD_CWEEK1            (_OSD_BASE+6)        /*show week time in Chinese GB code*/ |  | ||||||
| #define    _OSD_HOUR24            (_OSD_BASE+7)        /*show 24 hours clock: 00<30><30>23    */ |  | ||||||
| #define    _OSD_HOUR12            (_OSD_BASE+8)        /*show 12 hours clock: 00<30><30>12*/ |  | ||||||
| #define    _OSD_MINUTE            (_OSD_BASE+9)        /*show minute time by length of 2: 00<30><30>59*/ |  | ||||||
| #define _OSD_SECOND            (_OSD_BASE+10)        /*show second time by length of 2: 00<30><30>59*/ |  | ||||||
| #define _OSD_MILISECOND        (_OSD_BASE+11)        /*show millisecond time by length of 3: 000~999*/ |  | ||||||
| #define _OSD_APM            (_OSD_BASE+14)        /*show a.m. or p.m. by length of 2 bit, AM or PM*/ |  | ||||||
|  |  | ||||||
| //For new added APIs to set OSD: SetEncoderOsdDisplayMode, SetDecoderOsdDisplayMode and SetDisplayOsdDisplayMode in v6.0 SDK, we use new basic address of special character. |  | ||||||
| #define _OSD_BASE_EX        0x90000                /*base address of special character*/ |  | ||||||
| #define    _OSD_YEAR4_EX        (_OSD_BASE_EX+0)    /*the same as _OSD_YEAR4*/ |  | ||||||
| #define _OSD_YEAR2_EX        (_OSD_BASE_EX+1)    /*the same as _OSD_YEAR2*/ |  | ||||||
| #define _OSD_MONTH3_EX        (_OSD_BASE_EX+2)    /*the same as _OSD_MONTH3*/ |  | ||||||
| #define _OSD_MONTH2_EX        (_OSD_BASE_EX+3)    /*the same as _OSD_MONTH2*/ |  | ||||||
| #define _OSD_DAY_EX            (_OSD_BASE_EX+4)    /*the same as _OSD_DAY*/ |  | ||||||
| #define _OSD_WEEK3_EX        (_OSD_BASE_EX+5)    /*the same as _OSD_WEEK3*/ |  | ||||||
| #define    _OSD_CWEEK1_EX        (_OSD_BASE_EX+6)    /*the same as _OSD_CWEEK1*/ |  | ||||||
| #define    _OSD_HOUR24_EX        (_OSD_BASE_EX+7)    /*the same as _OSD_HOUR24*/ |  | ||||||
| #define    _OSD_HOUR12_EX        (_OSD_BASE_EX+8)    /*the same as _OSD_HOUR12*/ |  | ||||||
| #define    _OSD_MINUTE_EX        (_OSD_BASE_EX+9)    /*the same as _OSD_MINUTE*/ |  | ||||||
| #define _OSD_SECOND_EX        (_OSD_BASE_EX+10)    /*the same as _OSD_SECOND*/ |  | ||||||
| #define _OSD_MILISECOND_EX    (_OSD_BASE_EX+11)    /*the same as _OSD_MILISECOND*/ |  | ||||||
| #define _OSD_APM_EX            (_OSD_BASE_EX+14)    /*the same as _OSD_APM*/ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #endif |  | ||||||
| @@ -1,451 +0,0 @@ | |||||||
| /////////////////////////////////////////////////////////////////////////// |  | ||||||
| // DS-40xxHC/HF BOARD SYSTEM SDK                     //     |  | ||||||
| ///////////////////////////////////////////////////////////////////////////  |  | ||||||
|  |  | ||||||
| #ifndef DECODECARD_SDK_H |  | ||||||
| #define DECODECARD_SDK_H |  | ||||||
|  |  | ||||||
| #include "datatype.h" |  | ||||||
|  |  | ||||||
| #define DLLEXPORT_API  extern "C" __declspec(dllexport) |  | ||||||
| #define ERR_WAIT_TIMEOUT                0xc0000001 |  | ||||||
| #define ERR_INVALID_HANDLE                0xc0000002 |  | ||||||
| #define ERR_INVALID_ARGUMENT                0xc0000003 |  | ||||||
| #define ERR_DDRAW_CREATE_FAILED                0xc0000004 |  | ||||||
| #define ERR_DDRAW_CAPS_FAULT                0xc0000005 |  | ||||||
| #define ERR_SET_COOPERATIVELEVEL_FAILED            0xc0000006 |  | ||||||
| #define ERR_PRIMARY_SURFACE_CREATE_FAILED        0xc0000007 |  | ||||||
| #define ERR_GET_OVERLAY_ADDRESS_FAILED            0xc0000008 |  | ||||||
| #define ERR_OVERLAY_SURFACE_CREATE_FAILED        0xc0000009 |  | ||||||
| #define ERR_OVERLAY_UPDATE_FAILED            0xc000000a |  | ||||||
| #define ERR_TMMAN_FAILURE                0xc000000b |  | ||||||
| #define ERR_CHANNELMAGIC_MISMATCH            0xc000000c |  | ||||||
| #define ERR_CALLBACK_REGISTERED                0xc000000d |  | ||||||
| #define ERR_QUEUE_OVERFLOW                0xc000000e |  | ||||||
| #define ERR_STREAM_THREAD_FAILURE            0xc000000f |  | ||||||
| #define ERR_THREAD_STOP_ERROR                0xc0000010 |  | ||||||
| #define ERR_NOT_SUPPORT                    0xc0000011 |  | ||||||
| #define ERR_OUTOF_MEMORY                0xc0000012 |  | ||||||
| #define ERR_DSP_BUSY                    0xc0000013 |  | ||||||
| #define ERR_DATA_ERROR                    0xc0000014 |  | ||||||
| #define ERR_KERNEL                    0xc0000016 |  | ||||||
| #define ERR_OFFSCREEN_CREATE_FAILED            0xc0000017 |  | ||||||
| #define ERR_MULTICLOCK_FAILURE                0xc0000018 |  | ||||||
| #define ERR_INVALID_DEVICE                0xc0000019 |  | ||||||
| #define ERR_INVALID_DRIVER                0xc000001a |  | ||||||
| //error code for MD card |  | ||||||
| #define HWERR_SUCCESS                        0 |  | ||||||
| #define HWERR_ALLOCATE_MEMORY                0xc1000001 |  | ||||||
| #define HWERR_INVALID_HANDLE                0xc1000002 |  | ||||||
| #define HWERR_DDRAW_CREATE_FAILED            0xc1000003 |  | ||||||
| #define HWERR_DDRAW_CAPS_FAULT                0xc1000004 |  | ||||||
| #define HWERR_SET_COOPERATIVELEVEL_FAILED        0xc1000005 |  | ||||||
| #define HWERR_PRIMARY_SURFACE_CREATE_FAILED        0xc1000006 |  | ||||||
| #define HWERR_OVERLAY_CREATE_FAILED            0xc1000007 |  | ||||||
| #define HWERR_GET_OVERLAY_ADDRESS_FAILED        0xc1000008 |  | ||||||
| #define HWERR_OVERLAY_UPDATE_FAILED            0xc1000009 |  | ||||||
| #define HWERR_SURFACE_NULL                0xc100000a |  | ||||||
| #define HWERR_FILEHEADER_UNKNOWN            0xc100000b |  | ||||||
| #define HWERR_CREATE_FILE_FAILED            0xc100000c |  | ||||||
| #define HWERR_FILE_SIZE_ZERO                0xc100000d |  | ||||||
| #define HWERR_FILE_SIZE_INVALID                0xc100000d |  | ||||||
| #define HWERR_CREATE_OBJ_FAILED                0xc100000e |  | ||||||
| #define HWERR_CHANNELMAGIC_MISMATCH            0xc100000f |  | ||||||
| #define HWERR_PARA_OVER                    0xc1000010 |  | ||||||
| #define HWERR_ORDER                    0xc1000011 |  | ||||||
| #define HWERR_COMMAND                    0xc1000012 |  | ||||||
| #define HWERR_UNSUPPORTED                0xc1000013 |  | ||||||
| #define HWERR_DSPOPEN                    0xc1000014 |  | ||||||
| #define HWERR_DSPLOAD                    0xc1000015 |  | ||||||
| #define HWERR_ALLOCATE_DSPMEMORY            0xc1000016 |  | ||||||
| #define HWERR_DSPCHECHER                0xc1000017 |  | ||||||
| #define HWERR_IMGFILE_UNKNOWN                0xc1000018 |  | ||||||
| #define HWERR_INVALID_FILE                0xc1000019 |  | ||||||
| //standart |  | ||||||
| #define HW_PAL                            2 |  | ||||||
| #define HW_NTSC                            1 |  | ||||||
| //jump direction |  | ||||||
| #define HW_JUMP_FORWARD                    309  |  | ||||||
| #define HW_JUMP_BACKWARD                310 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| typedef enum tagTypeVideoFormat |  | ||||||
| { |  | ||||||
|    vdfRGB8A_233              = 0x00000001, |  | ||||||
|    vdfRGB8R_332              = 0x00000002, |  | ||||||
|    vdfRGB15Alpha             = 0x00000004, |  | ||||||
|    vdfRGB16                  = 0x00000008, |  | ||||||
|    vdfRGB24                  = 0x00000010, |  | ||||||
|    vdfRGB24Alpha             = 0x00000020, |  | ||||||
|     |  | ||||||
|    vdfYUV420Planar           = 0x00000040, |  | ||||||
|    vdfYUV422Planar           = 0x00000080, |  | ||||||
|    vdfYUV411Planar           = 0x00000100, |  | ||||||
|    vdfYUV420Interspersed     = 0x00000200, |  | ||||||
|    vdfYUV422Interspersed     = 0x00000400, |  | ||||||
|    vdfYUV411Interspersed     = 0x00000800, |  | ||||||
|    vdfYUV422Sequence         = 0x00001000,   /* U0, Y0, V0, Y1:  For VO overlay */ |  | ||||||
|    vdfYUV422SequenceAlpha    = 0x00002000,    |  | ||||||
|    /* U0, Y0, V0, Y1:  For VO overlay, with low bit for alpha blending */ |  | ||||||
|    vdfMono                   = 0x00004000,  /* 8 bit monochrome */ |  | ||||||
|  |  | ||||||
|    vdfYUV444Planar           = 0x00008000, |  | ||||||
| }TypeVideoFormat; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| typedef enum _BitrateControlType_t |  | ||||||
| { |  | ||||||
|     brCBR = 0, |  | ||||||
|     brVBR = 1, |  | ||||||
| }BitrateControlType_t; |  | ||||||
|  |  | ||||||
| typedef enum _BOARD_TYPE_DS |  | ||||||
| { |  | ||||||
|     DS400XM             =0, |  | ||||||
|     DS400XH                =1, |  | ||||||
|     DS4004HC            =2, |  | ||||||
|     DS4008HC            =3, |  | ||||||
|     DS4016HC            =4, |  | ||||||
|     DS4001HF            =5, |  | ||||||
|     DS4004HF            =6, |  | ||||||
|     DS4002MD            =7, |  | ||||||
|     DS4004MD            =8,        //4004MD |  | ||||||
|     DS4016HCS            =9,        //4016HCS |  | ||||||
|     DS4002HT            =10,    //4002HT |  | ||||||
|     DS4004HT            =11,    //4004HT |  | ||||||
|     DS4008HT            =12,    //4008HT |  | ||||||
|     DS4004HC_PLUS        =13,    //4004HC+ |  | ||||||
|     DS4008HC_PLUS        =14,    //4008HC+ |  | ||||||
|     DS4016HC_PLUS        =15,    //4016HC+ |  | ||||||
|     DS4008HF            =16,    //4008HF |  | ||||||
|     DS4008MD            =17,    //4008MD |  | ||||||
|     DS4008HS            =18,    //4008HS |  | ||||||
|     DS4016HS            =19,    //4016HS |  | ||||||
|     INVALID_BOARD_TYPE    =0xffffffff, |  | ||||||
| }BOARD_TYPE_DS; |  | ||||||
|  |  | ||||||
| #define STREAM_TYPE_VIDEO    1 |  | ||||||
| #define STREAM_TYPE_AUDIO    2 |  | ||||||
| #define STREAM_TYPE_AVSYNC    3 |  | ||||||
| #define DRAWFUN(x)                void  (CALLBACK* x)(long nPort,HDC hDc,LONG nUser) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| typedef void (*LOGRECORD_CALLBACK)(char *str, void *context); |  | ||||||
| typedef int (*STREAM_READ_CALLBACK)(ULONG channelNumber, void *context); |  | ||||||
| typedef int (*STREAM_DIRECT_READ_CALLBACK)(ULONG channelNumber,void *DataBuf,DWORD Length,int FrameType,void *context); |  | ||||||
|  |  | ||||||
| typedef struct tagChannelCapability{ |  | ||||||
|     UCHAR bAudioPreview; |  | ||||||
|     UCHAR bAlarmIO; |  | ||||||
|     UCHAR bWatchDog; |  | ||||||
| }CHANNEL_CAPABILITY, *PCHANNEL_CAPABILITY; |  | ||||||
|  |  | ||||||
| typedef struct tagFramsStatistics{ |  | ||||||
|     ULONG VideoFrames; |  | ||||||
|     ULONG AudioFrames; |  | ||||||
|     ULONG FramesLost; |  | ||||||
|     ULONG QueueOverflow; |  | ||||||
|     ULONG CurBps; |  | ||||||
| }FRAMES_STATISTICS, *PFRAMES_STATISTICS; |  | ||||||
|  |  | ||||||
| DLLEXPORT_API int __stdcall InitDSPs(); |  | ||||||
| DLLEXPORT_API int __stdcall DeInitDSPs(); |  | ||||||
| DLLEXPORT_API HANDLE __stdcall ChannelOpen(int ChannelNum); |  | ||||||
| DLLEXPORT_API int __stdcall ChannelClose(HANDLE hChannelHandle); |  | ||||||
| DLLEXPORT_API int __stdcall GetTotalChannels(); |  | ||||||
| DLLEXPORT_API int __stdcall GetTotalDSPs(); |  | ||||||
| DLLEXPORT_API int __stdcall StartVideoPreview(HANDLE hChannelHandle,HWND WndHandle, RECT *rect, BOOLEAN bOverlay, int VideoFormat, int FrameRate); |  | ||||||
| DLLEXPORT_API int __stdcall StopVideoPreview(HANDLE hChannelHandle); |  | ||||||
| DLLEXPORT_API int __stdcall SetVideoPara(HANDLE hChannelHandle, int Brightness, int Contrast, int Saturation, int Hue); |  | ||||||
| DLLEXPORT_API int __stdcall GetVideoPara(HANDLE hChannelHandle, VideoStandard_t *VideoStandard, int *Brightness, int *Contrast, int *Saturation, int *Hue); |  | ||||||
| DLLEXPORT_API int __stdcall GetVideoSignal(HANDLE  hChannelHandle); |  | ||||||
| DLLEXPORT_API int __stdcall GetSDKVersion(PVERSION_INFO VersionInfo); |  | ||||||
| DLLEXPORT_API int __stdcall GetCapability(HANDLE hChannelHandle, CHANNEL_CAPABILITY *Capability); |  | ||||||
| DLLEXPORT_API int __stdcall GetLastErrorNum(HANDLE hChannelHandle, ULONG *DspError, ULONG *SdkError); |  | ||||||
| DLLEXPORT_API int __stdcall SetStreamType(HANDLE hChannelHandle, USHORT Type); |  | ||||||
| DLLEXPORT_API int __stdcall GetStreamType(HANDLE hChannelHandle, USHORT *StreamType); |  | ||||||
| DLLEXPORT_API int __stdcall GetFramesStatistics(HANDLE hChannelHandle,     PFRAMES_STATISTICS framesStatistics); |  | ||||||
| DLLEXPORT_API int __stdcall StartMotionDetection(HANDLE hChannelHandle); |  | ||||||
| DLLEXPORT_API int __stdcall GetBoardInfo(HANDLE hChannelHandle, ULONG *BoardType, UCHAR *SerialNo); |  | ||||||
| DLLEXPORT_API int __stdcall StopMotionDetection(HANDLE hChannelHandle); |  | ||||||
| DLLEXPORT_API int __stdcall GetOriginalImage(HANDLE hChannelHandle, UCHAR *ImageBuf, ULONG *Size); |  | ||||||
| DLLEXPORT_API int __stdcall RegisterLogRecordCallback(LOGRECORD_CALLBACK LogRecordFunc, void *Context); |  | ||||||
| DLLEXPORT_API int __stdcall SetAudioPreview(HANDLE hChannelHandle, BOOL bEnable); |  | ||||||
| DLLEXPORT_API int __stdcall ReadStreamData(HANDLE hChannelHandle, void *DataBuf, DWORD *Length, int *FrameType); |  | ||||||
| DLLEXPORT_API int __stdcall RegisterMessageNotifyHandle(HWND hWnd, UINT MessageId); |  | ||||||
| DLLEXPORT_API int __stdcall StartVideoCapture(HANDLE hChannelHandle); |  | ||||||
| DLLEXPORT_API int __stdcall StopVideoCapture(HANDLE hChannelHandle); |  | ||||||
| DLLEXPORT_API int __stdcall SetIBPMode(HANDLE hChannelHandle, int KeyFrameIntervals, int BFrames, int PFrames, int FrameRate); |  | ||||||
| DLLEXPORT_API int __stdcall SetDefaultQuant(HANDLE hChannelHandle, int IQuantVal, int PQuantVal, int BQuantVal); |  | ||||||
| DLLEXPORT_API int __stdcall SetOsd(HANDLE hChannelHandle, BOOL Enable); |  | ||||||
|  |  | ||||||
| DLLEXPORT_API int __stdcall SetLogo(HANDLE hChannelHandle, int x, int y, int w, int h, unsigned char *yuv); |  | ||||||
| DLLEXPORT_API int __stdcall StopLogo(HANDLE hChannelHandle); |  | ||||||
| DLLEXPORT_API int __stdcall SetupMotionDetection(HANDLE hChannelHandle, RECT *RectList, int iAreas); |  | ||||||
| DLLEXPORT_API int __stdcall MotionAnalyzer(HANDLE hChannelHandle, char *MotionData, int iThreshold, int *iResult); |  | ||||||
| DLLEXPORT_API int __stdcall LoadYUVFromBmpFile(char *FileName, unsigned char *yuv, int BufLen, int *Width, int *Height); |  | ||||||
| DLLEXPORT_API int __stdcall SaveYUVToBmpFile(char *FileName, unsigned char *yuv, int Width, int Height); |  | ||||||
| DLLEXPORT_API int __stdcall CaptureIFrame(HANDLE hChannelHandle); |  | ||||||
| DLLEXPORT_API int __stdcall RegisterStreamReadCallback(STREAM_READ_CALLBACK StreamReadCallback, void *Context); |  | ||||||
| DLLEXPORT_API int __stdcall AdjustMotionDetectPrecision(HANDLE hChannelHandle,  |  | ||||||
|                                            int iGrade, int iFastMotionDetectFps,  |  | ||||||
|                                            int iSlowMotionDetectFps); |  | ||||||
| DLLEXPORT_API int __stdcall SetupBitrateControl(HANDLE hChannelHandle, ULONG MaxBps); |  | ||||||
| DLLEXPORT_API int __stdcall SetOverlayColorKey(COLORREF DestColorKey); |  | ||||||
| DLLEXPORT_API int __stdcall SetOsdDisplayMode(HANDLE hChannelHandle, int Brightness, BOOL Translucent, int parameter, USHORT *Format1, USHORT *Format2); |  | ||||||
| DLLEXPORT_API int __stdcall SetLogoDisplayMode(HANDLE hChannelHandle, COLORREF ColorKey, BOOL Translucent, int TwinkleInterval); |  | ||||||
| DLLEXPORT_API int __stdcall SetEncoderPictureFormat(HANDLE hChannelHandle, PictureFormat_t PictureFormat); |  | ||||||
| DLLEXPORT_API int __stdcall SetVideoStandard(HANDLE hChannelHandle, VideoStandard_t VideoStandard); |  | ||||||
| DLLEXPORT_API int __stdcall RestoreOverlay(); |  | ||||||
| DLLEXPORT_API int __stdcall ResetDSP(int DspNumber); |  | ||||||
| DLLEXPORT_API int __stdcall GetSoundLevel(HANDLE hChannelHandle); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| DLLEXPORT_API int __stdcall SetBitrateControlMode(HANDLE hChannelHandle, BitrateControlType_t brc); |  | ||||||
| DLLEXPORT_API int __stdcall SetupNotifyThreshold(HANDLE hChannelHandle, int iFramesThreshold); |  | ||||||
|  |  | ||||||
| DLLEXPORT_API int __stdcall SetupSubChannel(HANDLE hChannelHandle, int iSubChannel); |  | ||||||
| DLLEXPORT_API int __stdcall GetSubChannelStreamType(void  *DataBuf, int FrameType); |  | ||||||
| //add for HC/HF  |  | ||||||
| DLLEXPORT_API int __stdcall RegisterStreamDirectReadCallback(STREAM_DIRECT_READ_CALLBACK StreamDirectReadCallback,void *Context); |  | ||||||
| DLLEXPORT_API int __stdcall RegisterDrawFun(DWORD nport, DRAWFUN(DrawFun),LONG nUser); |  | ||||||
| DLLEXPORT_API int __stdcall SetupMask(HANDLE hChannelHandle, RECT *rectList, int iAreas); |  | ||||||
| DLLEXPORT_API int __stdcall StopMask(HANDLE hChannelHandle); |  | ||||||
| DLLEXPORT_API int __stdcall SetSubEncoderPictureFormat(HANDLE hChannelHandle, PictureFormat_t PictureFormat); |  | ||||||
| DLLEXPORT_API int __stdcall StartSubVideoCapture(HANDLE hChannelHandle); |  | ||||||
| DLLEXPORT_API int __stdcall StopSubVideoCapture(HANDLE hChannelHandle); |  | ||||||
| DLLEXPORT_API int __stdcall SetupDateTime(HANDLE hChannelHandle, SYSTEMTIME *now); |  | ||||||
| /* |  | ||||||
|     <20><><EFBFBD><EFBFBD>Ϊ1.7<EFBFBD>汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><EFBFBD>ܡ<EFBFBD> |  | ||||||
|     <20>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD>ܻ<EFBFBD><DCBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĺ<DEB8><C4BA><EFBFBD><EFBFBD>ơ<EFBFBD> |  | ||||||
| */ |  | ||||||
| //ԭʼͼ<CABC><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| typedef void (*IMAGE_STREAM_CALLBACK)(UINT channelNumber,void *context ); |  | ||||||
| DLLEXPORT_API int __stdcall SetImageStream(HANDLE hChannel,BOOL bStart,UINT fps,UINT width,UINT height,unsigned char *imageBuffer); |  | ||||||
| DLLEXPORT_API int __stdcall RegisterImageStreamCallback(IMAGE_STREAM_CALLBACK,void *context); |  | ||||||
| /* |  | ||||||
|     <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>λ<EFBFBD>ã<EFBFBD> |  | ||||||
|         (x,y)Ϊϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͻ<EFBFBD><CFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭʼͼ<CABC><CDBC><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ꡣ |  | ||||||
|         x<><78><EFBFBD><EFBFBD>Ϊ2<CEAA><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|         (x,y)<29><><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA>йأ<D0B9><D8A3><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>벻ƥ<EBB2BB>䣬 |  | ||||||
|     <20><><EFBFBD>ܻᵼ<DCBB><E1B5BC>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9>ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| */ |  | ||||||
| DLLEXPORT_API int __stdcall SetInputVideoPosition(HANDLE hChannel,UINT x,UINT y); |  | ||||||
| DLLEXPORT_API int __stdcall StopRegisterDrawFun(DWORD nport); |  | ||||||
|  |  | ||||||
| /* |  | ||||||
|     3.0 |  | ||||||
| */ |  | ||||||
| #define SERIAL_NUMBER_LENGTH    12    //<2F>忨<EFBFBD><E5BFA8><EFBFBD>кų<D0BA><C5B3><EFBFBD> |  | ||||||
| typedef struct tagDS_BOARD_DETAIL |  | ||||||
| { |  | ||||||
|     BOARD_TYPE_DS type;                    //<2F>忨<EFBFBD><E5BFA8><EFBFBD><EFBFBD> |  | ||||||
|     BYTE sn[16];                        //<2F><><EFBFBD>к<EFBFBD> |  | ||||||
|     UINT dspCount;                        //<2F>忨<EFBFBD><E5BFA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DSP<53><50><EFBFBD><EFBFBD> |  | ||||||
|     UINT firstDspIndex;                    //<2F>忨<EFBFBD>ϵ<EFBFBD>һ<EFBFBD><D2BB>DSP<53><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     UINT encodeChannelCount;            //<2F>忨<EFBFBD><E5BFA8><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     UINT firstEncodeChannelIndex;        //<2F>忨<EFBFBD>ϵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     UINT decodeChannelCount;            //<2F>忨<EFBFBD><E5BFA8><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     UINT firstDecodeChannelIndex;        //<2F>忨<EFBFBD>ϵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     UINT displayChannelCount;            //<2F>忨<EFBFBD><E5BFA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     UINT firstDisplayChannelIndex;        //<2F>忨<EFBFBD>ϵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     UINT reserved1; |  | ||||||
|     UINT reserved2; |  | ||||||
|     UINT reserved3; |  | ||||||
|     UINT reserved4; |  | ||||||
| }DS_BOARD_DETAIL; |  | ||||||
| typedef struct tagDSP_DETAIL |  | ||||||
| { |  | ||||||
|     UINT encodeChannelCount;            //<2F>忨<EFBFBD><E5BFA8><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     UINT firstEncodeChannelIndex;        //<2F>忨<EFBFBD>ϵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     UINT decodeChannelCount;            //<2F>忨<EFBFBD><E5BFA8><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     UINT firstDecodeChannelIndex;        //<2F>忨<EFBFBD>ϵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     UINT displayChannelCount;            //<2F>忨<EFBFBD><E5BFA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     UINT firstDisplayChannelIndex;        //<2F>忨<EFBFBD>ϵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     UINT reserved1; |  | ||||||
|     UINT reserved2; |  | ||||||
|     UINT reserved3; |  | ||||||
|     UINT reserved4; |  | ||||||
| }DSP_DETAIL; |  | ||||||
| DLLEXPORT_API unsigned int __stdcall GetBoardCount(); |  | ||||||
| DLLEXPORT_API int __stdcall GetBoardDetail(UINT boardNum,DS_BOARD_DETAIL *pBoardDetail); |  | ||||||
| DLLEXPORT_API unsigned int __stdcall GetDspCount(); |  | ||||||
| DLLEXPORT_API int __stdcall GetDspDetail(UINT dspNum,DSP_DETAIL *pDspDetail); |  | ||||||
| DLLEXPORT_API unsigned int __stdcall GetEncodeChannelCount(); |  | ||||||
| DLLEXPORT_API unsigned int __stdcall GetDecodeChannelCount(); |  | ||||||
| DLLEXPORT_API unsigned int __stdcall GetDisplayChannelCount(); |  | ||||||
| DLLEXPORT_API int __stdcall SetDefaultVideoStandard(VideoStandard_t VideoStandard); |  | ||||||
| DLLEXPORT_API int __stdcall SetVideoDetectPrecision(HANDLE hChannel,unsigned int value); |  | ||||||
| DLLEXPORT_API int __stdcall SetSubStreamType(HANDLE hChannelHandle, USHORT Type); |  | ||||||
| DLLEXPORT_API int __stdcall GetSubStreamType(HANDLE hChannelHandle, USHORT *StreamType); |  | ||||||
|  |  | ||||||
| #define MAX_DISPLAY_REGION        16 |  | ||||||
| typedef struct tagREGION_PARAM |  | ||||||
| { |  | ||||||
|     UINT left; |  | ||||||
|     UINT top; |  | ||||||
|     UINT width; |  | ||||||
|     UINT height; |  | ||||||
|     COLORREF color; |  | ||||||
|     UINT param; |  | ||||||
| }REGION_PARAM; |  | ||||||
| DLLEXPORT_API int __stdcall SetDisplayStandard(UINT nDisplayChannel,VideoStandard_t VideoStandard); |  | ||||||
| DLLEXPORT_API int __stdcall SetDisplayRegion(UINT nDisplayChannel,UINT nRegionCount,REGION_PARAM *pParam,UINT nReserved); |  | ||||||
| DLLEXPORT_API int __stdcall ClearDisplayRegion(UINT nDisplayChannel,UINT nRegionFlag); |  | ||||||
| DLLEXPORT_API int __stdcall SetDisplayRegionPosition(UINT nDisplayChannel,UINT nRegion,UINT nLeft,UINT nTop); |  | ||||||
| DLLEXPORT_API int __stdcall FillDisplayRegion(UINT nDisplayChannel,UINT nRegion,unsigned char *pImage); |  | ||||||
| DLLEXPORT_API int __stdcall SetEncoderVideoExtOutput(UINT nEncodeChannel,UINT nPort,BOOL bOpen,UINT nDisplayChannel,UINT nDisplayRegion,UINT nReserved); |  | ||||||
| DLLEXPORT_API int __stdcall SetDecoderVideoExtOutput(UINT nDecodeChannel,UINT nPort,BOOL bOpen,UINT nDisplayChannel,UINT nDisplayRegion,UINT nReserved); |  | ||||||
| DLLEXPORT_API int __stdcall SetDecoderVideoOutput(UINT nDecodeChannel,UINT nPort,BOOL bOpen,UINT nDisplayChannel,UINT nDisplayRegion,UINT nReserved); |  | ||||||
| DLLEXPORT_API int __stdcall SetDecoderAudioOutput(UINT nDecodeChannel,BOOL bOpen,UINT nOutputChannel); |  | ||||||
| //3.1 |  | ||||||
| DLLEXPORT_API int __stdcall SetDeInterlace(HANDLE hChannelHandle,UINT mode,UINT level); |  | ||||||
| DLLEXPORT_API int __stdcall SetPreviewOverlayMode(BOOL bTrue); |  | ||||||
|  |  | ||||||
| //DECODE functions for DS4002MD |  | ||||||
| #if defined( _WINDLL) |  | ||||||
|     #define PLAYER_API  extern "C"__declspec(dllexport)  |  | ||||||
| #else |  | ||||||
|     #define PLAYER_API  extern "C" __declspec(dllimport)  |  | ||||||
| #endif |  | ||||||
| typedef struct tagDISPLAY_PARA |  | ||||||
| { |  | ||||||
|     long bToScreen; |  | ||||||
|     long bToVideoOut; |  | ||||||
|     long nLeft; |  | ||||||
|     long nTop; |  | ||||||
|     long nWidth; |  | ||||||
|     long nHeight; |  | ||||||
|     long nReserved; |  | ||||||
| }DISPLAY_PARA,*PDISPLAY_PARA; |  | ||||||
| //Version info |  | ||||||
| typedef struct tagVERSION{ |  | ||||||
|     ULONG DspVersion, DspBuildNum; |  | ||||||
|     ULONG DriverVersion, DriverBuildNum; |  | ||||||
|     ULONG SDKVersion, SDKBuildNum; |  | ||||||
| }HW_VERSION, *PHW_VERSION; |  | ||||||
|  |  | ||||||
| //init part |  | ||||||
| PLAYER_API int __stdcall HW_InitDirectDraw(HWND hParent,COLORREF colorKey); |  | ||||||
| PLAYER_API int __stdcall HW_ReleaseDirectDraw(); |  | ||||||
| PLAYER_API int __stdcall HW_InitDecDevice(long *pDeviceTotal); |  | ||||||
| PLAYER_API int __stdcall HW_ReleaseDecDevice(); |  | ||||||
| PLAYER_API int __stdcall HW_ChannelOpen(long nChannelNum,HANDLE* phChannel); |  | ||||||
| PLAYER_API int __stdcall HW_ChannelClose(HANDLE hChannel); |  | ||||||
| //open part |  | ||||||
|  |  | ||||||
| PLAYER_API int __stdcall HW_OpenStream(HANDLE hChannel,PBYTE pFileHeadBuf,DWORD nSize); |  | ||||||
| DLLEXPORT_API int __stdcall HW_ResetStream(HANDLE hChannel); |  | ||||||
| PLAYER_API int __stdcall HW_CloseStream(HANDLE hChannel); |  | ||||||
| PLAYER_API int __stdcall HW_InputData(HANDLE hChannel,PBYTE pBuf,DWORD nSize); |  | ||||||
| PLAYER_API int __stdcall HW_OpenFile(HANDLE hChannel,LPTSTR sFileName); |  | ||||||
| PLAYER_API int __stdcall HW_CloseFile(HANDLE hChannel); |  | ||||||
|  |  | ||||||
| //play part |  | ||||||
| PLAYER_API int __stdcall HW_SetDisplayPara(HANDLE hChannel,DISPLAY_PARA *pPara); |  | ||||||
| PLAYER_API int __stdcall HW_Play(HANDLE hChannel); |  | ||||||
| PLAYER_API int __stdcall HW_Stop(HANDLE hChannel); |  | ||||||
| PLAYER_API int __stdcall HW_Pause(HANDLE hChannel,ULONG bPause); |  | ||||||
|  |  | ||||||
| //sound part |  | ||||||
| PLAYER_API int __stdcall HW_PlaySound(HANDLE hChannel); |  | ||||||
| PLAYER_API int __stdcall HW_StopSound(HANDLE hChannel); |  | ||||||
| PLAYER_API int __stdcall HW_SetVolume(HANDLE hChannel,ULONG nVolume); |  | ||||||
| //overlay part |  | ||||||
| PLAYER_API int __stdcall HW_RefreshSurface(); |  | ||||||
| PLAYER_API int __stdcall HW_RestoreSurface(); |  | ||||||
| PLAYER_API int __stdcall HW_ClearSurface(); |  | ||||||
| PLAYER_API int __stdcall HW_ZoomOverlay(RECT* pSrcClientRect, RECT* pDecScreenRect); |  | ||||||
| //cut file |  | ||||||
| PLAYER_API int __stdcall HW_StartCapFile(HANDLE hChannel,LPTSTR sFileName); |  | ||||||
| PLAYER_API int __stdcall HW_StopCapFile(HANDLE hChannel); |  | ||||||
| //capture picture |  | ||||||
| PLAYER_API int __stdcall HW_GetYV12Image(HANDLE hChannel, PBYTE pBuffer, ULONG nSize); |  | ||||||
| PLAYER_API int __stdcall HW_GetPictureSize(HANDLE hChannel,ULONG* pWidth, ULONG* pHeight); |  | ||||||
| PLAYER_API int __stdcall HW_ConvertToBmpFile(BYTE * pBuf,ULONG nSize,ULONG nWidth,ULONG nHeight,char *sFileName,ULONG nReserved); |  | ||||||
| //setting and getting  part |  | ||||||
| PLAYER_API int __stdcall HW_Jump(HANDLE hChannel,ULONG nDirection); |  | ||||||
| PLAYER_API int __stdcall HW_SetJumpInterval(HANDLE hChannel,ULONG nSecond); |  | ||||||
| PLAYER_API int __stdcall HW_GetSpeed(HANDLE hChannel,long *pSpeed); |  | ||||||
| PLAYER_API int __stdcall HW_SetSpeed(HANDLE hChannel,long nSpeed); |  | ||||||
| PLAYER_API int __stdcall HW_SetPlayPos(HANDLE hChannel,ULONG nPos); |  | ||||||
| PLAYER_API int __stdcall HW_GetPlayPos(HANDLE hChannel,ULONG* pPos); |  | ||||||
| PLAYER_API int __stdcall HW_GetVersion(PHW_VERSION pVersion); |  | ||||||
| PLAYER_API int __stdcall HW_GetCurrentFrameRate(HANDLE hChannel,ULONG* pFrameRate); |  | ||||||
| PLAYER_API int __stdcall HW_GetCurrentFrameNum(HANDLE hChannel,ULONG* pFrameNum); |  | ||||||
| PLAYER_API int __stdcall HW_GetFileTotalFrames(HANDLE hChannel,ULONG* pTotalFrames); |  | ||||||
| PLAYER_API int __stdcall HW_GetFileTime(HANDLE hChannel, ULONG* pFileTime); |  | ||||||
| PLAYER_API int __stdcall HW_GetCurrentFrameTime(HANDLE hChannel,ULONG* pFrameTime); |  | ||||||
| PLAYER_API int __stdcall HW_GetPlayedFrames(HANDLE hChannel,ULONG *pDecVFrames); |  | ||||||
| PLAYER_API int __stdcall HW_GetDeviceSerialNo(HANDLE hChannel,ULONG *pDeviceSerialNo); |  | ||||||
| PLAYER_API int __stdcall HW_SetFileEndMsg(HANDLE hChannel,HWND hWnd,UINT nMsg); |  | ||||||
| PLAYER_API int __stdcall HW_SetStreamOpenMode(HANDLE hChannel,ULONG nMode); |  | ||||||
| PLAYER_API int __stdcall HW_GetStreamOpenMode(HANDLE hChannel,ULONG *pMode); |  | ||||||
| PLAYER_API int __stdcall HW_SetVideoOutStandard(HANDLE hChannel,ULONG nStandard); |  | ||||||
| PLAYER_API int __stdcall HW_SetDspDeadlockMsg(HWND hWnd,UINT nMsg); |  | ||||||
| PLAYER_API int __stdcall HW_GetChannelNum(long nDspNum,long *pChannelNum,ULONG nNumsToGet,ULONG * pNumsGotten); |  | ||||||
| PLAYER_API int __stdcall HW_ResetDsp(long nDspNum); |  | ||||||
| PLAYER_API int __stdcall HW_SetAudioPreview(HANDLE hChannel, BOOL bEnable); |  | ||||||
| ////////////////////////////////////////////// |  | ||||||
|  |  | ||||||
| PLAYER_API int __stdcall HW_OpenStreamEx(HANDLE hChannel,PBYTE pFileHeadBuf,DWORD nSize); |  | ||||||
| PLAYER_API int __stdcall HW_CloseStreamEx(HANDLE hChannel); |  | ||||||
| PLAYER_API int __stdcall HW_InputVideoData(HANDLE hChannel,PBYTE pBuf,DWORD nSize); |  | ||||||
| PLAYER_API int __stdcall HW_InputAudioData(HANDLE hChannel,PBYTE pBuf,DWORD nSize); |  | ||||||
|  |  | ||||||
| //4.0 |  | ||||||
| PLAYER_API int __stdcall SetOsdDisplayModeEx(HANDLE hChannelHandle,int color,BOOL Translucent,int param,int nLineCount,USHORT **Format); |  | ||||||
| typedef void (*MOTION_DETECTION_CALLBACK)(ULONG channelNumber,BOOL bMotionDetected,void *context); |  | ||||||
| PLAYER_API int __stdcall SetupMotionDetectionEx(HANDLE hChannelHandle,int iGrade,int iFastMotionDetectFps, |  | ||||||
|                                                    int iSlowMotionDetectFps,UINT delay,RECT *RectList, int iAreas, |  | ||||||
|                                                    MOTION_DETECTION_CALLBACK MotionDetectionCallback,int reserved); |  | ||||||
| PLAYER_API int __stdcall GetJpegImage(HANDLE hChannelHandle,UCHAR *ImageBuf,ULONG *Size,UINT nQuality); |  | ||||||
| //WatchDog |  | ||||||
| PLAYER_API int __stdcall SetWatchDog(UINT boardNumber,BOOL bEnable); |  | ||||||
| //4.1 |  | ||||||
| typedef void (*FILE_REF_DONE_CALLBACK)(UINT nChannel,UINT nSize); |  | ||||||
| PLAYER_API int __stdcall HW_SetFileRef(HANDLE hChannel,BOOL bEnable,FILE_REF_DONE_CALLBACK FileRefDoneCallback); |  | ||||||
| PLAYER_API int __stdcall HW_LocateByAbsoluteTime(HANDLE hChannel,SYSTEMTIME time); |  | ||||||
| PLAYER_API int __stdcall HW_LocateByFrameNumber(HANDLE hChannel,UINT frmNum); |  | ||||||
| PLAYER_API int __stdcall HW_GetCurrentAbsoluteTime(HANDLE hChannel,SYSTEMTIME *pTime); |  | ||||||
| PLAYER_API int __stdcall HW_GetFileAbsoluteTime(HANDLE hChannel,SYSTEMTIME *pStartTime,SYSTEMTIME *pEndTime); |  | ||||||
| //4.2 |  | ||||||
| DLLEXPORT_API int __stdcall HW_ImportFileRef(HANDLE hChannel,char *pBuffer,UINT nSize); |  | ||||||
| DLLEXPORT_API int __stdcall HW_ExportFileRef(HANDLE hChannel,char *pBuffer,UINT nSize); |  | ||||||
| DLLEXPORT_API int __stdcall SetDisplayVideoCapture(UINT nDisplayChannel,BOOL bStart,UINT fps,UINT width,UINT height,unsigned char *imageBuffer); |  | ||||||
| DLLEXPORT_API int __stdcall RegisterDisplayVideoCaptureCallback(IMAGE_STREAM_CALLBACK DisplayVideoCaptureCallback,void *context); |  | ||||||
| DLLEXPORT_API int __stdcall SetDisplayVideoBrightness(UINT chan,int Brightness); |  | ||||||
| DLLEXPORT_API int __stdcall SetChannelStreamCRC(HANDLE hChannel,BOOL bEnable); |  | ||||||
| DLLEXPORT_API int __stdcall SetSubChannelStreamCRC(HANDLE hChannel,BOOL bEnable); |  | ||||||
| DLLEXPORT_API int __stdcall HW_SetDecoderPostProcess(HANDLE hChannel,UINT param); |  | ||||||
| // |  | ||||||
| typedef void (*DECODER_VIDEO_CAPTURE_CALLBACK)(UINT nChannelNumber,void *DataBuf,UINT width,UINT height,UINT nFrameNum,UINT nFrameTime,SYSTEMTIME *pFrameAbsoluteTime,void *context); |  | ||||||
| DLLEXPORT_API int __stdcall RegisterDecoderVideoCaptureCallback(DECODER_VIDEO_CAPTURE_CALLBACK DecoderVideoCaptureCallback,void *context); |  | ||||||
| DLLEXPORT_API int __stdcall HW_SetDecoderVideoCapture(HANDLE hChannel,BOOL bStart,UINT param); |  | ||||||
| DLLEXPORT_API int __stdcall HW_InputDataByFrame(HANDLE hChannel,PBYTE pBuf,DWORD nSize); |  | ||||||
| /* |  | ||||||
| <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԡ<EFBFBD><D4A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD>ܻ<EFBFBD><DCBB><EFBFBD><EFBFBD>ġ<DEB8> |  | ||||||
| */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|     short x,y,width,height; |  | ||||||
| }FACE_AREA_DEMO; |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|     FACE_AREA_DEMO faceArea; |  | ||||||
|     FACE_AREA_DEMO leftEyeArea; |  | ||||||
|     FACE_AREA_DEMO rightEyeArea; |  | ||||||
|     FACE_AREA_DEMO leftPupilArea; |  | ||||||
|     FACE_AREA_DEMO rightPupilArea; |  | ||||||
|     FACE_AREA_DEMO noseArea; |  | ||||||
|     FACE_AREA_DEMO mouthArea; |  | ||||||
| }FACE_INFO_DEMO; |  | ||||||
| typedef void (*FACE_DETECTION_DEMO_CALLBACK)(UINT nChannel,UINT nFaceCount,FACE_INFO_DEMO *pFaceInfo, |  | ||||||
|                                         char *pData,UINT nDataSize,UINT nImageWidth,UINT nImageHeight); |  | ||||||
|  |  | ||||||
| DLLEXPORT_API int __stdcall SetFaceDetectionDemo(HANDLE hChannelHandle,BOOL bEnable, |  | ||||||
|                                                  UINT nFrameInterval,FACE_DETECTION_DEMO_CALLBACK pFunc, |  | ||||||
|                                                  BOOL bCompress,UINT nCompressQuality,BOOL bLocateEyePos); |  | ||||||
|  |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,955 +0,0 @@ | |||||||
| #ifndef __LINUX_PLAYM4_H__ |  | ||||||
| #define __LINUX_PLAYM4_H__ |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| 	extern "C"  |  | ||||||
| 	{ |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| typedef unsigned int PLAYM4_HWND; |  | ||||||
| typedef void * PLAYM4_HWNDEX; |  | ||||||
| typedef void * PLAYM4_HDC; |  | ||||||
|  |  | ||||||
| #define PLAYM4_API  |  | ||||||
|  |  | ||||||
| #define __stdcall |  | ||||||
|  |  | ||||||
| #ifndef CALLBACK |  | ||||||
| #define CALLBACK |  | ||||||
| #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 or node cout for decoded data |  | ||||||
| #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 |  | ||||||
|  |  | ||||||
| //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	//Display 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;	 |  | ||||||
|  |  | ||||||
| //<2F><><EFBFBD>۹<EFBFBD><DBB9>ܴ<EFBFBD><DCB4><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| #define PLAYM4_FEC_ERR_ENABLEFAIL				100 // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7> |  | ||||||
| #define PLAYM4_FEC_ERR_NOTENABLE				101 // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>û<EFBFBD>м<EFBFBD><D0BC><EFBFBD> |  | ||||||
| #define PLAYM4_FEC_ERR_NOSUBPORT				102 // <20>Ӷ˿<D3B6>û<EFBFBD>з<EFBFBD><D0B7><EFBFBD> |  | ||||||
| #define PLAYM4_FEC_ERR_PARAMNOTINIT				103 // û<>г<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ӧ<EFBFBD>˿ڵIJ<DAB5><C4B2><EFBFBD> |  | ||||||
| #define PLAYM4_FEC_ERR_SUBPORTOVER				104 // <20>Ӷ˿<D3B6><CBBF>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| #define PLAYM4_FEC_ERR_EFFECTNOTSUPPORT			105 // <20>ð<EFBFBD>װ<EFBFBD><D7B0>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>֧<EFBFBD><D6A7> |  | ||||||
| #define PLAYM4_FEC_ERR_INVALIDWND				106 // <20>Ƿ<EFBFBD><C7B7>Ĵ<EFBFBD><C4B4><EFBFBD> |  | ||||||
| #define PLAYM4_FEC_ERR_PTZOVERFLOW				107 // PTZλ<5A><CEBB>Խ<EFBFBD><D4BD> |  | ||||||
| #define PLAYM4_FEC_ERR_RADIUSINVALID			108 // Բ<>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD>Ƿ<EFBFBD> |  | ||||||
| #define PLAYM4_FEC_ERR_UPDATENOTSUPPORT			109 // ָ<><D6B8><EFBFBD>İ<EFBFBD>װ<EFBFBD><D7B0>ʽ<EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>²<EFBFBD>֧<EFBFBD><D6A7> |  | ||||||
| #define PLAYM4_FEC_ERR_NOPLAYPORT				110 // <20><><EFBFBD>ſ<EFBFBD><C5BF>˿<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| #define PLAYM4_FEC_ERR_PARAMVALID				111 // <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA> |  | ||||||
| #define PLAYM4_FEC_ERR_INVALIDPORT				112 // <20>Ƿ<EFBFBD><C7B7>Ӷ˿<D3B6> |  | ||||||
| #define PLAYM4_FEC_ERR_PTZZOOMOVER				113 // PTZ<54><5A><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΧԽ<CEA7><D4BD> |  | ||||||
| #define PLAYM4_FEC_ERR_OVERMAXPORT				114  // <20><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD>ֵĽ<D6B5><C4BD><EFBFBD>ͨ<EFBFBD><CDA8>Ϊ<EFBFBD>ĸ<EFBFBD> |  | ||||||
| #define PLAYM4_FEC_ERR_ENABLED                  115  //<2F>ö˿<C3B6><CBBF>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> |  | ||||||
| #define PLAYM4_FEC_ERR_D3DACCENOTENABLE			116 // D3D<33><44><EFBFBD><EFBFBD>û<EFBFBD>п<EFBFBD><D0BF><EFBFBD> |  | ||||||
| #define PLAYM4_FEC_ERR_PLACETYPE                117 // <20><>װ<EFBFBD><D7B0>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>.һ<><D2BB><EFBFBD><EFBFBD><EFBFBD>ſ<EFBFBD>port<72><74><EFBFBD><EFBFBD>Ӧһ<D3A6>ְ<EFBFBD>װ<EFBFBD><D7B0>ʽ |  | ||||||
| #define PLAYM4_FEC_ERR_CorrectType              118 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>ܿ<EFBFBD><DCBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ſ<EFBFBD>port,<2C>趨<EFBFBD><E8B6A8><EFBFBD><EFBFBD>PTZ<54><5A><EFBFBD><EFBFBD><EFBFBD>۰<EFBFBD><DBB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>,<2C><><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>ֻ<EFBFBD>ܿ<EFBFBD>һ·;<3B><><EFBFBD><EFBFBD>180<38>Ƚ<EFBFBD><C8BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܺ<EFBFBD>ptz<74><7A><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><F0BFAAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB9><EFBFBD><EFBFBD>ԡ<EFBFBD> |  | ||||||
| #define PLAYM4_FEC_ERR_NULLWND                  119 // <20><><EFBFBD>۴<EFBFBD><DBB4><EFBFBD>Ϊ<EFBFBD><CEAA> |  | ||||||
| #define PLAYM4_FEC_ERR_PARA                     120 // <20><><EFBFBD>۲<EFBFBD><DBB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|  |  | ||||||
| //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  |  | ||||||
|  |  | ||||||
| // <20><><EFBFBD>º궨<C2BA><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>HIK_MEDIAINFO<46>ṹ |  | ||||||
| #define FOURCC_HKMI			0x484B4D49	// "HKMI" HIK_MEDIAINFO<46>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD> |  | ||||||
| // ϵͳ<CFB5><CDB3>װ<EFBFBD><D7B0>ʽ	 |  | ||||||
| #define SYSTEM_NULL			0x0				// û<><C3BB>ϵͳ<CFB5>㣬<EFBFBD><E3A3AC><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>	 |  | ||||||
| #define SYSTEM_HIK          0x1				// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> |  | ||||||
| #define SYSTEM_MPEG2_PS     0x2				// PS<50><53>װ |  | ||||||
| #define SYSTEM_MPEG2_TS     0x3				// TS<54><53>װ |  | ||||||
| #define SYSTEM_RTP          0x4				// rtp<74><70>װ |  | ||||||
| #define SYSTEM_RTPHIK       0x401				// rtp<74><70>װ |  | ||||||
|  |  | ||||||
| // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| #define VIDEO_NULL          0x0 // û<><C3BB><EFBFBD><EFBFBD>Ƶ |  | ||||||
| #define VIDEO_H264          0x1 // <20><>H.264<EFBFBD>ͺ<EFBFBD><EFBFBD><EFBFBD>H.264<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| #define VIDEO_MPEG2			0x2	// <20><>MPEG2 |  | ||||||
| #define VIDEO_MPEG4         0x3 // <20><>MPEG4 |  | ||||||
| #define VIDEO_MJPEG			0x4 |  | ||||||
| #define VIDEO_AVC264        0x0100 |  | ||||||
|  |  | ||||||
| // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| #define AUDIO_NULL          0x0000 // û<><C3BB><EFBFBD><EFBFBD>Ƶ |  | ||||||
| #define AUDIO_ADPCM         0x1000 // ADPCM  |  | ||||||
| #define AUDIO_MPEG          0x2000 // MPEG ϵ<><CFB5><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>MPEG<45><47>Ƶ |  | ||||||
| #define AUDIO_AAC           0x2001 |  | ||||||
| // Gϵ<47><CFB5><EFBFBD><EFBFBD>Ƶ |  | ||||||
| #define AUDIO_RAW_DATA8		0x7000      //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ8k<38><6B>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD> |  | ||||||
| #define AUDIO_RAW_UDATA16	0x7001      //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ16k<36><6B>ԭʼ<D4AD><CABC><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>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 //ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ	 |  | ||||||
| #define SYNCDATA_IVS	    2 //ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ |  | ||||||
|  |  | ||||||
| //motion flow type |  | ||||||
| #define	MOTION_FLOW_NONE			0 |  | ||||||
| #define MOTION_FLOW_CPU				1 |  | ||||||
| #define MOTION_FLOW_GPU				2 |  | ||||||
|  |  | ||||||
| //<2F><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| #define ENCRYPT_AES_3R_VIDEO     1 |  | ||||||
| #define ENCRYPT_AES_10R_VIDEO    2 |  | ||||||
| #define ENCRYPT_AES_3R_AUDIO     1 |  | ||||||
| #define ENCRYPT_AES_10R_AUDIO    2 |  | ||||||
|  |  | ||||||
| typedef struct tagSystemTime |  | ||||||
| { |  | ||||||
|     short wYear; |  | ||||||
|     short wMonth; |  | ||||||
|     short wDayOfWeek; |  | ||||||
|     short wDay; |  | ||||||
|     short wHour; |  | ||||||
|     short wMinute; |  | ||||||
|     short wSecond; |  | ||||||
|     short wMilliseconds; |  | ||||||
| }SYSTEMTIME; |  | ||||||
|  |  | ||||||
| typedef struct tagHKRect |  | ||||||
| { |  | ||||||
|     unsigned long left; |  | ||||||
|     unsigned long top; |  | ||||||
|     unsigned long right; |  | ||||||
|     unsigned long bottom; |  | ||||||
| }HKRECT; |  | ||||||
|  |  | ||||||
| //Frame position |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
| 	long long nFilePos; |  | ||||||
|     int nFrameNum; |  | ||||||
|     int nFrameTime; |  | ||||||
|     int nErrorFrameNum; |  | ||||||
|     SYSTEMTIME *pErrorTime; |  | ||||||
|     int nErrorLostFrameNum; |  | ||||||
|     int nErrorFrameSize; |  | ||||||
| }FRAME_POS,*PFRAME_POS; |  | ||||||
|  |  | ||||||
| //Frame Info |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|     int nWidth; |  | ||||||
|     int nHeight; |  | ||||||
|     int nStamp; |  | ||||||
|     int nType; |  | ||||||
|     int nFrameRate; |  | ||||||
|     unsigned int dwFrameNum; |  | ||||||
| }FRAME_INFO; |  | ||||||
|  |  | ||||||
| //Frame  |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|     char *pDataBuf; |  | ||||||
|     int  nSize; |  | ||||||
|     int  nFrameNum; |  | ||||||
|     int  bIsAudio; |  | ||||||
|     int  nReserved; |  | ||||||
| }FRAME_TYPE; |  | ||||||
|  |  | ||||||
| //Watermark Info	//add by gb 080119 |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|     char *pDataBuf; |  | ||||||
|     int  nSize; |  | ||||||
|     int  nFrameNum; |  | ||||||
|     int  bRsaRight; |  | ||||||
|     int  nReserved; |  | ||||||
| }WATERMARK_INFO; |  | ||||||
|  |  | ||||||
| typedef struct SYNCDATA_INFO  |  | ||||||
| { |  | ||||||
|     unsigned int dwDataType;        //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ͣ<EFBFBD>Ŀǰ<C4BF>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ |  | ||||||
|     unsigned int dwDataLen;         //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> |  | ||||||
|     unsigned char* pData;           //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ݽṹ<DDBD><E1B9B9>ָ<EFBFBD><D6B8>,<2C><><EFBFBD><EFBFBD>IVS_INFO<46>ṹ |  | ||||||
| } 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;			// <20>汾<EFBFBD>ţ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Ϣ<EFBFBD>ṹ<EFBFBD>汾<EFBFBD>ţ<EFBFBD>ĿǰΪ0x0101,<2C><>1.01<EFBFBD>汾<EFBFBD><EFBFBD>01<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>汾<EFBFBD>ţ<EFBFBD>01<EFBFBD><EFBFBD><EFBFBD>Ӱ汾<EFBFBD>š<EFBFBD> |  | ||||||
|     unsigned short  device_id;				// <20>豸ID<49><44><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD>/<2F><><EFBFBD><EFBFBD>			 |  | ||||||
|  |  | ||||||
|     unsigned short  system_format;          // ϵͳ<CFB5><CDB3>װ<EFBFBD><D7B0> |  | ||||||
|     unsigned short  video_format;           // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|  |  | ||||||
|     unsigned short  audio_format;           // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     unsigned char   audio_channels;         // ͨ<><CDA8><EFBFBD><EFBFBD>   |  | ||||||
|     unsigned char   audio_bits_per_sample;  // <20><>λ<EFBFBD><CEBB> |  | ||||||
|     unsigned int    audio_samplesrate;      // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>  |  | ||||||
|     unsigned int    audio_bitrate;          // ѹ<><D1B9><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>,<2C><>λ<EFBFBD><CEBB>bit |  | ||||||
|     unsigned char   flag; //8bit,0x81<38><31>ʾ<EFBFBD><CABE> smart<72><74><EFBFBD>ǣ<EFBFBD><C7A3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>smart,<2C><><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>intra<72>ķ<EFBFBD>ʽ<EFBFBD><CABD> media_version >= 0x0103&& video_fortmat = (H.264 or H.265) && ((flag & 0x02) ==0x2)  |  | ||||||
|     unsigned char   stream_tag; //8bit,0x81<38><31>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD><D0BA><EFBFBD>SDP<44><50>Ϣ  |  | ||||||
|     unsigned char   reserved[14]; // <20><><EFBFBD><EFBFBD>  |  | ||||||
| }HIK_MEDIAINFO; |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| typedef struct   |  | ||||||
| { |  | ||||||
|     int nPort; |  | ||||||
|     char* pBuf; |  | ||||||
|     int nBufLen; |  | ||||||
|     int nWidth; |  | ||||||
|     int nHeight; |  | ||||||
|     int nStamp; |  | ||||||
|     int nType; |  | ||||||
|     void* nUser; |  | ||||||
| }DISPLAY_INFO; |  | ||||||
|  |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|     int nPort; |  | ||||||
|     char *pVideoBuf; |  | ||||||
|     int nVideoBufLen; |  | ||||||
|     char *pPriBuf; |  | ||||||
|     int nPriBufLen; |  | ||||||
|     int nWidth; |  | ||||||
|     int nHeight; |  | ||||||
|     int nStamp; |  | ||||||
|     int nType; |  | ||||||
|     void* nUser; |  | ||||||
| }DISPLAY_INFOEX; |  | ||||||
|  |  | ||||||
| typedef struct PLAYM4_SYSTEM_TIME //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>  |  | ||||||
| { |  | ||||||
|     unsigned int dwYear; //<2F><> |  | ||||||
|     unsigned int dwMon;  //<2F><> |  | ||||||
|     unsigned int dwDay;  //<2F><> |  | ||||||
|     unsigned int dwHour; //ʱ |  | ||||||
|     unsigned int dwMin;  //<2F><> |  | ||||||
|     unsigned int dwSec;  //<2F><> |  | ||||||
|     unsigned int dwMs;   //<2F><><EFBFBD><EFBFBD> |  | ||||||
| } PLAYM4_SYSTEM_TIME; |  | ||||||
|  |  | ||||||
| #ifndef CROP_PIC_INFO_TAG |  | ||||||
| #define CROP_PIC_INFO_TAG |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|     unsigned char* pDataBuf;      //ץͼ<D7A5><CDBC><EFBFBD><EFBFBD>buffer |  | ||||||
|     unsigned int   dwPicSize;	  //ʵ<><CAB5>ͼƬ<CDBC><C6AC>С |  | ||||||
|     unsigned int   dwBufSize;      //<2F><><EFBFBD><EFBFBD>buffer<65><72>С |  | ||||||
|     unsigned int   dwPicWidth;	  //<2F><>ͼ<EFBFBD><CDBC> |  | ||||||
|     unsigned int   dwPicHeight;    //<2F><>ͼ<EFBFBD><CDBC> |  | ||||||
|     unsigned int   dwReserve;      //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>reserve<76>ֶ<EFBFBD> |  | ||||||
|     HKRECT*        pCropRect;     //ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL, ͬ<>ϵ<EFBFBD>ץͼ<D7A5>ӿ<EFBFBD> |  | ||||||
| }CROP_PIC_INFO; |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| ////////////////////////////////////////////////////////////////////////////// |  | ||||||
| //API |  | ||||||
| ////////////////////////////////////////////////////////////////////////////// |  | ||||||
| int  PlayM4_GetPort(int* nPort); |  | ||||||
| int  PlayM4_FreePort(int nPort); |  | ||||||
|  |  | ||||||
| int  PlayM4_OpenFile(int nPort,char * sFileName); |  | ||||||
| int  PlayM4_CloseFile(int nPort); |  | ||||||
| int  PlayM4_SetStreamOpenMode(int nPort,unsigned int nMode); |  | ||||||
| int  PlayM4_GetStreamOpenMode(int nPort); |  | ||||||
| int  PlayM4_OpenStream(int nPort,unsigned char * pFileHeadBuf,unsigned int nSize,unsigned int nBufPoolSize); |  | ||||||
| int  PlayM4_CloseStream(int nPort); |  | ||||||
|  |  | ||||||
| int  PlayM4_Play(int nPort, PLAYM4_HWND hWnd); |  | ||||||
| int  PlayM4_PlayEx(int nPort, PLAYM4_HWNDEX hWnd); |  | ||||||
| int  PlayM4_Stop(int nPort); |  | ||||||
| int  PlayM4_Pause(int nPort,unsigned int nPause); |  | ||||||
| int  PlayM4_Fast(int nPort); |  | ||||||
| int  PlayM4_Slow(int nPort); |  | ||||||
| int  PlayM4_RefreshPlay(int nPort); |  | ||||||
| int  PlayM4_InputData(int nPort,unsigned char * pBuf,unsigned int nSize); |  | ||||||
|  |  | ||||||
| int  PlayM4_PlaySound(int nPort); |  | ||||||
| int  PlayM4_StopSound(); |  | ||||||
| int  PlayM4_PlaySoundShare(int nPort); |  | ||||||
| int  PlayM4_StopSoundShare(int nPort); |  | ||||||
| int  PlayM4_SetVolume(int nPort,unsigned short nVolume); |  | ||||||
| unsigned short  PlayM4_GetVolume(int nPort); |  | ||||||
|  |  | ||||||
| int  PlayM4_OneByOne(int nPort); |  | ||||||
| int  PlayM4_OneByOneBack(int nPort); |  | ||||||
|  |  | ||||||
| int  PlayM4_SetPlayPos(int nPort,float fRelativePos); |  | ||||||
| float  PlayM4_GetPlayPos(int nPort); |  | ||||||
|  |  | ||||||
| unsigned int  PlayM4_GetFileTime(int nPort); |  | ||||||
| unsigned int  PlayM4_GetPlayedTime(int nPort); |  | ||||||
| unsigned int  PlayM4_GetPlayedFrames(int nPort); |  | ||||||
| unsigned int  PlayM4_GetFileTotalFrames(int nPort); |  | ||||||
| unsigned int  PlayM4_GetCurrentFrameRate(int nPort); |  | ||||||
| unsigned int  PlayM4_GetCurrentFrameNum(int nPort); |  | ||||||
| unsigned int  PlayM4_GetSpecialData(int nPort); |  | ||||||
| unsigned int  PlayM4_GetAbsFrameNum(int nPort);  |  | ||||||
| unsigned int  PlayM4_GetFileHeadLength(); |  | ||||||
| unsigned int  PlayM4_GetSdkVersion(); |  | ||||||
| unsigned int  PlayM4_GetLastError(int nPort); |  | ||||||
| unsigned int  PlayM4_GetPlayedTimeEx(int nPort); |  | ||||||
|  |  | ||||||
| int  PlayM4_GetSystemTime(int nPort, PLAYM4_SYSTEM_TIME *pstSystemTime); |  | ||||||
| int  PlayM4_GetFileTimeEx(int nPort, unsigned int* pStart, unsigned int* pStop, unsigned int* pRev); |  | ||||||
| int  PlayM4_GetCurrentFrameRateEx(int nPort, float* pfFrameRate); |  | ||||||
| int  PlayM4_GetPictureSize(int nPort,int *pWidth,int *pHeight); |  | ||||||
| int  PlayM4_GetKeyFramePos(int nPort,unsigned int nValue, unsigned int nType, PFRAME_POS pFramePos); |  | ||||||
| int  PlayM4_GetNextKeyFramePos(int nPort,unsigned int nValue, unsigned int nType, PFRAME_POS pFramePos); |  | ||||||
|  |  | ||||||
| int  PlayM4_ConvertToBmpFile(char * pBuf,int nSize,int nWidth,int nHeight,int nType,char *sFileName); |  | ||||||
| int  PlayM4_ConvertToJpegFile(char * pBuf,int nSize,int nWidth,int nHeight,int nType,char *sFileName); |  | ||||||
| int  PlayM4_SetJpegQuality(int nQuality); |  | ||||||
| int  PlayM4_GetBMP(int nPort,unsigned char * pBitmap,unsigned int nBufSize,unsigned int* pBmpSize); |  | ||||||
| int  PlayM4_GetJPEG(int nPort,unsigned char * pJpeg,unsigned int nBufSize,unsigned int* pJpegSize); |  | ||||||
|  |  | ||||||
| int  PlayM4_SetPlayedTimeEx(int nPort,unsigned int nTime); |  | ||||||
| int  PlayM4_SetCurrentFrameNum(int nPort,unsigned int nFrameNum); |  | ||||||
| int  PlayM4_SetDisplayRegion(int nPort,unsigned int nRegionNum, HKRECT *pSrcRect, PLAYM4_HWND hDestWnd, int bEnable); |  | ||||||
| int  PlayM4_SetDisplayRegionOnWnd(int nPort,unsigned int nRegionNum, HKRECT *pSrcRect, int bEnable);///<<3C>ര<EFBFBD>ڷָ<DAB7><D6B8>ӿ<EFBFBD> |  | ||||||
| int  PlayM4_SetDecodeFrameType(int nPort,unsigned int nFrameType); |  | ||||||
| int  PlayM4_SetSecretKey(int nPort, int lKeyType, char *pSecretKey, int lKeyLen); |  | ||||||
|  |  | ||||||
| int  PlayM4_SetDecCBStream(int nPort,unsigned int nStream); |  | ||||||
| int  PlayM4_SetDecCallBackMend(int nPort,void (CALLBACK* DecCBFun)(int nPort,char * pBuf,int nSize,FRAME_INFO * pFrameInfo, void* nUser,int nReserved2), void* nUser); |  | ||||||
| int  PlayM4_SetDecCallBackExMend(int nPort, void (CALLBACK* DecCBFun)(int nPort, char* pBuf, int nSize, FRAME_INFO* pFrameInfo, void* nUser, int nReserved2), char* pDest, int nDestSize, void* nUser); |  | ||||||
|  |  | ||||||
| int  PlayM4_SetDisplayCallBack(int nPort,void (CALLBACK* DisplayCBFun)(int nPort,char * pBuf,int nSize,int nWidth,int nHeight,int nStamp,int nType,int nReserved)); |  | ||||||
| int  PlayM4_SetDisplayCallBackEx(int nPort,void (CALLBACK* DisplayCBFun)(DISPLAY_INFO *pstDisplayInfo), void* nUser); |  | ||||||
| int  PlayM4_SetFileRefCallBack(int nPort, void (CALLBACK *pFileRefDone)(unsigned int nPort,void* nUser),void* nUser); |  | ||||||
| int  PlayM4_SetEncTypeChangeCallBack(int nPort, void(CALLBACK *funEncChange)(int nPort, void* nUser), void* nUser); |  | ||||||
| int  PlayM4_SetCheckWatermarkCallBack(int nPort, void(CALLBACK* funCheckWatermark)(int nPort, WATERMARK_INFO* pWatermarkInfo, void* nUser), void* nUser); |  | ||||||
| int  PlayM4_SetFileEndCallback(int nPort, void(CALLBACK*FileEndCallback)(int nPort, void *pUser), void *pUser); |  | ||||||
|  |  | ||||||
| int  PlayM4_ResetSourceBuffer(int nPort); |  | ||||||
| int  PlayM4_SetDisplayBuf(int nPort, unsigned int nNum); |  | ||||||
| int  PlayM4_ResetBuffer(int nPort,unsigned int nBufType); |  | ||||||
| unsigned int  PlayM4_GetSourceBufferRemain(int nPort); |  | ||||||
| unsigned int  PlayM4_GetDisplayBuf(int nPort); |  | ||||||
| unsigned int  PlayM4_GetBufferValue(int nPort,unsigned int nBufType); |  | ||||||
|  |  | ||||||
| int  PlayM4_GetRefValue(int nPort,unsigned char  *pBuffer, unsigned int *pSize); |  | ||||||
| int  PlayM4_SetRefValue(int nPort,unsigned char  *pBuffer, unsigned int nSize); |  | ||||||
| int  PlayM4_GetRefValueEx(int nPort,unsigned char *pBuffer, unsigned int *pSize);///< <20><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>ͻص<CDBB> |  | ||||||
|  |  | ||||||
| int  PlayM4_RegisterDrawFun(int nPort,void (CALLBACK* DrawFun)(int nPort,PLAYM4_HDC hDc,void* nUser),void* nUser); |  | ||||||
|  |  | ||||||
| int  PlayM4_ThrowBFrameNum(int nPort,unsigned int nNum); |  | ||||||
| int  PlayM4_SkipErrorData(int nPort, int bSkip); |  | ||||||
|  |  | ||||||
| int  PlayM4_ReversePlay(int nPort); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #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_     //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ṹ |  | ||||||
| { |  | ||||||
|     int            nSessionInfoType;   //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>SDP<44><50><EFBFBD><EFBFBD><EFBFBD>纣<EFBFBD><E7BAA3>˽<EFBFBD><CBBD><EFBFBD><EFBFBD>Ϣͷ |  | ||||||
|     int            nSessionInfoLen;    //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD> |  | ||||||
|     unsigned char* pSessionInfoData;   //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD> |  | ||||||
|  |  | ||||||
| } PLAYM4_SESSION_INFO; |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| PLAYM4_API int __stdcall PlayM4_OpenStreamAdvanced(int nPort, int nProtocolType, PLAYM4_SESSION_INFO* pstSessionInfo, unsigned int nBufPoolSize); |  | ||||||
|  |  | ||||||
| #define R_ANGLE_0   -1  //<2F><><EFBFBD><EFBFBD>ת |  | ||||||
| #define R_ANGLE_L90  0  //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת90<39><30> |  | ||||||
| #define R_ANGLE_R90  1  //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת90<39><30> |  | ||||||
| #define R_ANGLE_180  2  //<2F><>ת180<38><30> |  | ||||||
|  |  | ||||||
| PLAYM4_API int __stdcall PlayM4_SetRotateAngle(int nPort, unsigned int nRegionNum, unsigned int dwType); |  | ||||||
|  |  | ||||||
| #ifndef PLAYM4_ADDITION_INFO_TAG |  | ||||||
| #define PLAYM4_ADDITION_INFO_TAG |  | ||||||
| typedef struct _PLAYM4_ADDITION_INFO_     //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ṹ |  | ||||||
| { |  | ||||||
|     unsigned char*  pData;			//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     unsigned int    dwDatalen;		//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> |  | ||||||
|     unsigned int	dwDataType;		//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     unsigned int	dwTimeStamp;	//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> |  | ||||||
| } PLAYM4_ADDITION_INFO; |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| //dwGroupIndex <20><>Լ<EFBFBD><D4BC>ȡֵ0~3<><33><EFBFBD><EFBFBD>һ<EFBFBD>汾ȡ<E6B1BE><C8A1>ͬ<EFBFBD><CDAC>ֻ<EFBFBD><D6BB>ͬ<EFBFBD><CDAC>closestream<61><6D><EFBFBD><EFBFBD> |  | ||||||
| PLAYM4_API int __stdcall PlayM4_SetSycGroup(int nPort, unsigned int dwGroupIndex); |  | ||||||
| //<2F>ݲ<EFBFBD>ʵ<EFBFBD>ִ˺<D6B4><CBBA><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ʼʱ<CABC>䲻һ<E4B2BB>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㣬ͬһ<CDAC><D2BB><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>һ· |  | ||||||
| PLAYM4_API int __stdcall PlayM4_SetSycStartTime(int nPort, PLAYM4_SYSTEM_TIME *pstSystemTime); |  | ||||||
|  |  | ||||||
| // <20><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>صĽӿ<C4BD> |  | ||||||
| #ifndef FISH_EYE_TAG |  | ||||||
| #define FISH_EYE_TAG |  | ||||||
|  |  | ||||||
| // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| typedef enum tagFECPlaceType |  | ||||||
| { |  | ||||||
|     FEC_PLACE_WALL = 0x1,			// <20><>װ<EFBFBD><D7B0>ʽ		(<28><><EFBFBD><EFBFBD>ˮƽ) |  | ||||||
|     FEC_PLACE_FLOOR = 0x2,			// <20><><EFBFBD>氲װ		(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) |  | ||||||
|     FEC_PLACE_CEILING = 0x3,		// <20><>װ<EFBFBD><D7B0>ʽ		(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) |  | ||||||
|  |  | ||||||
| }FECPLACETYPE; |  | ||||||
|  |  | ||||||
| typedef enum tagFECCorrectType |  | ||||||
| { |  | ||||||
| 	FEC_CORRECT_NULL       = 0x0,       // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(ԭͼ) |  | ||||||
| 	FEC_CORRECT_PTZ        = 0x100,		// PTZ |  | ||||||
| 	FEC_CORRECT_180        = 0x200,		// 180<38>Ƚ<EFBFBD><C8BD><EFBFBD>  <20><><EFBFBD><EFBFBD>Ӧ2P<32><50> |  | ||||||
| 	FEC_CORRECT_360        = 0x300,		// 360ȫ<30><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ӧ1P<31><50> |  | ||||||
|     FEC_CORRECT_LAT        = 0x400,     // γ<><CEB3>չ<EFBFBD><D5B9> |  | ||||||
| 	FEC_CORRECT_SEMISPHERE = 0x500,     // 3D<33><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     FEC_CORRECT_CYLINDER                = 0x0600, // <20><><EFBFBD><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD><EFBFBD>ʾ - <20><>װ/<2F><>װ |  | ||||||
|     FEC_CORRECT_CYLINDER_SPLIT          = 0x0700, // <20><><EFBFBD><EFBFBD><EFBFBD>п<EFBFBD><D0BF><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD><EFBFBD>ʾ - <20><>װ/<2F><>װ |  | ||||||
|     FEC_CORRECT_PLANET                  = 0x0800, // <20><><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD> |  | ||||||
|     FEC_CORRECT_ARCSPHERE_HORIZONTAL    = 0x0900, // <20><><EFBFBD><EFBFBD>ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD> - <20><>װ |  | ||||||
|     FEC_CORRECT_ARCSPHERE_VERTICAL      = 0x0A00, // <20><><EFBFBD>۴<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD> - <20><>װ |  | ||||||
|  |  | ||||||
| }FECCORRECTTYPE; |  | ||||||
|  |  | ||||||
| typedef enum tagFECCorrectEffect |  | ||||||
| { |  | ||||||
|     FEC_CORRECT_EFFECT_BACK_FACE_CULLING    = 0x100,        // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB3><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30>ʾ<EFBFBD><CABE><EFBFBD>ã<EFBFBD>Ϊ0<CEAA><30>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿת<C7BF><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|  |  | ||||||
| }FECCORRECTEFFECT; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| typedef struct tagCycleParam |  | ||||||
| { |  | ||||||
|     float	fRadiusLeft;	// Բ<><D4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD> |  | ||||||
|     float	fRadiusRight;	// Բ<><D4B2><EFBFBD><EFBFBD><EFBFBD>ұ<EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD> |  | ||||||
|     float   fRadiusTop;		// Բ<><D4B2><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>Y<EFBFBD><59><EFBFBD><EFBFBD> |  | ||||||
|     float   fRadiusBottom;	// Բ<><D4B2><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>Y<EFBFBD><59><EFBFBD><EFBFBD> |  | ||||||
|  |  | ||||||
| }CYCLEPARAM; |  | ||||||
|  |  | ||||||
| typedef struct tagPTZParam |  | ||||||
| { |  | ||||||
|     float fPTZPositionX;		// PTZ <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> X<><58><EFBFBD><EFBFBD> |  | ||||||
|     float fPTZPositionY;		// PTZ <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> Y<><59><EFBFBD><EFBFBD>	 |  | ||||||
|  |  | ||||||
| }PTZPARAM; |  | ||||||
|  |  | ||||||
| // PTZ<54><5A>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾģʽ |  | ||||||
| typedef enum tagFECShowMode |  | ||||||
| { |  | ||||||
|     FEC_PTZ_OUTLINE_NULL,   // <20><><EFBFBD><EFBFBD>ʾ |  | ||||||
|     FEC_PTZ_OUTLINE_RECT,   // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ |  | ||||||
|     FEC_PTZ_OUTLINE_RANGE,  // <20><>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ |  | ||||||
| }FECSHOWMODE;  |  | ||||||
|  |  | ||||||
| // <20><><EFBFBD>±<EFBFBD><C2B1>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|  |  | ||||||
| #define 		FEC_UPDATE_RADIUS			 0x1 |  | ||||||
| #define 		FEC_UPDATE_PTZZOOM			 0x2 |  | ||||||
| #define 		FEC_UPDATE_WIDESCANOFFSET	 0x4 |  | ||||||
| #define 		FEC_UPDATE_PTZPARAM			 0x8 |  | ||||||
| #define         FEC_UPDATT_PTZCOLOR          0x10 |  | ||||||
|  |  | ||||||
| // ɫ<>ʽṹ<CABD><E1B9B9> |  | ||||||
| typedef struct tagFECColor |  | ||||||
| { |  | ||||||
|     unsigned char nR;     // R<><52><EFBFBD><EFBFBD> |  | ||||||
|     unsigned char nG;	  // G<><47><EFBFBD><EFBFBD> |  | ||||||
|     unsigned char nB;     // B<><42><EFBFBD><EFBFBD> |  | ||||||
|     unsigned char nAlpha; // Alpha<68><61><EFBFBD><EFBFBD> |  | ||||||
| }FECCOLOR; |  | ||||||
|  |  | ||||||
| typedef struct tagFECParam |  | ||||||
| { |  | ||||||
| 	unsigned int 	nUpDateType;			// <20><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| 	unsigned int	nPlaceAndCorrect;		// <20><>װ<EFBFBD><D7B0>ʽ<EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD>ȡ<EFBFBD><C8A1>SetParam<61><6D>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ч,<2C><>ֵ<EFBFBD><D6B5>ʾ<EFBFBD><CABE>װ<EFBFBD><D7B0>ʽ<EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD>ĺ<EFBFBD> |  | ||||||
| 	PTZPARAM		stPTZParam;				// PTZ У<><D0A3><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD> |  | ||||||
| 	CYCLEPARAM		stCycleParam;			// <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>Բ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD> |  | ||||||
| 	float			fZoom;					// PTZ <20><>ʾ<EFBFBD>ķ<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD> |  | ||||||
| 	float			fWideScanOffset;		// 180<38><30><EFBFBD><EFBFBD>360<36><30>У<EFBFBD><D0A3><EFBFBD><EFBFBD>ƫ<EFBFBD>ƽǶ<C6BD> |  | ||||||
|     FECCOLOR        stPTZColor;             // PTZ<54><5A>ɫ |  | ||||||
| 	int				nResver[15];			// <20><><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD> |  | ||||||
|  |  | ||||||
| }FISHEYEPARAM; |  | ||||||
|  |  | ||||||
| #define         FEC_JPEG   0  // JPEGץͼ |  | ||||||
| #define         FEC_BMP    1  // BMP ץͼ |  | ||||||
|  |  | ||||||
| ///<<3C>µ<EFBFBD>3d<33><64><EFBFBD>۰<EFBFBD><DBB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽDZ仯<C7B1><E4BBAF><EFBFBD><EFBFBD>(<28><><EFBFBD>ź<EFBFBD><C5BA><EFBFBD>ת) |  | ||||||
| typedef enum tagPLAYM4HRViewParamType |  | ||||||
| { |  | ||||||
|     PLAYM4_HR_VPT_ROTATION_X       = 0x1,          ///<ˮƽ<CBAE><C6BD>ת |  | ||||||
|     PLAYM4_HR_VPT_ROTATION_Y       = 0x2,          ///<<3C><>ֱ<EFBFBD><D6B1>ת |  | ||||||
|     PLAYM4_HR_VPT_SCALE            = 0x3,          ///<<3C><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵΪ<D6B5><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0ֵʱΪ<CAB1><CEAA><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>) |  | ||||||
| }PLAYM4HRVIEWPARAMTYPE;	 |  | ||||||
|  |  | ||||||
| // <20><><EFBFBD><EFBFBD>3Dģ<44>Ͳ<EFBFBD><CDB2><EFBFBD> |  | ||||||
| typedef enum tagPLAYM4FEC3DModelParam |  | ||||||
| { |  | ||||||
|     PLAYM4_FEC_3DMP_CYLINDER_HEIGHT              = 0x1,       ///< Բ<><D4B2>ģ<EFBFBD><EFBFBD> |  | ||||||
|     PLAYM4_FEC_3DMP_CYLINDER_RADIUS              = 0x2,       ///< Բ<><D4B2>ģ<EFBFBD>Ͱ뾶 |  | ||||||
| }PLAYM4FEC3DMODELPARAM; |  | ||||||
|  |  | ||||||
| // <20>ض<EFBFBD><D8B6>ӽ<EFBFBD>״̬ |  | ||||||
| typedef enum tagPLAYM4FECSpecialViewType |  | ||||||
| { |  | ||||||
|     PLAYM4_FEC_SVT_EDGE                          = 0x1        ///<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>봰<EFBFBD><EBB4B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽ<EFBFBD> |  | ||||||
| }PLAYM4FECSPECIALVIEWTYPE; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| typedef void (__stdcall * FISHEYE_CallBack )(  void* pUser  , unsigned int  nPort , unsigned int nCBType , void * hDC ,   unsigned int nWidth , unsigned int nHeight);  |  | ||||||
|  |  | ||||||
| // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| PLAYM4_API int __stdcall PlayM4_FEC_Enable(int nPort); |  | ||||||
|  |  | ||||||
| // <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> |  | ||||||
| PLAYM4_API int __stdcall PlayM4_FEC_Disable(int nPort); |  | ||||||
|  |  | ||||||
| // <20><>ȡ<EFBFBD><C8A1><EFBFBD>۽<EFBFBD><DBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӷ˿<D3B6> [1~31]  |  | ||||||
| PLAYM4_API int  __stdcall PlayM4_FEC_GetPort(int nPort , unsigned int* nSubPort , FECPLACETYPE emPlaceType , FECCORRECTTYPE emCorrectType); |  | ||||||
|  |  | ||||||
| // ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD>۽<EFBFBD><DBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӷ˿<D3B6> |  | ||||||
| PLAYM4_API int __stdcall PlayM4_FEC_DelPort(int nPort , unsigned int nSubPort); |  | ||||||
|  |  | ||||||
| // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۽<EFBFBD><DBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| PLAYM4_API int __stdcall PlayM4_FEC_SetParam(int nPort , unsigned int nSubPort , FISHEYEPARAM * pPara); |  | ||||||
|  |  | ||||||
| // <20><>ȡ<EFBFBD><C8A1><EFBFBD>۽<EFBFBD><DBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| PLAYM4_API int __stdcall PlayM4_FEC_GetParam(int nPort , unsigned int nSubPort , FISHEYEPARAM * pPara); |  | ||||||
|  |  | ||||||
| // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>л<EFBFBD> |  | ||||||
| PLAYM4_API int __stdcall PlayM4_FEC_SetWnd(int nPort , unsigned int nSubPort , void * hWnd); |  | ||||||
|  |  | ||||||
| // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۴<EFBFBD><DBB4>ڵĻ<DAB5>ͼ<EFBFBD>ص<EFBFBD> |  | ||||||
| PLAYM4_API int __stdcall PlayM4_FEC_SetCallBack(int nPort , unsigned int nSubPort , FISHEYE_CallBack cbFunc , void * pUser); |  | ||||||
|  |  | ||||||
| PLAYM4_API int __stdcall PlayM4_FEC_Capture(int nPort, unsigned int nSubPort , unsigned int nType, char *pFileName); |  | ||||||
|  |  | ||||||
| PLAYM4_API int __stdcall PlayM4_FEC_GetCurrentPTZPort(int nPort, float fPositionX,float fPositionY, unsigned int *pnPort); |  | ||||||
|  |  | ||||||
| PLAYM4_API int __stdcall PlayM4_FEC_SetCurrentPTZPort(int nPort, unsigned int nSubPort); |  | ||||||
|  |  | ||||||
| PLAYM4_API int __stdcall PlayM4_FEC_SetPTZOutLineShowMode(int nPort,FECSHOWMODE nPTZShowMode); |  | ||||||
| 														 									  |  | ||||||
| //<2F>µ<EFBFBD><C2B5><EFBFBD><EFBFBD>۰<EFBFBD><DBB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽDZ仯(<28><>ת)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽӿ<D8BD> |  | ||||||
| //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽDz<D3BD><C7B2><EFBFBD>(<28><><EFBFBD><EFBFBD>ǰ<EFBFBD>Ȼ<EFBFBD>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0>ֵ) |  | ||||||
| PLAYM4_API int __stdcall PlayM4_FEC_GetViewParam(int nPort, unsigned int nSubPort, PLAYM4HRVIEWPARAMTYPE enViewParamType, float* fValue); |  | ||||||
| //<2F><><EFBFBD>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽDZ仯<C7B1><E4BBAF><EFBFBD><EFBFBD>(<28><><EFBFBD>õ<EFBFBD>ֵΪ<D6B5><CEAA>ȡֵ<C8A1><D6B5><EFBFBD><EFBFBD>Ҫƫ<D2AA><C6AB>ֵ) |  | ||||||
| PLAYM4_API int __stdcall PlayM4_FEC_SetViewParam(int nPort, unsigned int nSubPort, PLAYM4HRVIEWPARAMTYPE enViewParamType, float fValue); |  | ||||||
|  |  | ||||||
| //<2F><><EFBFBD>۵<EFBFBD><DBB5>ӷŴ<D3B7> nType = 0<><30> |  | ||||||
| //<2F><><EFBFBD>۴<EFBFBD><DBB4>ڷָ<DAB7> nType = 1<><31> |  | ||||||
| //ע<>⣬<EFBFBD><E2A3AC><EFBFBD>ڷָ<DAB7>ʱhDestWnd<6E><64>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪNULL<4C><4C>20180813<31>ݲ<EFBFBD>֧<EFBFBD>֣<EFBFBD> |  | ||||||
| //Ŀǰ<C4BF><C7B0><EFBFBD>ӷŴ<D3B7><C5B4><EFBFBD>֧<EFBFBD><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϷŴ<CFB7><C5B4><EFBFBD>nRegionNum<75><6D>Ϊ0<CEAA><30>hDestWnd<6E><64>ΪNULL<4C><4C>bEnable<6C><65>Ϊ0ȡ<30><C8A1><EFBFBD><EFBFBD><EFBFBD>ӷŴ<C5B4>0Ϊ<30><CEAA><EFBFBD>ӷŴ<D3B7> |  | ||||||
| //pSrcRect<63><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1000<30><30><EFBFBD>Կ<EFBFBD><D4BF><EFBFBD><EFBFBD>߸ߣ<DFB8><DFA3><EFBFBD>ֵ<EFBFBD><D6B5>0-1000֮<30>䣩 |  | ||||||
| //ֻ<>Ƽ<EFBFBD>ԭͼ<D4AD><CDBC>180<38><30>360<36><30>γ<EFBFBD><CEB3>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PTZ<54><5A>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ӷŴ<D3B7><C5B4><EFBFBD><EFBFBD>ٿ<EFBFBD>ptz<74>ᵼ<EFBFBD>µ<EFBFBD><C2B5>ӷŴ<D3B7>ʧЧ-3D<33><44><EFBFBD>۲<EFBFBD><DBB2><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ô˽ӿ<CBBD>(<28><><EFBFBD>ӽDZ仯<C7B1>ӿڽ<D3BF><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD> |  | ||||||
| PLAYM4_API bool __stdcall PlayM4_FEC_SetDisplayRegion(int nPort, unsigned int nSubPort,unsigned int nType, unsigned int nRegionNum, HKRECT *pSrcRect, PLAYM4_HWND hDestWnd, int bEnable); |  | ||||||
| //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB3><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30>ʾ<EFBFBD><CABE><EFBFBD>ã<EFBFBD>Ϊ0<CEAA><30>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿת<C7BF><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| PLAYM4_API bool __stdcall PlayM4_FEC_SetCorrectEffect(int nPort, unsigned int nSubPort, FECCORRECTEFFECT nCorrectEffect, float fValue); |  | ||||||
|  |  | ||||||
| // <20><><EFBFBD><EFBFBD>3Dģ<44>Ͳ<EFBFBD><CDB2><EFBFBD>-<2D><><EFBFBD><EFBFBD>3DԲ<44><D4B2>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>Ч |  | ||||||
| PLAYM4_API bool __stdcall PlayM4_FEC_Set3DModelParam(int nPort, unsigned int nSubPort, PLAYM4FEC3DMODELPARAM enType, float fValue); |  | ||||||
|  |  | ||||||
| // <20><>ȡ<EFBFBD>ض<EFBFBD><D8B6>ӽDz<D3BD><C7B2><EFBFBD> - ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB>棬<EFBFBD><E6A3AC>SetViewParam<61>ӿ<EFBFBD><D3BF><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> |  | ||||||
| PLAYM4_API bool __stdcall PlayM4_FEC_GetSpecialViewParam(int nPort, unsigned int nSubPort, PLAYM4FECSPECIALVIEWTYPE enSVType, PLAYM4HRVIEWPARAMTYPE enVPType, float* pValue); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| //ͼ<><CDBC><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD>-Linux<75>汾<EFBFBD><E6B1BE>֧<EFBFBD><D6A7> |  | ||||||
| #ifndef PLAYM4_HIKVIE_TAG |  | ||||||
| #define PLAYM4_HIKVIE_TAG |  | ||||||
|  |  | ||||||
| typedef struct _PLAYM4_VIE_DYNPARAM_ |  | ||||||
| { |  | ||||||
|     int moduFlag;      //<2F><><EFBFBD>õ<EFBFBD><C3B5>㷨<EFBFBD><E3B7A8><EFBFBD><EFBFBD>ģ<EFBFBD>飬<EFBFBD><E9A3AC>PLAYM4_VIE_MODULES<45>ж<EFBFBD><D0B6><EFBFBD> |  | ||||||
|     //<2F><> PLAYM4_VIE_MODU_ADJ | PLAYM4_VIE_MODU_EHAN |  | ||||||
|     //ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD>ú<C3BA><F3A3ACB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     //PLAYM4_VIE_MODU_ADJ |  | ||||||
|     int brightVal;     //<2F><><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD>ֵ<EFBFBD><D6B5>[-255, 255] |  | ||||||
|     int contrastVal;   //<2F>Աȶȵ<C8B6><C8B5><EFBFBD>ֵ<EFBFBD><D6B5>[-256, 255] |  | ||||||
|     int colorVal;      //<2F><><EFBFBD>Ͷȵ<CDB6><C8B5><EFBFBD>ֵ<EFBFBD><D6B5>[-256, 255] |  | ||||||
|     //PLAYM4_VIE_MODU_EHAN |  | ||||||
|     int toneScale;     //<2F>˲<EFBFBD><CBB2><EFBFBD>Χ<EFBFBD><CEA7>[0, 100] |  | ||||||
|     int toneGain;      //<2F>Աȶȵ<C8B6><C8B5>ڣ<EFBFBD>ȫ<EFBFBD>ֶԱȶ<D4B1><C8B6><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>[-256, 255] |  | ||||||
|     int toneOffset;    //<2F><><EFBFBD>ȵ<EFBFBD><C8B5>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>ֵƫ<D6B5>ƣ<EFBFBD>[-255, 255] |  | ||||||
|     int toneColor;     //<2F><>ɫ<EFBFBD><C9AB><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>[-256, 255] |  | ||||||
|     //PLAYM4_VIE_MODU_DEHAZE |  | ||||||
|     int dehazeLevel;   //ȥ<><C8A5>ǿ<EFBFBD>ȣ<EFBFBD>[0, 255] |  | ||||||
|     int dehazeTrans;   //<><CDB8>ֵ<EFBFBD><D6B5>[0, 255] |  | ||||||
|     int dehazeBright;  //<2F><><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD><EFBFBD>[0, 255] |  | ||||||
|     //PLAYM4_VIE_MODU_DENOISE |  | ||||||
|     int denoiseLevel;  //ȥ<><C8A5>ǿ<EFBFBD>ȣ<EFBFBD>[0, 255] |  | ||||||
|     //PLAYM4_VIE_MODU_SHARPEN |  | ||||||
|     int usmAmount;     //<2F><><EFBFBD><EFBFBD>ǿ<EFBFBD>ȣ<EFBFBD>[0, 255] |  | ||||||
|     int usmRadius;     //<2F>뾶<F1BBAFB0><EBBEB6>[1, 15] |  | ||||||
|     int usmThreshold;  //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>[0, 255] |  | ||||||
|     //PLAYM4_VIE_MODU_DEBLOCK |  | ||||||
|     int deblockLevel;  //ȥ<><C8A5>ǿ<EFBFBD>ȣ<EFBFBD>[0, 100] |  | ||||||
|     //PLAYM4_VIE_MODU_LENS |  | ||||||
|     int lensWarp;      //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[-256, 255] |  | ||||||
|     int lensZoom;      //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[-256, 255] |  | ||||||
|     //PLAYM4_VIE_MODU_CRB |  | ||||||
|     //<2F><><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD> |  | ||||||
| } PLAYM4_VIE_PARACONFIG; |  | ||||||
|  |  | ||||||
| typedef enum _PLAYM4_VIE_MODULES |  | ||||||
| { |  | ||||||
|     PLAYM4_VIE_MODU_ADJ      = 0x00000001, //ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     PLAYM4_VIE_MODU_EHAN     = 0x00000002, //<2F>ֲ<EFBFBD><D6B2><EFBFBD>ǿģ<C7BF><C4A3> |  | ||||||
|     PLAYM4_VIE_MODU_DEHAZE   = 0x00000004, //ȥ<><C8A5>ģ<EFBFBD><C4A3> |  | ||||||
|     PLAYM4_VIE_MODU_DENOISE  = 0x00000008, //ȥ<><C8A5>ģ<EFBFBD><C4A3> |  | ||||||
|     PLAYM4_VIE_MODU_SHARPEN  = 0x00000010, //<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> |  | ||||||
|     PLAYM4_VIE_MODU_DEBLOCK  = 0x00000020, //ȥ<><C8A5><EFBFBD>˲<EFBFBD>ģ<EFBFBD><C4A3> |  | ||||||
|     PLAYM4_VIE_MODU_CRB      = 0x00000040, //ɫ<><C9AB>ƽ<EFBFBD><C6BD>ģ<EFBFBD><C4A3> |  | ||||||
|     PLAYM4_VIE_MODU_LENS     = 0x00000080, //<2F><>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> |  | ||||||
| }PLAYM4_VIE_MODULES; |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| //<2F><><EFBFBD>ùر<C3B9>/<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> -- NO SUPPORT |  | ||||||
| //dwModuFlag<61><67>ӦPLAYM4_VIE_MODULES<45><53>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>鿪<EFBFBD><E9BFAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϵIJ<CFB5><C4B2><EFBFBD>; |  | ||||||
| //<2F>ر<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD>õIJ<C3B5><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| //<2F><><EFBFBD><EFBFBD><EFBFBD>ӿڵ<D3BF><DAB5>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸýӿڿ<D3BF><DABF><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><F3A3BBB7><EFBFBD><F2A3ACB7>ش<EFBFBD><D8B4><EFBFBD> |  | ||||||
| PLAYM4_API int __stdcall PlayM4_VIE_SetModuConfig(int nPort, int nModuFlag, int bEnable); |  | ||||||
|  |  | ||||||
| //<2F><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULLȫͼ<C8AB><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫͼ<C8AB><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫͼ<C8AB><CDBC><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>16*16<31><36><EFBFBD><EFBFBD> -- NO SUPPORT |  | ||||||
| //<2F><>֧<EFBFBD><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD>˵4<CBB5><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>汾<EFBFBD><E6B1BE><EFBFBD><EFBFBD>ֻ֧<D6BB><D6A7>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5>ͱ<EFBFBD><CDB1><EFBFBD> |  | ||||||
| PLAYM4_API int __stdcall PlayM4_VIE_SetRegion(int nPort, int nRegNum, HKRECT* pRect); |  | ||||||
|  |  | ||||||
| //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> -- NO SUPPORT |  | ||||||
| PLAYM4_API int __stdcall PlayM4_VIE_GetModuConfig(int nPort, int* pdwModuFlag); |  | ||||||
|  |  | ||||||
| //<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD> |  | ||||||
| //δ<><CEB4><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD> -- NO SUPPORT |  | ||||||
| PLAYM4_API int __stdcall PlayM4_VIE_SetParaConfig(int nPort, PLAYM4_VIE_PARACONFIG* pParaConfig); |  | ||||||
|  |  | ||||||
| //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD> -- NO SUPPORT |  | ||||||
| PLAYM4_API int __stdcall PlayM4_VIE_GetParaConfig(int nPort, PLAYM4_VIE_PARACONFIG* pParaConfig); |  | ||||||
|  |  | ||||||
| // ˽<><CBBD><EFBFBD><EFBFBD>Ϣģ<CFA2><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| typedef enum _PLAYM4_PRIDATA_RENDER |  | ||||||
| {	 |  | ||||||
|     PLAYM4_RENDER_ANA_INTEL_DATA   = 0x00000001, //<2F><><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD> |  | ||||||
|     PLAYM4_RENDER_MD               = 0x00000002, //<2F>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     PLAYM4_RENDER_ADD_POS          = 0x00000004, //POS<4F><53>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     PLAYM4_RENDER_ADD_PIC          = 0x00000008, //ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ |  | ||||||
|     PLAYM4_RENDER_FIRE_DETCET      = 0x00000010, //<2F>ȳ<EFBFBD><C8B3><EFBFBD><EFBFBD><EFBFBD>Ϣ |  | ||||||
|     PLAYM4_RENDER_TEM              = 0x00000020, //<2F>¶<EFBFBD><C2B6><EFBFBD>Ϣ |  | ||||||
| }PLAYM4_PRIDATA_RENDER; |  | ||||||
|  |  | ||||||
| typedef enum _PLAYM4_FIRE_ALARM |  | ||||||
| { |  | ||||||
|     PLAYM4_FIRE_FRAME_DIS             = 0x00000001, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ |  | ||||||
|     PLAYM4_FIRE_MAX_TEMP              = 0x00000002, //<2F><><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD> |  | ||||||
|     PLAYM4_FIRE_MAX_TEMP_POSITION     = 0x00000004, //<2F><><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>ʾ |  | ||||||
|     PLAYM4_FIRE_DISTANCE              = 0x00000008, //<2F><><EFBFBD><EFBFBD><EFBFBD>¶Ⱦ<C2B6><C8BE><EFBFBD> |  | ||||||
| }PLAYM4_FIRE_ALARM; |  | ||||||
|  |  | ||||||
| typedef enum _PLAYM4_TEM_FLAG |  | ||||||
| { |  | ||||||
|     PLAYM4_TEM_REGION_BOX             = 0x00000001, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     PLAYM4_TEM_REGION_LINE            = 0x00000002, //<2F>߲<EFBFBD><DFB2><EFBFBD> |  | ||||||
|     PLAYM4_TEM_REGION_POINT           = 0x00000004, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| }PLAYM4_TEM_FLAG; |  | ||||||
|  |  | ||||||
| // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD> |  | ||||||
| PLAYM4_API int __stdcall PlayM4_RenderPrivateData(int nPort, int nIntelType, int bTrue); |  | ||||||
| ///<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ӿ<EFBFBD><D3BF><EFBFBD> |  | ||||||
| PLAYM4_API int __stdcall PlayM4_RenderPrivateDataEx(int nPort, int nIntelType, int nSubType, int bTrue); |  | ||||||
|  |  | ||||||
| //ENCRYPT Info |  | ||||||
| typedef struct{ |  | ||||||
|     long nVideoEncryptType;  //<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     long nAudioEncryptType;  //<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     long nSetSecretKey;      //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ã<EFBFBD>1<EFBFBD><31>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><D4BF>0<EFBFBD><30>ʾû<CABE><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ |  | ||||||
| }ENCRYPT_INFO; |  | ||||||
|  |  | ||||||
| // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>,nType=0<><30>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD><DCB1><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>仯<EFBFBD>ͻص<CDBB><D8B5><EFBFBD>nType=1<><31>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD> |  | ||||||
| PLAYM4_API int __stdcall PlayM4_SetEncryptTypeCallBack(int nPort, unsigned int nType, void (CALLBACK* EncryptTypeCBFun)(int nPort, ENCRYPT_INFO* pEncryptInfo, void* nUser, int nReserved2), void* nUser); |  | ||||||
|  |  | ||||||
| #define PLAYM4_MEDIA_HEAD     1   //ϵͳͷ<CDB3><CDB7><EFBFBD><EFBFBD> |  | ||||||
| #define PLAYM4_VIDEO_DATA     2   //<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| #define PLAYM4_AUDIO_DATA     3   //<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| #define PLAYM4_PRIVT_DATA     4   //˽<><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|  |  | ||||||
| //Ԥ¼<D4A4><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ- NO SUPPORT |  | ||||||
| typedef struct   |  | ||||||
| { |  | ||||||
|     long nType;                     // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>ļ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD> |  | ||||||
|     long nStamp;                    // ʱ<><CAB1><EFBFBD><EFBFBD> |  | ||||||
|     long nFrameNum;                 // ֡<><D6A1> |  | ||||||
|     long nBufLen;                   // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> |  | ||||||
|     char* pBuf;                     // ֡<><D6A1><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>֡Ϊ<D6A1><CEAA>λ<EFBFBD>ص<EFBFBD> |  | ||||||
|     PLAYM4_SYSTEM_TIME  stSysTime;  // ȫ<><C8AB>ʱ<EFBFBD><CAB1> |  | ||||||
| }RECORD_DATA_INFO; |  | ||||||
|  |  | ||||||
| //<2F><><EFBFBD><EFBFBD>Ԥ¼<D4A4>أ<F1BFAAB9>bFlag=1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>bFlag=0<>ر<EFBFBD>-- NO SUPPORT |  | ||||||
| PLAYM4_API int __stdcall PlayM4_SetPreRecordFlag(int nPort, int bFlag); |  | ||||||
|  |  | ||||||
| //Ԥ¼<D4A4><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻص<DDBB>- NO SUPPORT |  | ||||||
| PLAYM4_API int __stdcall PlayM4_SetPreRecordCallBack(int nPort, void (CALLBACK* PreRecordCBfun)(int nPort, RECORD_DATA_INFO* pRecordDataInfo, void* pUser), void* pUser); |  | ||||||
|  |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|     long    lDataType;          //˽<><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     long    lDataStrVersion;    //<2F><><EFBFBD>ݷ<EFBFBD><DDB7>صĽṹ<C4BD><E1B9B9><EFBFBD>汾<EFBFBD><E6B1BE><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>Ϊ<EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     long    lDataTimeStamp; |  | ||||||
|     long    lDataLength; |  | ||||||
|     char*   pData; |  | ||||||
| }AdditionDataInfo; |  | ||||||
|  |  | ||||||
| PLAYM4_API int __stdcall PlayM4_SetAdditionDataCallBack(int nPort, unsigned int nSyncType, void (CALLBACK* AdditionDataCBFun)(int nPort, AdditionDataInfo* pstAddDataInfo, void* pUser), void* pUser); |  | ||||||
|  |  | ||||||
| //lType: 1 <20><>ʾ<EFBFBD><CABE>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0>ʾ֡PTZ<54><5A>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD>ʽ<EFBFBD>洢<EFBFBD><E6B4A2>pInfo<66>ڣ<EFBFBD>plLen<65><6E><EFBFBD>س<EFBFBD><D8B3><EFBFBD><EFBFBD><EFBFBD>Ϣ;<3B><><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>pInfo = null<6C><6C><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ泤<DAB4><E6B3A4>plLen |  | ||||||
| PLAYM4_API int __stdcall PlayM4_GetStreamAdditionalInfo(int nPort, int lType, unsigned char* pInfo, int* plLen); |  | ||||||
|  |  | ||||||
| #define PLAYM4_SOURCE_MODULE             0 // <20><><EFBFBD><EFBFBD>Դģ<D4B4><C4A3> |  | ||||||
| #define PLAYM4_DEMUX_MODULE              1 // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> |  | ||||||
| #define PLAYM4_DECODE_MODULE             2 // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> |  | ||||||
| #define PLAYM4_RENDER_MODULE             3 // <20><>Ⱦģ<C8BE><C4A3> |  | ||||||
|  |  | ||||||
| #define PLAYM4_RTINFO_HARDDECODE_ERROR          0 // Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD> |  | ||||||
| #define PLAYM4_RTINFO_SOFTDECODE_ERROR          1 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD>֣<EFBFBD> |  | ||||||
| #define PLAYM4_RTINFO_MEDIAHEADER_ERROR         2 // ý<><C3BD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD> |  | ||||||
| #define PLAYM4_RTINFO_SWITCH_SOFT_DEC           3 // <20>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| #define PLAYM4_RTINFO_ALLOC_MEMORY_ERROR        4 // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7> |  | ||||||
| #define PLAYM4_RTINFO_ENCRYPT_ERROR             5 // <20><>Կ<EFBFBD><D4BF><EFBFBD><EFBFBD> |  | ||||||
| #define PLAYM4_RTINFO_RENDER_OVER               8 // <20><>Ⱦһ֡<D2BB><D6A1><EFBFBD><EFBFBD> |  | ||||||
| #define PLAYM4_RTINFO_ERR_PRESENT               16 // <20><>Ⱦ<EFBFBD><C8BE>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>[<5B><>ǰ<EFBFBD><C7B0>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱦʧ<C8BE><CAA7>,<2C>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>] |  | ||||||
| #define PLAYM4_RTINFO_IDMX_DATA_ERROR           32 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7> |  | ||||||
| #define PLAYM4_RTINFO_DECODE_PARAM_ERROR        64 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7> |  | ||||||
| #define PLAYM4_RTINFO_SOFTDECODE_DATA_ERROR     128 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD> |  | ||||||
|  |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|     int            nRunTimeModule;     //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ģ<EFBFBD>飬<EFBFBD>ݶ<EFBFBD>2Ϊ<32><CEAA><EFBFBD><EFBFBD>ģ<EFBFBD>飬<EFBFBD><E9A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ |  | ||||||
|     int            nStrVersion;        //<2F><><EFBFBD>ݷ<EFBFBD><DDB7>صĽṹ<C4BD><E1B9B9><EFBFBD>汾<EFBFBD><E6B1BE><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>Ϊ<EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD>,<2C><>һ<EFBFBD><D2BB><EFBFBD>汾<EFBFBD><E6B1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x0001 |  | ||||||
|     int            nFrameTimeStamp;    //֡<><D6A1> |  | ||||||
|     int            nFrameNum;          //ʱ<><CAB1><EFBFBD><EFBFBD> |  | ||||||
|     int            nErrorCode;         //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,0ΪӲ<CEAA><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     unsigned char  reserved[12];       //<2F><><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD> |  | ||||||
| }RunTimeInfo; |  | ||||||
|  |  | ||||||
| ///<ʵʱ<CAB5><CAB1>Ϣ<EFBFBD>ص<EFBFBD><D8B5>ӿ<EFBFBD> |  | ||||||
| PLAYM4_API int __stdcall PlayM4_SetRunTimeInfoCallBackEx(int nPort, int nModule, void (CALLBACK* RunTimeInfoCBFun)(int nPort, RunTimeInfo* pstRunTimeInfo, void* pUser), void* pUser); |  | ||||||
|  |  | ||||||
| // 1<><31>SetRunTimeInfoCallBackEx<45>ӿڣ<D3BF>nErrorCode<64><65><EFBFBD><EFBFBD>6<EFBFBD><36>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>8<EFBFBD><38><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD>չ<EFBFBD><D5B9>ʽ 16<31><36>32<33><32>64<36><34><EFBFBD>Ҵ<EFBFBD>8<EFBFBD><38>ʼ<EFBFBD><CABC>ϢĬ<CFA2>Ϲرղ<D8B1><D5B2><EFBFBD><EFBFBD>͡<EFBFBD> |  | ||||||
| // 2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ƽӿڣ<D3BF><DAA3><EFBFBD><EFBFBD>ƴ<EFBFBD>8<EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>֧<EFBFBD>ִ<EFBFBD>8<EFBFBD><38>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ƴ<EFBFBD><C6B4>ģʽ 8|16|32 <20><><EFBFBD>ַ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͡<EFBFBD> |  | ||||||
| // 3<><33>nType<70><65><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4>룬nFlag<61><67>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>лص<D0BB><D8B5><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD> |  | ||||||
| PLAYM4_API int __stdcall PlayM4_SetRunTimeInfoCallbackType(int nPort, int nModule, unsigned int nType, int nFlag); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ///<<3C><>Ⱦ<EFBFBD><C8BE>ʾ<EFBFBD><CABE><EFBFBD>ؽӿ<D8BD> |  | ||||||
| #ifndef PLAYM4_HIKD3D11_TAG |  | ||||||
| #define PLAYM4_HIKD3D11_TAG |  | ||||||
|  |  | ||||||
| ///<<3C><>Ⱦץͼ<D7A5>ṹ<EFBFBD><E1B9B9> |  | ||||||
| typedef struct _tagD3D11_PIC_INFO_ |  | ||||||
| { |  | ||||||
|     unsigned int   nPicMode;     //ץͼģʽ<C4A3><CABD>0-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ʷֱ<CAB7><D6B1><EFBFBD>ץͼ(֮ǰץͼģʽ)<29><>1-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>洫<EFBFBD><E6B4AB><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>ץͼ<D7A5><CDBC>nPicWidth*nPicHeightΪ<74><CEAA>ʾ<EFBFBD><CABE><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD>ʱЧ<CAB1><D0A7><EFBFBD><EFBFBD><EFBFBD>ѣ<EFBFBD> |  | ||||||
|     unsigned char* pBuf;         //ץͼ<D7A5><CDBC><EFBFBD><EFBFBD>buffer |  | ||||||
|     unsigned int   nBufSize;     //<2F><><EFBFBD><EFBFBD>buffer<65><72>С-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>nPicModeΪ0<CEAA><30>Ϊ֮ǰ<D6AE>ĸ<EFBFBD><C4B8>ݻ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>룻<EFBFBD><EBA3BB><EFBFBD><EFBFBD>nPicModeΪ1<CEAA><31><EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õķֱ<C4B7><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뻺<EFBFBD>棩 |  | ||||||
|     unsigned int*  pPicSize;     //ʵ<><CAB5>ͼƬ<CDBC><C6AC>С |  | ||||||
|     unsigned int   nPicWidth;    //<2F><><EFBFBD><EFBFBD>ץͼ<D7A5><CDBC>-nPicModeΪ1ʱ<31><CAB1>Ч<EFBFBD><D0A7><EFBFBD>ҿ<EFBFBD>>=32,nPicWidth*nPicHeight<5000w<30>ֱ<EFBFBD><D6B1>ʡ<EFBFBD> |  | ||||||
|     unsigned int   nPicHeight;   //<2F><><EFBFBD><EFBFBD>ץͼ<D7A5><CDBC>-nPicModeΪ1ʱ<31><CAB1>Ч<EFBFBD><D0A7><EFBFBD>Ҹ<EFBFBD>>=32,nPicWidth*nPicHeight<5000w<30>ֱ<EFBFBD><D6B1>ʡ<EFBFBD> |  | ||||||
|     unsigned char  chReserve[8]; //reserve<76><65><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD> |  | ||||||
| }D3D_PIC_INFO; |  | ||||||
|  |  | ||||||
| /*<2A><>Ⱦͼ<C8BE><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/ |  | ||||||
| typedef enum tagPLAYM4PostProcType |  | ||||||
| { |  | ||||||
|     PLAYM4_PPT_BRIGHTNESS               = 0x1,            ///< <20><><EFBFBD><EFBFBD>   [-1.0, 1.0] |  | ||||||
|     PLAYM4_PPT_HUE                      = 0x2,            ///< ɫ<><C9AB>   [0.0, 1.0]----0.166<EFBFBD>ۼ<EFBFBD>Ϊһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD>仯<EFBFBD><EFBFBD>0<EFBFBD><EFBFBD>1Ϊͬһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ |  | ||||||
|     PLAYM4_PPT_SATURATION               = 0x3,            ///< <20><><EFBFBD>Ͷ<EFBFBD> [-1.0, 1.0] |  | ||||||
|     PLAYM4_PPT_CONTRAST                 = 0x4,            ///< <20>Աȶ<D4B1> [-1.0, 1.0] |  | ||||||
|     PLAYM4_PPT_SHARPNESS                = 0x5,            ///< <20><><EFBFBD><EFBFBD>   [ 0.0, 1.0] |  | ||||||
| }PLAYM4PostProcType; |  | ||||||
|  |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| ///<<3C><>Ⱦ<EFBFBD><C8BE>ץͼ:nType:0-jpeg,1-bmp. |  | ||||||
| PLAYM4_API int __stdcall PlayM4_GetD3DCapture(int nPort, unsigned int nType, D3D_PIC_INFO* pstPicInfo); |  | ||||||
|  |  | ||||||
| ///<<3C><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD> |  | ||||||
| PLAYM4_API int __stdcall PlayM4_SetD3DPostProcess(int nPort, PLAYM4PostProcType nPostType, float fValue); |  | ||||||
|  |  | ||||||
| ///<<3C><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD> |  | ||||||
| PLAYM4_API int __stdcall PlayM4_GetD3DPostProcess(int nPort, PLAYM4PostProcType nPostType, float* fValue); |  | ||||||
|  |  | ||||||
| ///<<3C>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⣩-playǰ<79><C7B0><EFBFBD><EFBFBD> |  | ||||||
| PLAYM4_API int __stdcall PlayM4_SetConfigFontPath(int nPort, char* pFontPath); |  | ||||||
|  |  | ||||||
| // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ȡmp4<70><34>װ<EFBFBD><D7B0><EFBFBD>߶<EFBFBD>λƫ<CEBB><C6AB> |  | ||||||
| PLAYM4_API int __stdcall PlayM4_GetMpOffset(int nPort, int nTime, int* nOffset); |  | ||||||
|  |  | ||||||
| ///<ʱ<><CAB1><EFBFBD>ı<EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>-ͬ<><CDAC><EFBFBD>ط<EFBFBD> |  | ||||||
| PLAYM4_API bool __stdcall PlayM4_SetSupplementaryTimeZone(int nPort, int nTimeZone);  |  | ||||||
| ///<<3C><><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><F2B7B5BB><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>-ͬ<><CDAC><EFBFBD>ط<EFBFBD> |  | ||||||
| PLAYM4_API bool __stdcall PlayM4_GetSupplementaryTimeZone(int nPort, int* pTimeZone);  |  | ||||||
|  |  | ||||||
| //////////////////////////////////// |  | ||||||
|  |  | ||||||
| ///<<3C><><EFBFBD>ڴ<EFBFBD>С<EFBFBD>ı<EFBFBD>֪ͨ<CDA8>ӿ<EFBFBD> |  | ||||||
| PLAYM4_API int __stdcall PlayM4_WndResolutionChange(int nPort);//new add |  | ||||||
|  |  | ||||||
| //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> |  | ||||||
| PLAYM4_API int __stdcall PlayM4_SetRunTimeInfoCallBack(int nPort, void (CALLBACK* RunTimeInfoCBFun)(int nPort, RunTimeInfo* pstRunTimeInfo, void* pUser), void* pUser); |  | ||||||
| int  PlayM4_RigisterDrawFun(int nPort,void (CALLBACK* DrawFun)(int nPort,PLAYM4_HDC hDc,void* nUser),void* nUser); |  | ||||||
| int  PlayM4_SetDecCallBack(int nPort,void (CALLBACK* DecCBFun)(int nPort,char* pBuf,int nSize,FRAME_INFO * pFrameInfo, void* nReserved1,int nReserved2)); |  | ||||||
| int  PlayM4_SetDecCallBackEx(int nPort,void (CALLBACK* DecCBFun)(int nPort,char * pBuf,int nSize,FRAME_INFO * pFrameInfo, void* nReserved1,int nReserved2), char* pDest, int nDestSize); |  | ||||||
| int  PlayM4_SetTimerType(int nPort,unsigned int nTimerType,unsigned int nReserved); |  | ||||||
| int  PlayM4_GetTimerType(int nPort,unsigned int *pTimerType,unsigned int *pReserved); |  | ||||||
|  |  | ||||||
| int  PlayM4_SetDisplayMode(int nPort, unsigned int dwType); |  | ||||||
| int  PlayM4_SetVideoWindow(int nPort, unsigned int nRegionNum, PLAYM4_HWND hWnd); |  | ||||||
| ///////////////////////////////////////////////////////////////////////////// |  | ||||||
|  |  | ||||||
| ////////////////NO SUPPORT/////////////////////////////////////////////////// |  | ||||||
|  |  | ||||||
| int          PlayM4_InitDDraw(PLAYM4_HWND hWnd); |  | ||||||
| int          PlayM4_RealeseDDraw(); |  | ||||||
| #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/"; |  | ||||||
| int          PlayM4_InitDDrawDevice(); |  | ||||||
| void         PlayM4_ReleaseDDrawDevice(); |  | ||||||
| int          PlayM4_SetDDrawDevice(int nPort, unsigned int nDeviceNum); |  | ||||||
| int          PlayM4_SetDDrawDeviceEx(int nPort,unsigned int nRegionNum,unsigned int nDeviceNum); |  | ||||||
| int          PlayM4_GetDDrawDeviceInfo(unsigned int nDeviceNum, char* lpDriverDescription, unsigned int nDespLen, char* lpDriverName, unsigned int nNameLen, HMONITOR* hhMonitor); |  | ||||||
| int          PlayM4_GetCapsEx(unsigned int nDDrawDeviceNum); |  | ||||||
| unsigned int PlayM4_GetDDrawDeviceTotalNums(); |  | ||||||
| #endif |  | ||||||
| int          PlayM4_GetCaps(); |  | ||||||
| int          PlayM4_OpenStreamEx(int nPort, unsigned char* pFileHeadBuf, unsigned int nSize, unsigned int nBufPoolSize); |  | ||||||
| int          PlayM4_CloseStreamEx(int nPort); |  | ||||||
| int          PlayM4_InputVideoData(int nPort, unsigned char* pBuf, unsigned int nSize); |  | ||||||
| int          PlayM4_InputAudioData(int nPort, unsigned char* pBuf, unsigned int nSize); |  | ||||||
| int          PlayM4_GetFileSpecialAttr(int nPort, unsigned int* pTimeStamp, unsigned int* pFileNum, unsigned int* pReserved); |  | ||||||
| //int          PlayM4_SetOverlayMode(int nPort, int bOverlay, COLORREF colorKey); |  | ||||||
| int          PlayM4_GetOverlayMode(int nPort); |  | ||||||
| int          PlayM4_SetOverlayFlipMode(int nPort, int bTrue); |  | ||||||
| //COLORREF     PlayM4_GetColorKey(int nPort); |  | ||||||
| int          PlayM4_SetPicQuality(int nPort, int bHighQuality); |  | ||||||
| int          PlayM4_GetPictureQuality(int nPort, int* bHighQuality); |  | ||||||
| int          PlayM4_ResetSourceBufFlag(int nPort); |  | ||||||
| int          PlayM4_SetDisplayType(int nPort, int nType); |  | ||||||
| int          PlayM4_GetDisplayType(int nPort); |  | ||||||
| int          PlayM4_SyncToAudio(int nPort, int bSyncToAudio); |  | ||||||
| int          PlayM4_RefreshPlayEx(int nPort, unsigned int nRegionNum); |  | ||||||
| int          PlayM4_AdjustWaveAudio(int nPort, int nCoefficient); |  | ||||||
| int          PlayM4_SetPlayMode(int nPort, int bNormal); |  | ||||||
| int          PlayM4_SetColor(int nPort, unsigned int nRegionNum, int nBrightness, int nContrast, int nSaturation, int nHue); |  | ||||||
| int          PlayM4_GetColor(int nPort, unsigned int nRegionNum, int* pBrightness, int* pContrast, int* pSaturation, int* pHue); |  | ||||||
| int          PlayM4_SetImageSharpen(int nPort, unsigned int nLevel); |  | ||||||
| int          PlayM4_SetDeflash(int nPort, int bDefalsh); |  | ||||||
| int          PlayM4_CheckDiscontinuousFrameNum(int nPort, int bCheck); |  | ||||||
| int          PlayM4_SetFileEndMsg(int nPort, PLAYM4_HWND hWnd, unsigned int nMsg); |  | ||||||
| int          PlayM4_SetVerifyCallBack(int nPort, unsigned int nBeginTime, unsigned int nEndTime, void (__stdcall* funVerify)(int nPort, FRAME_POS* pFilePos, unsigned int bIsVideo, unsigned int nUser), unsigned int nUser); |  | ||||||
| int          PlayM4_SetEncChangeMsg(int nPort, PLAYM4_HWND hWnd, unsigned int nMsg); |  | ||||||
| int          PlayM4_SetGetUserDataCallBack(int nPort, void(CALLBACK* funGetUserData)(int nPort, unsigned char* pUserBuf, unsigned int nBufLen, unsigned int nUser), unsigned int nUser); |  | ||||||
| int          PlayM4_SetSourceBufCallBack(int nPort, unsigned int nThreShold, void (CALLBACK* SourceBufCallBack)(int nPort, unsigned int nBufSize, unsigned int dwUser, void* pResvered), unsigned int dwUser, void* pReserved); |  | ||||||
| int          PlayM4_GetOriginalFrameCallBack(int nPort, int bIsChange, int bNormalSpeed, int nStartFrameNum, int nStartStamp, int nFileHeader, void(CALLBACK *funGetOrignalFrame)(int nPort, FRAME_TYPE* frameType, int nUser), int nUser); |  | ||||||
| int          PlayM4_GetThrowBFrameCallBack(int nPort, void(CALLBACK* funThrowBFrame)(int nPort, unsigned int nBFrame, unsigned int nUser), unsigned int nUser); |  | ||||||
| int          PlayM4_SetAudioCallBack(int nPort, void (__stdcall* funAudio)(int nPort, char* pAudioBuf, int nSize, int nStamp, int nType, int nUser), int nUser); |  | ||||||
| //motionflow |  | ||||||
| PLAYM4_API int __stdcall PlayM4_MotionFlow(int nPort, unsigned int dwAdjustType); |  | ||||||
| 	 |  | ||||||
|  |  | ||||||
| //////////////////////////////////////////////////////////////////////////////// |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
|     } |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #endif //_PLAYM4_H_ |  | ||||||
							
								
								
									
										23761
									
								
								src/json.hpp
									
									
									
									
									
								
							
							
						
						
									
										23761
									
								
								src/json.hpp
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Reference in New Issue
	
	Block a user
	 kunmeng
					kunmeng