test rtsp and isp
This commit is contained in:
parent
8567012936
commit
8aff13ac18
|
@ -31,6 +31,6 @@ ftp-tui:
|
|||
termscp -P "" ftp://root@192.168.137.3:21:/
|
||||
|
||||
tty:
|
||||
minicom -D /dev/ttyUSB0 -b 115200
|
||||
sudo minicom -D /dev/ttyUSB0 -b 115200
|
||||
|
||||
all: build sync
|
||||
|
|
|
@ -83,6 +83,7 @@ target("sample_common")
|
|||
add_defines(
|
||||
"SENSOR0_TYPE=GALAXYCORE_GC2053_MIPI_2M_30FPS_10BIT",
|
||||
"SENSOR1_TYPE=GALAXYCORE_GC2053_MIPI_2M_30FPS_10BIT",
|
||||
"_DEFAULT_SOURCE",
|
||||
{public = true}
|
||||
)
|
||||
add_deps("sample_audio")
|
||||
|
|
|
@ -4,6 +4,9 @@
|
|||
#include "stdbool.h"
|
||||
#include "stdint.h"
|
||||
|
||||
#define SUCCESS 0
|
||||
#define FAILED (-1)
|
||||
|
||||
#ifndef ARRAY_LENGTH
|
||||
#define ARRAY_LENGTH(arr) (sizeof(arr) / sizeof(arr[0]))
|
||||
#endif
|
||||
|
|
10
src/main.cpp
10
src/main.cpp
|
@ -2,6 +2,7 @@
|
|||
#include <experimental/filesystem>
|
||||
|
||||
#include "hi_common.h"
|
||||
#include "sample_comm.h"
|
||||
#include "zlog.h"
|
||||
|
||||
#include "isp/eb3516_video.h"
|
||||
|
@ -38,9 +39,16 @@ int main(int argc, char** argv) {
|
|||
|
||||
eb3516VideoInit();
|
||||
eb3516VideoStart();
|
||||
eb3516VideoStop();
|
||||
// eb3516Yolov3Init("./coco_yolov3_detect.wk", "./dog_bike_car_416x416.bgr");
|
||||
// nnie_init();
|
||||
// nnie_start();
|
||||
|
||||
PAUSE();
|
||||
|
||||
// nnie_stop();
|
||||
// eb3516Yolov3Exit();
|
||||
eb3516VideoStop();
|
||||
|
||||
|
||||
zlog_fini();
|
||||
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
#include "hi_comm_snap.h"
|
||||
#include "hi_common.h"
|
||||
#include "hi_debug.h"
|
||||
#include "hi_type.h"
|
||||
#include "mpi_snap.h"
|
||||
#include "sample_comm.h"
|
||||
#include "zlog.h"
|
||||
|
@ -29,6 +31,8 @@ static VB_CONFIG_S g_stVbConfig = {0};
|
|||
static SAMPLE_VO_CONFIG_S stVoConfig;
|
||||
static SAMPLE_VPSS_CONFIG_S g_stVpss0Config = {0};
|
||||
static SAMPLE_VPSS_CONFIG_S g_stVpss1Config = {0};
|
||||
static VI_PIPE videoPipe = 0;
|
||||
static VI_PIPE snapPipe = 1;
|
||||
|
||||
// 注意此处不能为通道 0, 因为 hi3516 的 VPSS 通道 0 只支持放大,
|
||||
// 其它通道只支持缩小
|
||||
|
@ -93,10 +97,10 @@ static HI_S32 VPSS_GetParams(SAMPLE_VPSS_CONFIG_S *pstVpssConfig,
|
|||
return HI_SUCCESS;
|
||||
}
|
||||
|
||||
bool eb3516VideoInit(void) {
|
||||
HI_BOOL eb3516VideoInit(void) {
|
||||
log_video = zlog_get_category("eb3516_video");
|
||||
if (!log_video) {
|
||||
return false;
|
||||
return HI_FALSE;
|
||||
}
|
||||
|
||||
// Get Sensor(VI) Info: picture size , frame rate
|
||||
|
@ -131,8 +135,8 @@ bool eb3516VideoInit(void) {
|
|||
g_stViConfig.astViInfo[0].stDevInfo.ViDev = 0;
|
||||
g_stViConfig.astViInfo[0].stDevInfo.enWDRMode = WDR_MODE_NONE;
|
||||
// 设置 VI PIPE 信息
|
||||
g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0] = 0; // video pipe
|
||||
g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1] = 1; // snap pipe
|
||||
g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0] = videoPipe; // video pipe
|
||||
g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1] = snapPipe; // snap pipe
|
||||
g_stViConfig.astViInfo[0].stPipeInfo.aPipe[2] = -1;
|
||||
g_stViConfig.astViInfo[0].stPipeInfo.aPipe[3] = -1;
|
||||
g_stViConfig.astViInfo[0].stPipeInfo.enMastPipeMode = VI_OFFLINE_VPSS_OFFLINE;
|
||||
|
@ -146,20 +150,21 @@ bool eb3516VideoInit(void) {
|
|||
// 设置 VI 抓拍信息
|
||||
g_stViConfig.astViInfo[0].stSnapInfo.bSnap = HI_TRUE;
|
||||
g_stViConfig.astViInfo[0].stSnapInfo.bDoublePipe = HI_TRUE;
|
||||
g_stViConfig.astViInfo[0].stSnapInfo.VideoPipe = 0;
|
||||
g_stViConfig.astViInfo[0].stSnapInfo.SnapPipe = 1;
|
||||
g_stViConfig.astViInfo[0].stSnapInfo.VideoPipe = videoPipe;
|
||||
g_stViConfig.astViInfo[0].stSnapInfo.SnapPipe = snapPipe;
|
||||
g_stViConfig.astViInfo[0].stSnapInfo.enVideoPipeMode =
|
||||
VI_OFFLINE_VPSS_OFFLINE;
|
||||
g_stViConfig.astViInfo[0].stSnapInfo.enSnapPipeMode = VI_OFFLINE_VPSS_OFFLINE;
|
||||
|
||||
// 配置 VPSS
|
||||
VPSS_GetParams(&g_stVpss0Config, &stSize, false);
|
||||
VPSS_GetParams(&g_stVpss1Config, &stSize, true);
|
||||
VPSS_GetParams(&g_stVpss0Config, &stSize, HI_FALSE);
|
||||
VPSS_GetParams(&g_stVpss1Config, &stSize, HI_TRUE);
|
||||
|
||||
zlog_debug(log_video, "eb3516 Video Init Finish...");
|
||||
return HI_TRUE;
|
||||
}
|
||||
|
||||
bool eb3516VideoStart(void) {
|
||||
HI_S32 eb3516VideoStart(void) {
|
||||
HI_S32 s32Ret = 0;
|
||||
|
||||
// 初始化 VB 和 MPI 系统
|
||||
|
@ -208,18 +213,18 @@ bool eb3516VideoStart(void) {
|
|||
zlog_debug(log_video, "eb3516 VPSS1 Start Success...");
|
||||
|
||||
// 绑定 VI->VPSS
|
||||
s32Ret = SAMPLE_COMM_VI_Bind_VPSS(
|
||||
g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0],
|
||||
g_stViConfig.astViInfo[0].stChnInfo.ViChn, g_stVpss0Config.s32GrpId);
|
||||
s32Ret = SAMPLE_COMM_VI_Bind_VPSS(videoPipe,
|
||||
g_stViConfig.astViInfo[0].stChnInfo.ViChn,
|
||||
g_stVpss0Config.s32GrpId);
|
||||
if (s32Ret != HI_SUCCESS) {
|
||||
zlog_error(log_video, "VI Video Pipe bind VPSS0 failed with %#x!\n",
|
||||
s32Ret);
|
||||
goto EXIT_VPSS_STOP;
|
||||
}
|
||||
zlog_debug(log_video, "eb3516 VI Bind VPSS0 Success");
|
||||
s32Ret = SAMPLE_COMM_VI_Bind_VPSS(
|
||||
g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1],
|
||||
g_stViConfig.astViInfo[0].stChnInfo.ViChn, g_stVpss1Config.s32GrpId);
|
||||
s32Ret = SAMPLE_COMM_VI_Bind_VPSS(snapPipe,
|
||||
g_stViConfig.astViInfo[0].stChnInfo.ViChn,
|
||||
g_stVpss1Config.s32GrpId);
|
||||
if (s32Ret != HI_SUCCESS) {
|
||||
zlog_error(log_video, "VI Snap Pipe bind VPSS1 failed with %#x!\n", s32Ret);
|
||||
goto EXIT_VPSS_STOP;
|
||||
|
@ -240,6 +245,14 @@ bool eb3516VideoStart(void) {
|
|||
}
|
||||
zlog_debug(log_video, "eb3516 VENC Start Success...");
|
||||
|
||||
// 绑定 VPSS[0,1]->VENC[0]
|
||||
s32Ret = SAMPLE_COMM_VPSS_Bind_VENC(g_stVpss0Config.s32GrpId, g_Vpss0Chn[0],
|
||||
g_VencChn[0]);
|
||||
if (s32Ret != HI_SUCCESS) {
|
||||
zlog_error(log_video, "Venc bind Vpss failed with %#x!\n", s32Ret);
|
||||
goto VENC_H265_STOP;
|
||||
}
|
||||
|
||||
/*config vo*/
|
||||
SAMPLE_COMM_VO_GetDefConfig(&stVoConfig);
|
||||
stVoConfig.enDstDynamicRange = DYNAMIC_RANGE_SDR8;
|
||||
|
@ -254,7 +267,8 @@ bool eb3516VideoStart(void) {
|
|||
}
|
||||
zlog_debug(log_video, "eb3516 VO Start Success...");
|
||||
|
||||
/*vpss bind vo*/
|
||||
/*vpss bind vo for hdmi output*/
|
||||
// Bind VPSS[0,1] -> VENC[0] -> VO(HDMI)
|
||||
s32Ret = SAMPLE_COMM_VPSS_Bind_VO(g_stVpss0Config.s32GrpId, g_Vpss0Chn[0],
|
||||
stVoConfig.VoDev, g_VencChn[0]);
|
||||
if (HI_SUCCESS != s32Ret) {
|
||||
|
@ -270,7 +284,7 @@ bool eb3516VideoStart(void) {
|
|||
zlog_error(log_video, "Venc Snap Start failed with %#x\n", s32Ret);
|
||||
goto EXIT_VENC_H264_UNBIND;
|
||||
}
|
||||
// 绑定 VPSS[1,0]->VENC[2]
|
||||
// 绑定 VPSS[1,1]->VENC[2] for snap pic
|
||||
s32Ret = SAMPLE_COMM_VPSS_Bind_VENC(g_stVpss1Config.s32GrpId, g_Vpss1Chn,
|
||||
g_VencChn[2]);
|
||||
if (s32Ret != HI_SUCCESS) {
|
||||
|
@ -285,14 +299,12 @@ bool eb3516VideoStart(void) {
|
|||
stSnapAttr.stNormalAttr.u32FrameCnt = 1;
|
||||
stSnapAttr.stNormalAttr.u32RepeatSendTimes = 1;
|
||||
stSnapAttr.stNormalAttr.bZSL = HI_FALSE;
|
||||
s32Ret = HI_MPI_SNAP_SetPipeAttr(
|
||||
g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1], &stSnapAttr);
|
||||
s32Ret = HI_MPI_SNAP_SetPipeAttr(snapPipe, &stSnapAttr);
|
||||
if (s32Ret != HI_SUCCESS) {
|
||||
zlog_error(log_video, "HI_MPI_SNAP_SetPipeAttr failed with %#x!\n", s32Ret);
|
||||
goto EXIT_VO_STOP;
|
||||
}
|
||||
s32Ret =
|
||||
HI_MPI_SNAP_EnablePipe(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1]);
|
||||
s32Ret = HI_MPI_SNAP_EnablePipe(snapPipe);
|
||||
if (s32Ret != HI_SUCCESS) {
|
||||
zlog_error(log_video, "HI_MPI_SNAP_EnablePipe failed with %#x!\n", s32Ret);
|
||||
goto EXIT_VO_STOP;
|
||||
|
@ -300,8 +312,7 @@ bool eb3516VideoStart(void) {
|
|||
|
||||
// 设置照片 EXIF 信息
|
||||
ISP_DCF_INFO_S stIspDCF;
|
||||
HI_MPI_ISP_GetDCFInfo(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0],
|
||||
&stIspDCF);
|
||||
HI_MPI_ISP_GetDCFInfo(snapPipe, &stIspDCF);
|
||||
strncpy((char *)stIspDCF.stIspDCFConstInfo.au8ImageDescription, "",
|
||||
DCF_DRSCRIPTION_LENGTH);
|
||||
strncpy((char *)stIspDCF.stIspDCFConstInfo.au8Make, "OurEDA",
|
||||
|
@ -310,39 +321,39 @@ bool eb3516VideoStart(void) {
|
|||
DCF_DRSCRIPTION_LENGTH);
|
||||
snprintf((char *)stIspDCF.stIspDCFConstInfo.au8Software,
|
||||
DCF_DRSCRIPTION_LENGTH, "CatFeeder snap");
|
||||
s32Ret = HI_MPI_ISP_SetDCFInfo(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0],
|
||||
s32Ret = HI_MPI_ISP_SetDCFInfo(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1],
|
||||
&stIspDCF);
|
||||
if (s32Ret != HI_SUCCESS) {
|
||||
zlog_error(log_video, "HI_MPI_ISP_SetDCFInfo failed with %#x!\n", s32Ret);
|
||||
}
|
||||
|
||||
// // 绑定 VPSS[0,0]->VENC[0]
|
||||
// s32Ret = SAMPLE_COMM_VPSS_Bind_VENC(g_stVpss0Config.s32GrpId,
|
||||
// g_Vpss0Chn[0],
|
||||
// g_VencChn[0]);
|
||||
// if (s32Ret != HI_SUCCESS) {
|
||||
// zlog_error(log_video, "Venc bind Vpss failed with %#x!\n", s32Ret);
|
||||
// goto EXIT_VENC_H265_STOP;
|
||||
// }
|
||||
|
||||
// Start Venc Stream
|
||||
// // Start Venc Stream
|
||||
// s32Ret = SAMPLE_COMM_VENC_StartGetStream(
|
||||
// g_VencChn + 1, sizeof(g_VencChn) / sizeof(VENC_CHN) - 2);
|
||||
// if (HI_SUCCESS != s32Ret) {
|
||||
// zlog_error(log_video, "Get venc stream failed!\n");
|
||||
// goto EXIT_VENC_H264_STOP;
|
||||
// zlog_error(log_video, "Get venc stream failed!\n");
|
||||
// goto EXIT_VENC_H264_STOP;
|
||||
// }
|
||||
// zlog_debug(log_video, "eb3516 Stream Start Success...");
|
||||
|
||||
// s32Ret = SAMPLE_COMM_VENC_SaveJpeg(g_VencChn[2], 1);
|
||||
// if (HI_SUCCESS != s32Ret) {
|
||||
// zlog_error(log_video, "Save Jpeg Failed");
|
||||
// }
|
||||
printf("=======press any key to trigger=====\n");
|
||||
getchar();
|
||||
|
||||
s32Ret =
|
||||
HI_MPI_SNAP_TriggerPipe(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1]);
|
||||
if (HI_SUCCESS != s32Ret) {
|
||||
SAMPLE_PRT("HI_MPI_SNAP_TriggerPipe failed with %#x!\n", s32Ret);
|
||||
}
|
||||
|
||||
s32Ret = SAMPLE_COMM_VENC_SaveJpeg(g_VencChn[2], 1);
|
||||
if (HI_SUCCESS != s32Ret) {
|
||||
zlog_error(log_video, "Save Jpeg Failed");
|
||||
}
|
||||
|
||||
zlog_info(log_video, "Mpp Start Successfully");
|
||||
// PAUSE();
|
||||
|
||||
// SAMPLE_COMM_VENC_StopGetStream();
|
||||
SAMPLE_COMM_VENC_StopGetStream();
|
||||
return true;
|
||||
|
||||
EXIT_VENC_SNAP_STOP:
|
||||
|
@ -372,7 +383,7 @@ EXIT_SYS_STOP:
|
|||
SAMPLE_COMM_SYS_Exit();
|
||||
EXIT_SYS_RST_CLK:
|
||||
EXIT:
|
||||
return false;
|
||||
return s32Ret;
|
||||
}
|
||||
|
||||
void eb3516VideoStop(void) {
|
||||
|
@ -394,7 +405,7 @@ void eb3516VideoStop(void) {
|
|||
zlog_info(log_video, "Finish Stopping eb3516 Video");
|
||||
}
|
||||
|
||||
bool eb3516GetPic(void) {
|
||||
HI_S32 eb3516GetPic(void) {
|
||||
HI_S32 ret = HI_SUCCESS;
|
||||
|
||||
VIDEO_FRAME_INFO_S stRawInfo;
|
||||
|
@ -404,6 +415,8 @@ bool eb3516GetPic(void) {
|
|||
&stRawInfo, milliSec);
|
||||
if (HI_SUCCESS != ret) {
|
||||
zlog_error(log_video, "Get Pipe Frame Failed");
|
||||
return false;
|
||||
return ret;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
|
@ -1,6 +1,7 @@
|
|||
#ifndef __EB3516_VIDEO_H__
|
||||
#define __EB3516_VIDEO_H__
|
||||
|
||||
#include "hi_type.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C"{
|
||||
#endif
|
||||
|
@ -25,8 +26,8 @@ typedef struct {
|
|||
uint64_t timestamp; // in microseconds
|
||||
} video_packet_t;
|
||||
|
||||
bool eb3516VideoInit(void);
|
||||
bool eb3516VideoStart(void);
|
||||
HI_BOOL eb3516VideoInit(void);
|
||||
HI_S32 eb3516VideoStart(void);
|
||||
void eb3516VideoStop(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -0,0 +1,335 @@
|
|||
/*
|
||||
* Copyright (c) 2022 HiSilicon (Shanghai) Technologies CO., LIMITED.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "hi_comm_vb.h"
|
||||
#include "mpi_sys.h"
|
||||
#include "ive_img.h"
|
||||
#include "sample_comm_ive.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#endif /* End of #ifdef __cplusplus */
|
||||
|
||||
#define HALF_THE_HEIGHT 2 // Half the height
|
||||
|
||||
HI_U32 HiAlign16(HI_U32 num)
|
||||
{
|
||||
return (((num) + 16 - 1) / 16 * 16); // 16: align 16
|
||||
}
|
||||
|
||||
HI_U32 HiAlign32(HI_U32 num)
|
||||
{
|
||||
return (((num) + 32 - 1) / 32 * 32); // 32: align 32
|
||||
}
|
||||
|
||||
/*
|
||||
* VIDEO_FRAME_INFO_S格式转换成IVE_IMAGE_S格式
|
||||
* 复制数据指针,不复制数据
|
||||
*
|
||||
* video frame to ive image.
|
||||
* Copy the data pointer, do not copy the data.
|
||||
*/
|
||||
int FrmToOrigImg(const VIDEO_FRAME_INFO_S* frm, IVE_IMAGE_S *img)
|
||||
{
|
||||
static const int chnNum = 2; // Currently only supports YUV420/422, so only the addresses of 2 channels are copied
|
||||
PIXEL_FORMAT_E pixelFormat = frm->stVFrame.enPixelFormat;
|
||||
|
||||
if (memset_s(img, sizeof(*img), 0, sizeof(*img)) != EOK) {
|
||||
HI_ASSERT(0);
|
||||
}
|
||||
|
||||
img->u32Width = frm->stVFrame.u32Width;
|
||||
img->u32Height = frm->stVFrame.u32Height;
|
||||
|
||||
if (pixelFormat == PIXEL_FORMAT_YVU_SEMIPLANAR_420) {
|
||||
img->enType = IVE_IMAGE_TYPE_YUV420SP;
|
||||
} else if (pixelFormat == PIXEL_FORMAT_YVU_SEMIPLANAR_422) {
|
||||
img->enType = IVE_IMAGE_TYPE_YUV422SP;
|
||||
} else {
|
||||
HI_ASSERT(0);
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (int i = 0; i < chnNum; i++) {
|
||||
img->au64PhyAddr[i] = frm->stVFrame.u64PhyAddr[i];
|
||||
img->au64VirAddr[i] = frm->stVFrame.u64VirAddr[i];
|
||||
img->au32Stride[i] = frm->stVFrame.u32Stride[i];
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* 计算通道的步长
|
||||
* Calculate the stride of a channel
|
||||
*/
|
||||
static uint32_t IveCalStride(IVE_IMAGE_TYPE_E enType, uint32_t width, AlignType align)
|
||||
{
|
||||
uint32_t size = 1;
|
||||
|
||||
switch (enType) {
|
||||
case IVE_IMAGE_TYPE_U8C1:
|
||||
case IVE_IMAGE_TYPE_S8C1:
|
||||
case IVE_IMAGE_TYPE_S8C2_PACKAGE:
|
||||
case IVE_IMAGE_TYPE_S8C2_PLANAR:
|
||||
case IVE_IMAGE_TYPE_U8C3_PACKAGE:
|
||||
case IVE_IMAGE_TYPE_U8C3_PLANAR:
|
||||
size = sizeof(HI_U8);
|
||||
break;
|
||||
case IVE_IMAGE_TYPE_S16C1:
|
||||
case IVE_IMAGE_TYPE_U16C1:
|
||||
size = sizeof(HI_U16);
|
||||
break;
|
||||
case IVE_IMAGE_TYPE_S32C1:
|
||||
case IVE_IMAGE_TYPE_U32C1:
|
||||
size = sizeof(uint32_t);
|
||||
break;
|
||||
case IVE_IMAGE_TYPE_S64C1:
|
||||
case IVE_IMAGE_TYPE_U64C1:
|
||||
size = sizeof(uint64_t);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (align == ALIGN_TYPE_16) {
|
||||
return HiAlign16(width * size);
|
||||
} else if (align == ALIGN_TYPE_32) {
|
||||
return HiAlign32(width * size);
|
||||
} else {
|
||||
HI_ASSERT(0);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 根据类型和大小创建缓存
|
||||
* Create ive image buffer based on type and size
|
||||
*/
|
||||
int IveImgCreate(IVE_IMAGE_S* img,
|
||||
IVE_IMAGE_TYPE_E enType, uint32_t width, uint32_t height)
|
||||
{
|
||||
HI_ASSERT(img);
|
||||
uint32_t oneChnSize;
|
||||
uint32_t size;
|
||||
int ret;
|
||||
|
||||
if (memset_s(img, sizeof(*img), 0, sizeof(*img)) != EOK) {
|
||||
HI_ASSERT(0);
|
||||
}
|
||||
img->enType = enType;
|
||||
img->u32Width = width;
|
||||
img->u32Height = height;
|
||||
img->au32Stride[0] = IveCalStride(img->enType, img->u32Width, ALIGN_TYPE_16);
|
||||
|
||||
switch (enType) {
|
||||
case IVE_IMAGE_TYPE_U8C1:
|
||||
case IVE_IMAGE_TYPE_S8C1: // Only 1 channel
|
||||
size = img->au32Stride[0] * img->u32Height;
|
||||
ret = HI_MPI_SYS_MmzAlloc(&img->au64PhyAddr[0], (void**)&img->au64VirAddr[0], NULL, NULL, size);
|
||||
SAMPLE_CHECK_EXPR_RET(HI_SUCCESS != ret, ret, "Error(%#x), HI_MPI_SYS_MmzAlloc!\n", ret);
|
||||
break;
|
||||
/*
|
||||
* 大小相当于像素的1.5倍(3/2), 相当于2个通道
|
||||
* The size is equivalent to 1.5 times (3/2) of the pixel, which is equivalent to 2 channels
|
||||
*/
|
||||
case IVE_IMAGE_TYPE_YUV420SP:
|
||||
/*
|
||||
* 大小相当于像素的2倍,相当于2个通道
|
||||
* The size is equivalent to 2 times the pixel, which is equivalent to 2 channels
|
||||
*/
|
||||
case IVE_IMAGE_TYPE_YUV422SP:
|
||||
if (enType == IVE_IMAGE_TYPE_YUV420SP) {
|
||||
size = img->au32Stride[0] * img->u32Height * THREE_TIMES / TWO_TIMES;
|
||||
} else {
|
||||
size = img->au32Stride[0] * img->u32Height * TWO_TIMES;
|
||||
}
|
||||
ret = HI_MPI_SYS_MmzAlloc(&img->au64PhyAddr[0], (void**)&img->au64VirAddr[0], NULL, NULL, size);
|
||||
SAMPLE_CHECK_EXPR_RET(HI_SUCCESS != ret, ret, "Error(%#x), HI_MPI_SYS_MmzAlloc!\n", ret);
|
||||
|
||||
/*
|
||||
* 设置通道1地址的步长,两者都需要通道1
|
||||
* Set the stride of the address of channel 1, both of which require channel 1
|
||||
*/
|
||||
img->au32Stride[1] = img->au32Stride[0];
|
||||
img->au64PhyAddr[1] = img->au64PhyAddr[0] + img->au32Stride[0] * (uint64_t)img->u32Height;
|
||||
img->au64VirAddr[1] = img->au64VirAddr[0] + img->au32Stride[0] * (uint64_t)img->u32Height;
|
||||
break;
|
||||
|
||||
case IVE_IMAGE_TYPE_U8C3_PLANAR: // 3 channels, often used for RGB
|
||||
oneChnSize = img->au32Stride[0] * img->u32Height;
|
||||
size = oneChnSize * 3; // 3 channels have the same size
|
||||
ret = HI_MPI_SYS_MmzAlloc(&img->au64PhyAddr[0], (void**)&img->au64VirAddr[0], NULL, NULL, size);
|
||||
SAMPLE_CHECK_EXPR_RET(HI_SUCCESS != ret, ret, "Error(%#x), HI_MPI_SYS_MmzAlloc!\n", ret);
|
||||
|
||||
/*
|
||||
* 设置通道1和通道2的地址和步长
|
||||
* Set the address and stride of channel 1 and channel 2
|
||||
*/
|
||||
img->au64VirAddr[1] = img->au64VirAddr[0] + oneChnSize;
|
||||
img->au64PhyAddr[1] = img->au64PhyAddr[0] + oneChnSize;
|
||||
img->au32Stride[1] = img->au32Stride[0];
|
||||
img->au64VirAddr[2] = img->au64VirAddr[1] + oneChnSize; // 2: au64VirAddr array subscript, not out of bounds
|
||||
img->au64PhyAddr[2] = img->au64PhyAddr[1] + oneChnSize; // 2: au64VirAddr array subscript, not out of bounds
|
||||
img->au32Stride[2] = img->au32Stride[0]; // 2: au64VirAddr array subscript, not out of bounds
|
||||
break;
|
||||
|
||||
/*
|
||||
* 目前如下格式不支持,主要为YVC420P, YUV422P, S8C2_PACKAGE, S8C2_PLANAR,
|
||||
* S32C1, U32C1, S64C1, U64C1, S16C1, U16C1, U8C3_PACKAGE等
|
||||
*
|
||||
* Types not currently supported: YVC420P, YUV422P, S8C2_PACKAGE, S8C2_PLANAR,
|
||||
* S32C1, U32C1, S64C1, U64C1, S16C1, U16C1, U8C3_PACKAGE,etc.
|
||||
*/
|
||||
default:
|
||||
HI_ASSERT(0);
|
||||
break;
|
||||
}
|
||||
return HI_SUCCESS;
|
||||
}
|
||||
|
||||
int ImgYuvCrop(const IVE_IMAGE_S *src, IVE_IMAGE_S *dst, const RectBox* origBox)
|
||||
{
|
||||
RectBox box = *origBox;
|
||||
int boxWidth = box.xmax - box.xmin;
|
||||
int boxHeight = box.ymax - box.ymin;
|
||||
int ret;
|
||||
|
||||
HI_ASSERT(boxWidth > 0 && boxWidth <= src->u32Width);
|
||||
HI_ASSERT(boxHeight > 0 && boxHeight <= src->u32Height);
|
||||
HI_ASSERT(src->au64VirAddr[0]);
|
||||
HI_ASSERT(src->au32Stride[0] >= src->u32Width);
|
||||
|
||||
/*
|
||||
* 将框的宽度/高度调整为 2 的倍数
|
||||
* Adjust the width/height of the box to a multiple of 2
|
||||
*/
|
||||
if (boxWidth == 1 || boxHeight == 1) {
|
||||
SAMPLE_PRT("box dstWidth=1 && dstHeight=1\n");
|
||||
return -1;
|
||||
}
|
||||
if (boxWidth % HI_OVEN_BASE) {
|
||||
box.xmax--;
|
||||
boxWidth--;
|
||||
}
|
||||
if (boxHeight % HI_OVEN_BASE) {
|
||||
box.ymax--;
|
||||
boxHeight--;
|
||||
}
|
||||
|
||||
ret = IveImgCreate(dst, src->enType, boxWidth, boxHeight);
|
||||
HI_ASSERT(!ret);
|
||||
|
||||
/*
|
||||
* 将框从源地址复制到目的地址
|
||||
* copy box from src to dst
|
||||
*/
|
||||
/*
|
||||
* Y分量
|
||||
* Y component
|
||||
*/
|
||||
int srcStrideY = src->au32Stride[0];
|
||||
int dstStrideY = dst->au32Stride[0];
|
||||
uint8_t *srcBufY = (uint8_t*)((uintptr_t)src->au64VirAddr[0]);
|
||||
uint8_t *dstBufY = (uint8_t*)((uintptr_t)dst->au64VirAddr[0]);
|
||||
uint8_t *srcPtrY = &srcBufY[box.ymin * srcStrideY];
|
||||
uint8_t *dstPtrY = dstBufY;
|
||||
for (int h = 0; h < boxHeight; h++, srcPtrY += srcStrideY, dstPtrY += dstStrideY) {
|
||||
if (memcpy_s(dstPtrY, boxWidth, srcPtrY + box.xmin, boxWidth) != EOK) {
|
||||
HI_ASSERT(0);
|
||||
}
|
||||
}
|
||||
HI_ASSERT(dstPtrY - dstBufY == boxHeight * dstStrideY);
|
||||
|
||||
/*
|
||||
* UV分量
|
||||
* UV component
|
||||
*/
|
||||
int srcStrideUV = src->au32Stride[1];
|
||||
int dstStrideUV = dst->au32Stride[1];
|
||||
uint8_t *srcBufUV = (uint8_t*)((uintptr_t)src->au64VirAddr[1]);
|
||||
uint8_t *dstBufUV = (uint8_t*)((uintptr_t)dst->au64VirAddr[1]);
|
||||
uint8_t *srcPtrUV = &srcBufUV[(box.ymin / HALF_THE_HEIGHT) * srcStrideUV];
|
||||
uint8_t *dstPtrUV = dstBufUV;
|
||||
for (int h = 0; h < (boxHeight / HALF_THE_HEIGHT);
|
||||
h++, srcPtrUV += srcStrideUV, dstPtrUV += dstStrideUV) {
|
||||
if (memcpy_s(dstPtrUV, boxWidth, srcPtrUV + box.xmin, boxWidth) != EOK) {
|
||||
HI_ASSERT(0);
|
||||
}
|
||||
}
|
||||
HI_ASSERT(dstPtrUV - dstBufUV == (boxHeight / HALF_THE_HEIGHT) * dstStrideUV);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* 销毁ive image
|
||||
* Destory ive image
|
||||
*/
|
||||
void IveImgDestroy(IVE_IMAGE_S* img)
|
||||
{
|
||||
for (int i = 0; i < IMG_FULL_CHN; i++) {
|
||||
if (img->au64PhyAddr[0] && img->au64VirAddr[0]) {
|
||||
HI_MPI_SYS_MmzFree(img->au64PhyAddr[i], (void*)((uintptr_t)img->au64VirAddr[i]));
|
||||
img->au64PhyAddr[i] = 0;
|
||||
img->au64VirAddr[i] = 0;
|
||||
}
|
||||
}
|
||||
if (memset_s(img, sizeof(*img), 0, sizeof(*img)) != EOK) {
|
||||
HI_ASSERT(0);
|
||||
}
|
||||
}
|
||||
|
||||
int OrigImgToFrm(const IVE_IMAGE_S *img, VIDEO_FRAME_INFO_S* frm)
|
||||
{
|
||||
static const int chnNum = 2;
|
||||
IVE_IMAGE_TYPE_E enType = img->enType;
|
||||
if (memset_s(frm, sizeof(*frm), 0, sizeof(*frm)) != EOK) {
|
||||
HI_ASSERT(0);
|
||||
}
|
||||
|
||||
frm->stVFrame.u32Width = img->u32Width;
|
||||
frm->stVFrame.u32Height = img->u32Height;
|
||||
|
||||
if (enType == IVE_IMAGE_TYPE_YUV420SP) {
|
||||
frm->stVFrame.enPixelFormat = PIXEL_FORMAT_YVU_SEMIPLANAR_420;
|
||||
} else if (enType == IVE_IMAGE_TYPE_YUV422SP) {
|
||||
frm->stVFrame.enPixelFormat = PIXEL_FORMAT_YVU_SEMIPLANAR_422;
|
||||
} else {
|
||||
HI_ASSERT(0);
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (int i = 0; i < chnNum; i++) {
|
||||
frm->stVFrame.u64PhyAddr[i] = img->au64PhyAddr[i];
|
||||
frm->stVFrame.u64VirAddr[i] = img->au64VirAddr[i];
|
||||
frm->stVFrame.u32Stride[i] = img->au32Stride[i];
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* End of #ifdef __cplusplus */
|
|
@ -0,0 +1,93 @@
|
|||
/*
|
||||
* Copyright (c) 2022 HiSilicon (Shanghai) Technologies CO., LIMITED.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef IVE_IMG_H
|
||||
#define IVE_IMG_H
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "hi_common.h"
|
||||
#include "hi_comm_ive.h"
|
||||
#include "hi_comm_video.h"
|
||||
#include "hi_comm_venc.h"
|
||||
#include "hi_ive.h"
|
||||
#include "mpi_ive.h"
|
||||
#include "util.h"
|
||||
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* 常量
|
||||
* Constant
|
||||
*/
|
||||
#define IMG_FULL_CHN 3 // Full channel / three channel, for YUV444, RGB888
|
||||
#define IMG_HALF_CHN 2 // Half channel, for YUV420/422
|
||||
#define THREE_TIMES 3
|
||||
#define TWO_TIMES 2
|
||||
|
||||
/*
|
||||
* 字节对齐计算
|
||||
* Byte alignment calculation
|
||||
*/
|
||||
HI_U32 HiAlign16(HI_U32 num);
|
||||
HI_U32 HiAlign32(HI_U32 num);
|
||||
|
||||
/*
|
||||
* 对齐类型
|
||||
* Alignment type
|
||||
*/
|
||||
typedef enum AlignType {
|
||||
ALIGN_TYPE_2 = 2, // Align by 2 bytes
|
||||
ALIGN_TYPE_16 = 16, // Align by 16 bytes
|
||||
ALIGN_TYPE_32 = 32, // Align by 32 bytes
|
||||
} AlignType;
|
||||
|
||||
/*
|
||||
* 根据类型和大小创建缓存
|
||||
* Create ive image buffer based on type and size
|
||||
*/
|
||||
int IveImgCreate(IVE_IMAGE_S* img,
|
||||
IVE_IMAGE_TYPE_E enType, uint32_t width, uint32_t height);
|
||||
|
||||
/*
|
||||
* VIDEO_FRAME_INFO_S格式转换成IVE_IMAGE_S格式
|
||||
* 复制数据指针,不复制数据
|
||||
*
|
||||
* video frame to ive image.
|
||||
* Copy the data pointer, do not copy the data.
|
||||
*/
|
||||
int FrmToOrigImg(const VIDEO_FRAME_INFO_S* frm, IVE_IMAGE_S *img);
|
||||
|
||||
/*
|
||||
* 对yuv格式进行裁剪
|
||||
* yuv file crop
|
||||
*/
|
||||
int ImgYuvCrop(const IVE_IMAGE_S *src, IVE_IMAGE_S *dst, const RectBox* origBox);
|
||||
|
||||
/*
|
||||
* 销毁ive image
|
||||
* Destory ive image
|
||||
*/
|
||||
void IveImgDestroy(IVE_IMAGE_S* img);
|
||||
|
||||
int OrigImgToFrm(const IVE_IMAGE_S *img, VIDEO_FRAME_INFO_S* frm);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,287 @@
|
|||
/*
|
||||
* Copyright (c) 2022 HiSilicon (Shanghai) Technologies CO., LIMITED.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef OSD_IMG_H
|
||||
#define OSD_IMG_H
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <pthread.h>
|
||||
#include "hi_comm_region.h"
|
||||
#include "hi_common.h"
|
||||
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define HI_OSD_MAX_CNT (16) // Maximum OSD Count
|
||||
#define HI_OSD_MAX_DISP_CNT (2) // Maximum Display Count for Each OSD
|
||||
#define HI_OSD_MAX_STR_LEN (64) // String OSD Maximum Length
|
||||
|
||||
typedef HI_S32 HI_ERRNO;
|
||||
|
||||
/*
|
||||
* 常见的错误码
|
||||
* Common error code
|
||||
*/
|
||||
#define HI_ERRNO_COMMON_BASE 0
|
||||
#define HI_ERRNO_COMMON_COUNT 256
|
||||
|
||||
#define HI_EUNKNOWN (HI_ERRNO)(HI_ERRNO_COMMON_BASE + 1)
|
||||
#define HI_EOTHER (HI_ERRNO)(HI_ERRNO_COMMON_BASE + 2)
|
||||
#define HI_EINTER (HI_ERRNO)(HI_ERRNO_COMMON_BASE + 3)
|
||||
#define HI_EVERSION (HI_ERRNO)(HI_ERRNO_COMMON_BASE + 4)
|
||||
#define HI_EPAERM (HI_ERRNO)(HI_ERRNO_COMMON_BASE + 5)
|
||||
#define HI_EINVAL (HI_ERRNO)(HI_ERRNO_COMMON_BASE + 6)
|
||||
#define HI_ENOINIT (HI_ERRNO)(HI_ERRNO_COMMON_BASE + 7)
|
||||
#define HI_ENOTREADY (HI_ERRNO)(HI_ERRNO_COMMON_BASE + 8)
|
||||
#define HI_ENORES (HI_ERRNO)(HI_ERRNO_COMMON_BASE + 9)
|
||||
#define HI_EEXIST (HI_ERRNO)(HI_ERRNO_COMMON_BASE + 10)
|
||||
#define HI_ELOST (HI_ERRNO)(HI_ERRNO_COMMON_BASE + 11)
|
||||
#define HI_ENOOP (HI_ERRNO)(HI_ERRNO_COMMON_BASE + 12)
|
||||
#define HI_EBUSY (HI_ERRNO)(HI_ERRNO_COMMON_BASE + 13)
|
||||
#define HI_EIDLE (HI_ERRNO)(HI_ERRNO_COMMON_BASE + 14)
|
||||
#define HI_EFULL (HI_ERRNO)(HI_ERRNO_COMMON_BASE + 15)
|
||||
#define HI_EEMPTY (HI_ERRNO)(HI_ERRNO_COMMON_BASE + 16)
|
||||
#define HI_EUNDERFLOW (HI_ERRNO)(HI_ERRNO_COMMON_BASE + 17)
|
||||
#define HI_EOVERFLOW (HI_ERRNO)(HI_ERRNO_COMMON_BASE + 18)
|
||||
#define HI_EACCES (HI_ERRNO)(HI_ERRNO_COMMON_BASE + 19)
|
||||
#define HI_EINTR (HI_ERRNO)(HI_ERRNO_COMMON_BASE + 20)
|
||||
#define HI_ECONTINUE (HI_ERRNO)(HI_ERRNO_COMMON_BASE + 21)
|
||||
#define HI_EOVER (HI_ERRNO)(HI_ERRNO_COMMON_BASE + 22)
|
||||
#define HI_ERRNO_COMMON_BOTTOM (HI_ERRNO)(HI_ERRNO_COMMON_BASE + 23)
|
||||
|
||||
/*
|
||||
* 自定义错误码
|
||||
* Custom error code
|
||||
*/
|
||||
#define HI_ERRNO_BASE (HI_ERRNO)(HI_ERRNO_COMMON_BASE + HI_ERRNO_COMMON_COUNT)
|
||||
#define HI_EINITIALIZED (HI_ERRNO)(HI_ERRNO_BASE + 1) // Repeated initialization
|
||||
#define HI_ERRNO_CUSTOM_BOTTOM (HI_ERRNO)(HI_ERRNO_BASE + 2) // Number of error numbers that have been defined
|
||||
|
||||
/*
|
||||
* pthread互斥锁
|
||||
* pthread mutex lock
|
||||
*/
|
||||
static inline void MutexLock(pthread_mutex_t* mutex)
|
||||
{
|
||||
if (pthread_mutex_lock(mutex) != 0) {
|
||||
HI_ASSERT(0);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 解除锁定mutex所指向的互斥锁
|
||||
* pthread mutex unlock
|
||||
*/
|
||||
static inline void MutexUnlock(pthread_mutex_t* mutex)
|
||||
{
|
||||
if (pthread_mutex_unlock(mutex) != 0) {
|
||||
HI_ASSERT(0);
|
||||
}
|
||||
}
|
||||
|
||||
typedef HI_S32 (*HI_OSD_GETFONTMOD_CALLBACK_FN_PTR)(HI_CHAR* Character, HI_U8** FontMod, HI_S32* FontModLen);
|
||||
|
||||
/*
|
||||
* OSD字体库
|
||||
* OSD Fonts Lib
|
||||
*/
|
||||
typedef struct hiOSD_FONTS_S {
|
||||
/* OSD Lib Font Size, in pixel */
|
||||
HI_U32 u32FontWidth;
|
||||
HI_U32 u32FontHeight;
|
||||
HI_OSD_GETFONTMOD_CALLBACK_FN_PTR pfnGetFontMod;
|
||||
} HI_OSD_FONTS_S;
|
||||
|
||||
/*
|
||||
* OSD像素格式枚举
|
||||
* OSD pixel format enum
|
||||
*/
|
||||
typedef enum hiOSD_PIXEL_FMT_E {
|
||||
HI_OSD_PIXEL_FMT_RGB1555 = 0,
|
||||
HI_OSD_PIXEL_FMT_BUTT
|
||||
} HI_OSD_PIXEL_FMT_E;
|
||||
|
||||
/*
|
||||
* OSD位图属性
|
||||
* OSD Bitmap Attribute
|
||||
*/
|
||||
typedef struct hiOSD_BITMAP_ATTR_S {
|
||||
HI_OSD_PIXEL_FMT_E enPixelFormat;
|
||||
HI_U32 u32Width;
|
||||
HI_U32 u32Height;
|
||||
HI_U64 u64PhyAddr;
|
||||
HI_VOID* pvData;
|
||||
} HI_OSD_BITMAP_ATTR_S;
|
||||
|
||||
/*
|
||||
* OSD类型枚举
|
||||
* OSD Type Enum
|
||||
*/
|
||||
typedef enum hiOSD_TYPE_E {
|
||||
HI_OSD_TYPE_TIME = 0,
|
||||
HI_OSD_TYPE_STRING,
|
||||
HI_OSD_TYPE_BITMAP,
|
||||
HI_OSD_TYPE_BUTT
|
||||
} HI_OSD_TYPE_E;
|
||||
|
||||
/*
|
||||
* OSD时间格式枚举
|
||||
* OSD Time Format Enum
|
||||
*/
|
||||
typedef enum hiOSD_TIMEFMT_E {
|
||||
HI_OSD_TIMEFMT_YMD24H = 0, // eg. 2017-03-10 23:00:59
|
||||
HI_OSD_TIMEFMT_BUTT
|
||||
} HI_OSD_TIMEFMT_E;
|
||||
|
||||
/*
|
||||
* OSD绑定模块枚举
|
||||
* OSD Binded Module enum
|
||||
*/
|
||||
typedef enum hiOSD_BIND_MOD_E {
|
||||
HI_OSD_BINDMOD_VI = 0,
|
||||
HI_OSD_BINDMOD_VPSS,
|
||||
HI_OSD_BINDMOD_AVS,
|
||||
HI_OSD_BINDMOD_VENC,
|
||||
HI_OSD_BINDMOD_VO,
|
||||
HI_OSD_BINDMOD_BUTT
|
||||
} HI_OSD_BIND_MOD_E;
|
||||
|
||||
typedef enum hiOSD_COORDINATE_E {
|
||||
HI_OSD_COORDINATE_RATIO_COOR = 0,
|
||||
HI_OSD_COORDINATE_ABS_COOR
|
||||
} HI_OSD_COORDINATE_E;
|
||||
|
||||
/*
|
||||
* OSD显示属性
|
||||
* OSD Display Attribute
|
||||
*/
|
||||
typedef struct hiOSD_DISP_ATTR_S {
|
||||
HI_BOOL bShow;
|
||||
HI_OSD_BIND_MOD_E enBindedMod;
|
||||
HI_HANDLE ModHdl;
|
||||
HI_HANDLE ChnHdl;
|
||||
HI_U32 u32FgAlpha;
|
||||
HI_U32 u32BgAlpha;
|
||||
HI_OSD_COORDINATE_E enCoordinate; // Coordinate mode of the osd start Position
|
||||
POINT_S stStartPos; // OSD Start Position
|
||||
ATTACH_DEST_E enAttachDest; // only for venc
|
||||
HI_S32 s32Batch;
|
||||
} HI_OSD_DISP_ATTR_S;
|
||||
|
||||
/*
|
||||
* OSD内容
|
||||
* OSD Content
|
||||
*/
|
||||
typedef struct hiOSD_CONTENT_S {
|
||||
HI_OSD_TYPE_E enType;
|
||||
HI_OSD_TIMEFMT_E enTimeFmt;
|
||||
HI_U32 u32Color; // string color
|
||||
HI_U32 u32BgColor;
|
||||
HI_CHAR szStr[HI_OSD_MAX_STR_LEN];
|
||||
SIZE_S stFontSize;
|
||||
HI_OSD_BITMAP_ATTR_S stBitmap; // Pixel Format: Only Support RGB1555 for now
|
||||
} HI_OSD_CONTENT_S;
|
||||
|
||||
/*
|
||||
* OSD属性
|
||||
* OSD attribution
|
||||
*/
|
||||
typedef struct hiOSD_ATTR_S {
|
||||
HI_U32 u32DispNum; /* 1Binded Display Number for this OSD */
|
||||
HI_OSD_DISP_ATTR_S astDispAttr[HI_OSD_MAX_DISP_CNT];
|
||||
HI_OSD_CONTENT_S stContent;
|
||||
} HI_OSD_ATTR_S;
|
||||
|
||||
/*
|
||||
* OSD参数
|
||||
* OSD Parameter
|
||||
*/
|
||||
typedef struct tagOSD_PARAM_S {
|
||||
HI_OSD_ATTR_S stAttr;
|
||||
SIZE_S stMaxSize;
|
||||
pthread_mutex_t mutexLock;
|
||||
HI_BOOL bInit; /* OSD Attribute Set or not, Canbe modified only HI_OSD_SetAttr */
|
||||
HI_BOOL bOn; /* OSD On/Off Flag, Canbe modified only by HI_OSD_Start/HI_OSD_Stop */
|
||||
} OSD_PARAM_S;
|
||||
|
||||
typedef struct hiOSD_TEXTBITMAP_S {
|
||||
RGN_HANDLE rgnHdl;
|
||||
HI_OSD_CONTENT_S pstContent;
|
||||
RGN_CANVAS_INFO_S stCanvasInfo;
|
||||
} HI_OSD_TEXTBITMAP_S;
|
||||
|
||||
/*
|
||||
* OSD区域设置
|
||||
* OSD region set
|
||||
*/
|
||||
struct OsdSet {
|
||||
// OSD Binded Module: Static
|
||||
HI_OSD_BIND_MOD_E bindMod;
|
||||
// Binded Module Handle: Static eg.VcapPipeHdl, VpssHdl, StitchHdl, DispHdl, 0
|
||||
HI_U32 modHnd;
|
||||
// Binded Channel Handle: Static eg.PipeChnHdl, VPortHdl, StitchPortHdl, WndHdl, VencHdl
|
||||
HI_U32 chnHnd;
|
||||
};
|
||||
|
||||
typedef struct OsdSet OsdSet;
|
||||
|
||||
/*
|
||||
* 在OsdSet中创建区域
|
||||
* Create a region in OsdSet
|
||||
*/
|
||||
int OsdsCreateRgn(OsdSet* self);
|
||||
|
||||
/*
|
||||
* 设置文本区域的属性值
|
||||
* Set the attribute value of the text region
|
||||
*/
|
||||
int TxtRgnInit(HI_OSD_ATTR_S* rgnAttr, const char* str, uint32_t begX, uint32_t begY, uint32_t color);
|
||||
|
||||
/*
|
||||
* 销毁OsdSet中的所有区域
|
||||
* Destroy all regions in OsdSet
|
||||
*/
|
||||
void OsdsClear(OsdSet* self);
|
||||
|
||||
/*
|
||||
* 在OsdSet中设置指定区域的属性
|
||||
* Set attributes for the specified region in OsdSet
|
||||
*/
|
||||
int OsdsSetRgn(OsdSet* self, int rgnHnd, const HI_OSD_ATTR_S* rgnAttr);
|
||||
|
||||
/*
|
||||
* 创建OsdSet
|
||||
* Creat OsdSet
|
||||
*/
|
||||
OsdSet* OsdsCreate(HI_OSD_BIND_MOD_E bindMod, HI_U32 modHnd, HI_U32 chnHnd);
|
||||
|
||||
/*
|
||||
* 销毁OsdSet
|
||||
* Destory OsdSet
|
||||
*/
|
||||
void OsdsDestroy(OsdSet* self);
|
||||
|
||||
/*
|
||||
* 初始化OsdSet库
|
||||
* Initialize OsdSet lib
|
||||
*/
|
||||
int OsdLibInit(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,194 @@
|
|||
#ifndef __SAMPLE_COMM_IVE_H__
|
||||
#define __SAMPLE_COMM_IVE_H__
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
#include <signal.h>
|
||||
|
||||
#include "hi_debug.h"
|
||||
#include "hi_comm_ive.h"
|
||||
#include "mpi_ive.h"
|
||||
#include "sample_comm.h"
|
||||
|
||||
#define VIDEO_WIDTH 352
|
||||
#define VIDEO_HEIGHT 288
|
||||
#define IVE_ALIGN 16
|
||||
#define IVE_CHAR_CALW 8
|
||||
#define IVE_CHAR_CALH 8
|
||||
#define IVE_CHAR_NUM (IVE_CHAR_CALW *IVE_CHAR_CALH)
|
||||
#define IVE_FILE_NAME_LEN 256
|
||||
#define IVE_RECT_NUM 64
|
||||
#define VPSS_CHN_NUM 2
|
||||
|
||||
#define SAMPLE_ALIGN_BACK(x, a) ((a) * (((x) / (a))))
|
||||
|
||||
typedef struct hiSAMPLE_IVE_SWITCH_S
|
||||
{
|
||||
HI_BOOL bVenc;
|
||||
HI_BOOL bVo;
|
||||
}SAMPLE_IVE_SWITCH_S;
|
||||
|
||||
typedef struct hiSAMPLE_IVE_RECT_S
|
||||
{
|
||||
POINT_S astPoint[4];
|
||||
} SAMPLE_IVE_RECT_S;
|
||||
|
||||
typedef struct hiSAMPLE_RECT_ARRAY_S
|
||||
{
|
||||
HI_U16 u16Num;
|
||||
SAMPLE_IVE_RECT_S astRect[IVE_RECT_NUM];
|
||||
} SAMPLE_RECT_ARRAY_S;
|
||||
|
||||
typedef struct hiIVE_LINEAR_DATA_S
|
||||
{
|
||||
HI_S32 s32LinearNum;
|
||||
HI_S32 s32ThreshNum;
|
||||
POINT_S* pstLinearPoint;
|
||||
} IVE_LINEAR_DATA_S;
|
||||
|
||||
typedef struct hiSAMPLE_IVE_DRAW_RECT_MSG_S
|
||||
{
|
||||
VIDEO_FRAME_INFO_S stFrameInfo;
|
||||
SAMPLE_RECT_ARRAY_S stRegion;
|
||||
} SAMPLE_IVE_DRAW_RECT_MSG_S;
|
||||
|
||||
//free mmz
|
||||
#define IVE_MMZ_FREE(phy,vir)\
|
||||
do{\
|
||||
if ((0 != (phy)) && (0 != (vir)))\
|
||||
{\
|
||||
HI_MPI_SYS_MmzFree((phy),(HI_VOID *)(HI_UL)(vir));\
|
||||
(phy) = 0;\
|
||||
(vir) = 0;\
|
||||
}\
|
||||
}while(0)
|
||||
|
||||
#define IVE_CLOSE_FILE(fp)\
|
||||
do{\
|
||||
if (NULL != (fp))\
|
||||
{\
|
||||
fclose((fp));\
|
||||
(fp) = NULL;\
|
||||
}\
|
||||
}while(0)
|
||||
|
||||
#define SAMPLE_PAUSE()\
|
||||
do {\
|
||||
printf("---------------press Enter key to exit!---------------\n");\
|
||||
(void)getchar();\
|
||||
} while (0)
|
||||
#define SAMPLE_CHECK_EXPR_RET(expr, ret, fmt...)\
|
||||
do\
|
||||
{\
|
||||
if(expr)\
|
||||
{\
|
||||
SAMPLE_PRT(fmt);\
|
||||
return (ret);\
|
||||
}\
|
||||
}while(0)
|
||||
#define SAMPLE_CHECK_EXPR_GOTO(expr, label, fmt...)\
|
||||
do\
|
||||
{\
|
||||
if(expr)\
|
||||
{\
|
||||
SAMPLE_PRT(fmt);\
|
||||
goto label;\
|
||||
}\
|
||||
}while(0)
|
||||
|
||||
#define SAMPLE_COMM_IVE_CONVERT_64BIT_ADDR(Type,Addr) (Type*)(HI_UL)(Addr)
|
||||
|
||||
/******************************************************************************
|
||||
* function : Mpi init
|
||||
******************************************************************************/
|
||||
HI_VOID SAMPLE_COMM_IVE_CheckIveMpiInit(HI_VOID);
|
||||
/******************************************************************************
|
||||
* function : Mpi exit
|
||||
******************************************************************************/
|
||||
HI_S32 SAMPLE_COMM_IVE_IveMpiExit(HI_VOID);
|
||||
/******************************************************************************
|
||||
* function :Read file
|
||||
******************************************************************************/
|
||||
HI_S32 SAMPLE_COMM_IVE_ReadFile(IVE_IMAGE_S* pstImg, FILE* pFp);
|
||||
/******************************************************************************
|
||||
* function :Write file
|
||||
******************************************************************************/
|
||||
HI_S32 SAMPLE_COMM_IVE_WriteFile(IVE_IMAGE_S* pstImg, FILE* pFp);
|
||||
/******************************************************************************
|
||||
* function :Calc stride
|
||||
******************************************************************************/
|
||||
HI_U16 SAMPLE_COMM_IVE_CalcStride(HI_U32 u32Width, HI_U8 u8Align);
|
||||
/******************************************************************************
|
||||
* function : Copy blob to rect
|
||||
******************************************************************************/
|
||||
HI_VOID SAMPLE_COMM_IVE_BlobToRect(IVE_CCBLOB_S *pstBlob, SAMPLE_RECT_ARRAY_S *pstRect,
|
||||
HI_U16 u16RectMaxNum,HI_U16 u16AreaThrStep,
|
||||
HI_U32 u32SrcWidth, HI_U32 u32SrcHeight,
|
||||
HI_U32 u32DstWidth,HI_U32 u32DstHeight);
|
||||
/******************************************************************************
|
||||
* function : Create ive image
|
||||
******************************************************************************/
|
||||
HI_S32 SAMPLE_COMM_IVE_CreateImage(IVE_IMAGE_S* pstImg, IVE_IMAGE_TYPE_E enType,
|
||||
HI_U32 u32Width, HI_U32 u32Height);
|
||||
/******************************************************************************
|
||||
* function : Create memory info
|
||||
******************************************************************************/
|
||||
HI_S32 SAMPLE_COMM_IVE_CreateMemInfo(IVE_MEM_INFO_S* pstMemInfo, HI_U32 u32Size);
|
||||
/******************************************************************************
|
||||
* function : Create ive image by cached
|
||||
******************************************************************************/
|
||||
HI_S32 SAMPLE_COMM_IVE_CreateImageByCached(IVE_IMAGE_S* pstImg,
|
||||
IVE_IMAGE_TYPE_E enType, HI_U32 u32Width, HI_U32 u32Height);
|
||||
/******************************************************************************
|
||||
* function : Create IVE_DATA_S
|
||||
******************************************************************************/
|
||||
HI_S32 SAMPLE_COMM_IVE_CreateData(IVE_DATA_S* pstData,HI_U32 u32Width, HI_U32 u32Height);
|
||||
/******************************************************************************
|
||||
* function : Init Vb
|
||||
******************************************************************************/
|
||||
HI_S32 SAMPLE_COMM_IVE_VbInit(PIC_SIZE_E *paenSize,SIZE_S *pastSize,HI_U32 u32VpssChnNum);
|
||||
/******************************************************************************
|
||||
* function : Dma frame info to ive image
|
||||
******************************************************************************/
|
||||
HI_S32 SAMPLE_COMM_IVE_DmaImage(VIDEO_FRAME_INFO_S *pstFrameInfo,IVE_DST_IMAGE_S *pstDst,HI_BOOL bInstant);
|
||||
|
||||
/******************************************************************************
|
||||
* function : Call vgs to fill rect
|
||||
******************************************************************************/
|
||||
HI_S32 SAMPLE_COMM_VGS_FillRect(VIDEO_FRAME_INFO_S* pstFrmInfo, SAMPLE_RECT_ARRAY_S* pstRect, HI_U32 u32Color);
|
||||
|
||||
/******************************************************************************
|
||||
* function : Start Vpss
|
||||
******************************************************************************/
|
||||
HI_S32 SAMPLE_COMM_IVE_StartVpss(SIZE_S *pastSize,HI_U32 u32VpssChnNum);
|
||||
/******************************************************************************
|
||||
* function : Stop Vpss
|
||||
******************************************************************************/
|
||||
HI_VOID SAMPLE_COMM_IVE_StopVpss(HI_U32 u32VpssChnNum);
|
||||
/******************************************************************************
|
||||
* function : Start Vo
|
||||
******************************************************************************/
|
||||
HI_S32 SAMPLE_COMM_IVE_StartVo(HI_VOID);
|
||||
/******************************************************************************
|
||||
* function : Stop Vo
|
||||
******************************************************************************/
|
||||
HI_VOID SAMPLE_COMM_IVE_StopVo(HI_VOID);
|
||||
/******************************************************************************
|
||||
* function : Start Vi/Vpss/Venc/Vo
|
||||
******************************************************************************/
|
||||
HI_S32 SAMPLE_COMM_IVE_StartViVpssVencVo(SAMPLE_VI_CONFIG_S *pstViConfig,SAMPLE_IVE_SWITCH_S *pstSwitch,PIC_SIZE_E *penExtPicSize);
|
||||
/******************************************************************************
|
||||
* function : Stop Vi/Vpss/Venc/Vo
|
||||
******************************************************************************/
|
||||
HI_VOID SAMPLE_COMM_IVE_StopViVpssVencVo(SAMPLE_VI_CONFIG_S *pstViConfig,SAMPLE_IVE_SWITCH_S *pstSwitch);
|
||||
|
||||
#endif
|
||||
|
||||
|
|
@ -0,0 +1,380 @@
|
|||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x01 ,0x00 ,0x03 ,0x80 ,0x03 ,0x80 ,0x03 ,0x80 ,0x03 ,0x80 ,
|
||||
0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,
|
||||
0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x01 ,0x80 ,0x03 ,0x80 ,
|
||||
0x03 ,0x80 ,0x01 ,0x80 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x06 ,0x70 ,0x06 ,0x70 ,0x06 ,0x70 ,0x06 ,0x60 ,0x06 ,0x60 ,0x06 ,0x60 ,0x06 ,0x60 ,
|
||||
0x06 ,0x20 ,0x04 ,0x40 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x04 ,0x18 ,0x0c ,0x18 ,0x0c ,0x10 ,0x08 ,0x10 ,
|
||||
0x08 ,0x10 ,0x7f ,0xfe ,0x7f ,0xfe ,0x08 ,0x10 ,0x08 ,0x10 ,0x08 ,0x10 ,0x08 ,0x10 ,0x08 ,0x10 ,
|
||||
0x08 ,0x30 ,0x08 ,0x30 ,0x7f ,0xfe ,0x7f ,0xfe ,0x10 ,0x20 ,0x10 ,0x20 ,0x10 ,0x20 ,0x10 ,0x20 ,
|
||||
0x10 ,0x20 ,0x10 ,0x20 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x01 ,0x80 ,0x01 ,0x80 ,0x07 ,0xe0 ,0x0d ,0xb0 ,0x19 ,0x98 ,0x19 ,0x98 ,
|
||||
0x19 ,0xb8 ,0x19 ,0xb0 ,0x19 ,0x80 ,0x1d ,0x80 ,0x0f ,0x80 ,0x07 ,0x80 ,0x01 ,0xc0 ,0x01 ,0xe0 ,
|
||||
0x01 ,0xf0 ,0x01 ,0xb8 ,0x01 ,0x98 ,0x19 ,0x98 ,0x39 ,0x98 ,0x39 ,0x98 ,0x31 ,0x98 ,0x11 ,0x90 ,
|
||||
0x0d ,0xe0 ,0x03 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x38 ,0x10 ,0x44 ,0x10 ,0x46 ,0x20 ,0xc6 ,0x20 ,
|
||||
0xc6 ,0x20 ,0xc6 ,0x40 ,0xc6 ,0x40 ,0xc6 ,0x80 ,0x46 ,0x80 ,0x44 ,0x80 ,0x3d ,0x18 ,0x01 ,0x64 ,
|
||||
0x02 ,0x46 ,0x02 ,0x46 ,0x04 ,0xc6 ,0x04 ,0xc6 ,0x04 ,0xc6 ,0x08 ,0xc6 ,0x08 ,0x46 ,0x10 ,0x46 ,
|
||||
0x10 ,0x2c ,0x10 ,0x10 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x0f ,0x80 ,0x18 ,0x80 ,0x10 ,0xc0 ,0x10 ,0xc0 ,
|
||||
0x10 ,0xc0 ,0x10 ,0x80 ,0x19 ,0x80 ,0x19 ,0x00 ,0x1a ,0x00 ,0x1c ,0x7c ,0x1c ,0x18 ,0x2c ,0x10 ,
|
||||
0x66 ,0x10 ,0x46 ,0x10 ,0xc7 ,0x20 ,0xc3 ,0x20 ,0xc1 ,0xa0 ,0xc1 ,0xc0 ,0x60 ,0xe0 ,0x70 ,0xf2 ,
|
||||
0x3f ,0x3e ,0x0c ,0x18 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x03 ,0x00 ,0x03 ,0x80 ,0x03 ,0x00 ,0x03 ,0x00 ,0x03 ,0x00 ,0x03 ,0x00 ,0x03 ,0x00 ,0x02 ,0x00 ,
|
||||
0x02 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x04 ,0x00 ,0x0c ,0x00 ,0x18 ,0x00 ,0x10 ,0x00 ,0x20 ,0x00 ,0x60 ,0x00 ,0x40 ,0x00 ,0xc0 ,
|
||||
0x00 ,0xc0 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,
|
||||
0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x00 ,0x80 ,0x00 ,0xc0 ,0x00 ,0xc0 ,0x00 ,0x40 ,0x00 ,0x60 ,
|
||||
0x00 ,0x30 ,0x00 ,0x10 ,0x00 ,0x08 ,0x00 ,0x04 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x40 ,0x00 ,0x20 ,0x00 ,0x10 ,0x00 ,0x18 ,0x00 ,0x0c ,0x00 ,0x04 ,0x00 ,0x06 ,0x00 ,0x02 ,0x00 ,
|
||||
0x03 ,0x00 ,0x03 ,0x00 ,0x01 ,0x00 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,
|
||||
0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x00 ,0x03 ,0x00 ,0x03 ,0x00 ,0x02 ,0x00 ,0x06 ,0x00 ,0x04 ,0x00 ,
|
||||
0x0c ,0x00 ,0x18 ,0x00 ,0x10 ,0x00 ,0x20 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x01 ,0x80 ,
|
||||
0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x79 ,0x8e ,0x3d ,0xbe ,0x1e ,0xf0 ,0x01 ,0x80 ,0x03 ,0xc0 ,
|
||||
0x06 ,0x70 ,0x0c ,0x38 ,0x1c ,0x1c ,0x38 ,0x0c ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x01 ,0x80 ,0x01 ,0x80 ,
|
||||
0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x7f ,0xfe ,0x01 ,0x80 ,
|
||||
0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x1c ,0x00 ,0x1e ,0x00 ,
|
||||
0x0e ,0x00 ,0x06 ,0x00 ,0x06 ,0x00 ,0x0c ,0x00 ,0x18 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x7f ,0xfe ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x18 ,0x00 ,0x3c ,0x00 ,
|
||||
0x3c ,0x00 ,0x18 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x02 ,0x00 ,0x04 ,0x00 ,0x04 ,0x00 ,0x08 ,0x00 ,0x08 ,0x00 ,0x10 ,0x00 ,0x10 ,
|
||||
0x00 ,0x20 ,0x00 ,0x20 ,0x00 ,0x40 ,0x00 ,0x40 ,0x00 ,0x80 ,0x00 ,0x80 ,0x01 ,0x00 ,0x01 ,0x00 ,
|
||||
0x02 ,0x00 ,0x02 ,0x00 ,0x06 ,0x00 ,0x04 ,0x00 ,0x0c ,0x00 ,0x08 ,0x00 ,0x18 ,0x00 ,0x10 ,0x00 ,
|
||||
0x10 ,0x00 ,0x20 ,0x00 ,0x20 ,0x00 ,0x40 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x07 ,0xc0 ,0x0c ,0x30 ,0x18 ,0x30 ,0x18 ,0x18 ,
|
||||
0x38 ,0x18 ,0x30 ,0x1c ,0x30 ,0x0c ,0x30 ,0x0c ,0x70 ,0x0c ,0x70 ,0x0c ,0x70 ,0x0c ,0x70 ,0x0c ,
|
||||
0x70 ,0x0c ,0x30 ,0x0c ,0x30 ,0x0c ,0x30 ,0x1c ,0x30 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x0c ,0x30 ,
|
||||
0x06 ,0x60 ,0x01 ,0x80 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x80 ,0x03 ,0x80 ,0x07 ,0x80 ,0x01 ,0x80 ,
|
||||
0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,
|
||||
0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,
|
||||
0x07 ,0xf0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x07 ,0xe0 ,0x18 ,0x30 ,0x10 ,0x18 ,0x30 ,0x18 ,
|
||||
0x30 ,0x1c ,0x38 ,0x1c ,0x38 ,0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,0x30 ,0x00 ,0x60 ,0x00 ,0x40 ,
|
||||
0x00 ,0x80 ,0x01 ,0x00 ,0x02 ,0x00 ,0x04 ,0x00 ,0x08 ,0x04 ,0x10 ,0x04 ,0x30 ,0x0c ,0x20 ,0x38 ,
|
||||
0x3f ,0xf8 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x0f ,0xc0 ,0x18 ,0x30 ,0x30 ,0x30 ,0x30 ,0x18 ,
|
||||
0x38 ,0x18 ,0x10 ,0x18 ,0x00 ,0x18 ,0x00 ,0x30 ,0x00 ,0x60 ,0x03 ,0xc0 ,0x01 ,0xe0 ,0x00 ,0x30 ,
|
||||
0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,0x0c ,0x00 ,0x0c ,0x30 ,0x0c ,0x38 ,0x1c ,0x30 ,0x18 ,0x30 ,0x30 ,
|
||||
0x0c ,0x60 ,0x03 ,0x80 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x20 ,0x00 ,0x60 ,0x00 ,0xe0 ,0x00 ,0xe0 ,
|
||||
0x01 ,0x60 ,0x03 ,0x60 ,0x02 ,0x60 ,0x04 ,0x60 ,0x04 ,0x60 ,0x08 ,0x60 ,0x10 ,0x60 ,0x10 ,0x60 ,
|
||||
0x20 ,0x60 ,0x60 ,0x60 ,0x7f ,0xfe ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,
|
||||
0x01 ,0xfc ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x1f ,0xf8 ,0x1f ,0xf8 ,0x10 ,0x00 ,0x10 ,0x00 ,
|
||||
0x10 ,0x00 ,0x10 ,0x00 ,0x10 ,0x00 ,0x10 ,0x00 ,0x17 ,0xe0 ,0x18 ,0x30 ,0x10 ,0x18 ,0x00 ,0x18 ,
|
||||
0x00 ,0x0c ,0x00 ,0x0c ,0x00 ,0x0c ,0x10 ,0x0c ,0x38 ,0x0c ,0x30 ,0x18 ,0x30 ,0x18 ,0x10 ,0x30 ,
|
||||
0x0c ,0x60 ,0x03 ,0x80 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x03 ,0xf0 ,0x04 ,0x18 ,0x08 ,0x18 ,0x18 ,0x18 ,
|
||||
0x10 ,0x00 ,0x30 ,0x00 ,0x30 ,0x00 ,0x30 ,0x00 ,0x33 ,0xf0 ,0x74 ,0x38 ,0x78 ,0x18 ,0x70 ,0x0c ,
|
||||
0x70 ,0x0c ,0x70 ,0x0c ,0x30 ,0x0c ,0x30 ,0x0c ,0x30 ,0x0c ,0x30 ,0x0c ,0x18 ,0x08 ,0x1c ,0x18 ,
|
||||
0x0e ,0x70 ,0x01 ,0x80 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x1f ,0xfc ,0x3f ,0xfc ,0x30 ,0x08 ,0x20 ,0x10 ,
|
||||
0x20 ,0x10 ,0x00 ,0x20 ,0x00 ,0x20 ,0x00 ,0x60 ,0x00 ,0x40 ,0x00 ,0xc0 ,0x00 ,0x80 ,0x01 ,0x80 ,
|
||||
0x01 ,0x80 ,0x01 ,0x80 ,0x03 ,0x00 ,0x03 ,0x00 ,0x03 ,0x00 ,0x03 ,0x00 ,0x03 ,0x00 ,0x07 ,0x00 ,
|
||||
0x03 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x0f ,0xe0 ,0x18 ,0x10 ,0x30 ,0x18 ,0x30 ,0x0c ,
|
||||
0x30 ,0x0c ,0x30 ,0x0c ,0x30 ,0x08 ,0x38 ,0x18 ,0x1e ,0x30 ,0x0f ,0xe0 ,0x07 ,0xe0 ,0x18 ,0xf0 ,
|
||||
0x30 ,0x38 ,0x30 ,0x18 ,0x60 ,0x0c ,0x60 ,0x0c ,0x60 ,0x0c ,0x60 ,0x0c ,0x30 ,0x08 ,0x10 ,0x18 ,
|
||||
0x0c ,0x70 ,0x03 ,0x80 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x0f ,0xc0 ,0x18 ,0x30 ,0x30 ,0x18 ,0x30 ,0x18 ,
|
||||
0x70 ,0x18 ,0x60 ,0x0c ,0x60 ,0x0c ,0x60 ,0x0c ,0x70 ,0x0c ,0x30 ,0x1c ,0x30 ,0x2c ,0x38 ,0x6c ,
|
||||
0x0f ,0xcc ,0x00 ,0x1c ,0x00 ,0x1c ,0x00 ,0x18 ,0x00 ,0x18 ,0x10 ,0x30 ,0x38 ,0x30 ,0x38 ,0x60 ,
|
||||
0x18 ,0xc0 ,0x07 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x03 ,0x80 ,0x03 ,0x80 ,0x03 ,0x80 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x01 ,0x80 ,0x03 ,0x80 ,
|
||||
0x03 ,0x80 ,0x01 ,0x80 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x03 ,0x80 ,0x03 ,0x80 ,0x03 ,0x80 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x03 ,0x80 ,
|
||||
0x03 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x00 ,0x03 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x08 ,0x00 ,0x10 ,0x00 ,0x20 ,0x00 ,0x40 ,
|
||||
0x00 ,0x80 ,0x01 ,0x00 ,0x02 ,0x00 ,0x04 ,0x00 ,0x08 ,0x00 ,0x10 ,0x00 ,0x30 ,0x00 ,0x18 ,0x00 ,
|
||||
0x0c ,0x00 ,0x06 ,0x00 ,0x03 ,0x00 ,0x01 ,0x80 ,0x00 ,0xc0 ,0x00 ,0x60 ,0x00 ,0x30 ,0x00 ,0x18 ,
|
||||
0x00 ,0x0c ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x7f ,0xfe ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x7f ,0xfe ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x20 ,0x00 ,0x30 ,0x00 ,0x18 ,0x00 ,0x0c ,0x00 ,0x06 ,0x00 ,
|
||||
0x03 ,0x00 ,0x01 ,0x80 ,0x00 ,0xc0 ,0x00 ,0x60 ,0x00 ,0x30 ,0x00 ,0x18 ,0x00 ,0x0c ,0x00 ,0x18 ,
|
||||
0x00 ,0x30 ,0x00 ,0x60 ,0x00 ,0xc0 ,0x01 ,0x80 ,0x03 ,0x00 ,0x06 ,0x00 ,0x0c ,0x00 ,0x18 ,0x00 ,
|
||||
0x30 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x01 ,0x80 ,0x0f ,0xf0 ,0x10 ,0x18 ,0x30 ,0x1c ,0x20 ,0x0c ,
|
||||
0x20 ,0x0c ,0x30 ,0x0c ,0x38 ,0x0c ,0x10 ,0x1c ,0x00 ,0x18 ,0x00 ,0x30 ,0x00 ,0xe0 ,0x01 ,0x80 ,
|
||||
0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x01 ,0x80 ,0x03 ,0x80 ,
|
||||
0x03 ,0x80 ,0x01 ,0x80 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x03 ,0xf0 ,0x0c ,0x18 ,0x08 ,0x04 ,0x10 ,0x04 ,
|
||||
0x30 ,0xf2 ,0x21 ,0x12 ,0x23 ,0x32 ,0x62 ,0x32 ,0x66 ,0x32 ,0x66 ,0x32 ,0x64 ,0x22 ,0x64 ,0x22 ,
|
||||
0x64 ,0x22 ,0x64 ,0x64 ,0x64 ,0x64 ,0x26 ,0xb8 ,0x33 ,0x10 ,0x10 ,0x02 ,0x18 ,0x04 ,0x08 ,0x08 ,
|
||||
0x06 ,0x70 ,0x01 ,0x80 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x01 ,0x80 ,0x03 ,0x80 ,0x03 ,0x80 ,0x02 ,0xc0 ,
|
||||
0x02 ,0xc0 ,0x04 ,0xc0 ,0x04 ,0xc0 ,0x04 ,0x60 ,0x04 ,0x60 ,0x08 ,0x60 ,0x08 ,0x60 ,0x08 ,0x30 ,
|
||||
0x08 ,0x30 ,0x17 ,0xf0 ,0x10 ,0x30 ,0x10 ,0x30 ,0x10 ,0x18 ,0x20 ,0x18 ,0x20 ,0x18 ,0x20 ,0x18 ,
|
||||
0x70 ,0x3e ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x7f ,0xe0 ,0x38 ,0x38 ,0x38 ,0x18 ,0x38 ,0x1c ,
|
||||
0x38 ,0x0c ,0x38 ,0x0c ,0x38 ,0x1c ,0x38 ,0x18 ,0x38 ,0x30 ,0x3f ,0xc0 ,0x38 ,0x70 ,0x38 ,0x18 ,
|
||||
0x38 ,0x0c ,0x38 ,0x0c ,0x38 ,0x0e ,0x38 ,0x0e ,0x38 ,0x0e ,0x38 ,0x0e ,0x38 ,0x0c ,0x38 ,0x18 ,
|
||||
0x7f ,0xf0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x03 ,0xfc ,0x0c ,0x0c ,0x18 ,0x04 ,0x18 ,0x04 ,
|
||||
0x30 ,0x02 ,0x30 ,0x00 ,0x70 ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,
|
||||
0x60 ,0x00 ,0x60 ,0x00 ,0x70 ,0x00 ,0x70 ,0x02 ,0x30 ,0x02 ,0x30 ,0x04 ,0x18 ,0x04 ,0x1c ,0x08 ,
|
||||
0x07 ,0xf0 ,0x01 ,0x80 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x7f ,0x80 ,0x38 ,0x60 ,0x38 ,0x30 ,0x38 ,0x18 ,
|
||||
0x38 ,0x0c ,0x38 ,0x0c ,0x38 ,0x0c ,0x38 ,0x0e ,0x38 ,0x0e ,0x38 ,0x0e ,0x38 ,0x0e ,0x38 ,0x0e ,
|
||||
0x38 ,0x0e ,0x38 ,0x0e ,0x38 ,0x0c ,0x38 ,0x0c ,0x38 ,0x0c ,0x38 ,0x18 ,0x38 ,0x18 ,0x38 ,0x70 ,
|
||||
0x3f ,0xc0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x7f ,0xf8 ,0x18 ,0x1c ,0x18 ,0x04 ,0x18 ,0x04 ,
|
||||
0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x20 ,0x18 ,0x20 ,0x1f ,0xe0 ,0x18 ,0x60 ,0x18 ,0x20 ,
|
||||
0x18 ,0x20 ,0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x02 ,0x18 ,0x02 ,0x18 ,0x04 ,0x18 ,0x0c ,
|
||||
0x7f ,0xfc ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x7f ,0xfc ,0x18 ,0x0c ,0x18 ,0x06 ,0x18 ,0x02 ,
|
||||
0x18 ,0x02 ,0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x10 ,0x18 ,0x10 ,0x18 ,0x30 ,0x1f ,0xf0 ,0x18 ,0x10 ,
|
||||
0x18 ,0x10 ,0x18 ,0x10 ,0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,
|
||||
0x7c ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x07 ,0xf8 ,0x0c ,0x38 ,0x18 ,0x18 ,0x10 ,0x08 ,
|
||||
0x30 ,0x08 ,0x30 ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,
|
||||
0x60 ,0x7e ,0x60 ,0x18 ,0x60 ,0x18 ,0x70 ,0x18 ,0x30 ,0x18 ,0x30 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,
|
||||
0x0e ,0x20 ,0x01 ,0xc0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xfc ,0x3e ,0x30 ,0x1c ,0x30 ,0x1c ,0x30 ,0x1c ,
|
||||
0x30 ,0x1c ,0x30 ,0x1c ,0x30 ,0x1c ,0x30 ,0x1c ,0x30 ,0x1c ,0x30 ,0x1c ,0x3f ,0xfc ,0x30 ,0x1c ,
|
||||
0x30 ,0x1c ,0x30 ,0x1c ,0x30 ,0x1c ,0x30 ,0x1c ,0x30 ,0x1c ,0x30 ,0x1c ,0x30 ,0x1c ,0x30 ,0x1c ,
|
||||
0x78 ,0x3e ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x1f ,0xf8 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,
|
||||
0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,
|
||||
0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,
|
||||
0x1f ,0xf0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x07 ,0xfe ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,
|
||||
0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,
|
||||
0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,0x30 ,0x40 ,0x30 ,0xc0 ,
|
||||
0x3f ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x7c ,0x7e ,0x38 ,0x18 ,0x38 ,0x30 ,0x38 ,0x20 ,
|
||||
0x38 ,0x40 ,0x38 ,0x80 ,0x38 ,0x80 ,0x39 ,0x00 ,0x3b ,0x00 ,0x3f ,0x80 ,0x3d ,0x80 ,0x39 ,0x80 ,
|
||||
0x38 ,0xc0 ,0x38 ,0xc0 ,0x38 ,0x60 ,0x38 ,0x60 ,0x38 ,0x30 ,0x38 ,0x30 ,0x38 ,0x18 ,0x38 ,0x18 ,
|
||||
0x7c ,0x3e ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x7e ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,
|
||||
0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,
|
||||
0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x02 ,0x18 ,0x02 ,0x18 ,0x04 ,0x18 ,0x0c ,
|
||||
0x7f ,0xfc ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xf0 ,0x1f ,0x30 ,0x1c ,0x30 ,0x1c ,0x38 ,0x1c ,
|
||||
0x38 ,0x2c ,0x38 ,0x2c ,0x38 ,0x2c ,0x28 ,0x2c ,0x2c ,0x4c ,0x2c ,0x4c ,0x2c ,0x4c ,0x2c ,0x4c ,
|
||||
0x24 ,0x8c ,0x26 ,0x8c ,0x26 ,0x8c ,0x26 ,0x8c ,0x22 ,0x8c ,0x23 ,0x0c ,0x23 ,0x0c ,0x23 ,0x0c ,
|
||||
0x73 ,0x1e ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xf0 ,0x1f ,0x38 ,0x04 ,0x38 ,0x04 ,0x2c ,0x04 ,
|
||||
0x2c ,0x04 ,0x26 ,0x04 ,0x26 ,0x04 ,0x23 ,0x04 ,0x23 ,0x04 ,0x21 ,0x84 ,0x21 ,0x84 ,0x20 ,0xc4 ,
|
||||
0x20 ,0xc4 ,0x20 ,0x64 ,0x20 ,0x74 ,0x20 ,0x34 ,0x20 ,0x3c ,0x20 ,0x1c ,0x20 ,0x1c ,0x20 ,0x0c ,
|
||||
0x78 ,0x0c ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x07 ,0xe0 ,0x0c ,0x30 ,0x18 ,0x18 ,0x30 ,0x08 ,
|
||||
0x30 ,0x0c ,0x30 ,0x0c ,0x70 ,0x0e ,0x70 ,0x0e ,0x60 ,0x06 ,0x60 ,0x06 ,0x60 ,0x06 ,0x60 ,0x06 ,
|
||||
0x60 ,0x06 ,0x60 ,0x06 ,0x70 ,0x0e ,0x30 ,0x0c ,0x30 ,0x0c ,0x30 ,0x0c ,0x18 ,0x18 ,0x08 ,0x10 ,
|
||||
0x06 ,0x60 ,0x01 ,0x80 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x7f ,0xe0 ,0x18 ,0x18 ,0x18 ,0x0c ,0x18 ,0x0c ,
|
||||
0x18 ,0x0e ,0x18 ,0x0e ,0x18 ,0x0e ,0x18 ,0x0c ,0x18 ,0x0c ,0x18 ,0x18 ,0x18 ,0x70 ,0x1f ,0x80 ,
|
||||
0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,
|
||||
0x7c ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x07 ,0xe0 ,0x0c ,0x30 ,0x18 ,0x18 ,0x30 ,0x08 ,
|
||||
0x30 ,0x0c ,0x30 ,0x0c ,0x70 ,0x0c ,0x60 ,0x0e ,0x60 ,0x0e ,0x60 ,0x0e ,0x60 ,0x0e ,0x60 ,0x0e ,
|
||||
0x60 ,0x0e ,0x60 ,0x0e ,0x60 ,0x0e ,0x77 ,0x8c ,0x3d ,0xcc ,0x38 ,0xcc ,0x18 ,0x58 ,0x18 ,0x70 ,
|
||||
0x06 ,0x60 ,0x01 ,0xf0 ,0x00 ,0x3c ,0x00 ,0x3c ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x7f ,0xe0 ,0x18 ,0x38 ,0x18 ,0x18 ,0x18 ,0x0c ,
|
||||
0x18 ,0x0c ,0x18 ,0x0c ,0x18 ,0x0c ,0x18 ,0x1c ,0x18 ,0x18 ,0x18 ,0x70 ,0x1f ,0xc0 ,0x18 ,0xc0 ,
|
||||
0x18 ,0xc0 ,0x18 ,0x60 ,0x18 ,0x60 ,0x18 ,0x30 ,0x18 ,0x30 ,0x18 ,0x30 ,0x18 ,0x18 ,0x18 ,0x18 ,
|
||||
0x7c ,0x1e ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x0f ,0xe8 ,0x10 ,0x38 ,0x30 ,0x18 ,0x20 ,0x08 ,
|
||||
0x20 ,0x08 ,0x20 ,0x00 ,0x30 ,0x00 ,0x38 ,0x00 ,0x1c ,0x00 ,0x0f ,0x80 ,0x03 ,0xe0 ,0x00 ,0xf0 ,
|
||||
0x00 ,0x38 ,0x00 ,0x18 ,0x00 ,0x0c ,0x40 ,0x0c ,0x40 ,0x0c ,0x20 ,0x0c ,0x20 ,0x08 ,0x30 ,0x18 ,
|
||||
0x3c ,0x70 ,0x03 ,0x80 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x3f ,0xfc ,0x21 ,0x8c ,0x61 ,0x84 ,0x41 ,0x84 ,
|
||||
0x41 ,0x82 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,
|
||||
0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,
|
||||
0x07 ,0xe0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xfc ,0x1e ,0x30 ,0x08 ,0x30 ,0x08 ,0x30 ,0x08 ,
|
||||
0x30 ,0x08 ,0x30 ,0x08 ,0x30 ,0x08 ,0x30 ,0x08 ,0x30 ,0x08 ,0x30 ,0x08 ,0x30 ,0x08 ,0x30 ,0x08 ,
|
||||
0x30 ,0x08 ,0x30 ,0x08 ,0x30 ,0x08 ,0x30 ,0x08 ,0x30 ,0x08 ,0x30 ,0x08 ,0x30 ,0x08 ,0x18 ,0x10 ,
|
||||
0x0e ,0x60 ,0x01 ,0x80 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xfc ,0x3e ,0x30 ,0x08 ,0x30 ,0x08 ,0x18 ,0x08 ,
|
||||
0x18 ,0x10 ,0x18 ,0x10 ,0x18 ,0x10 ,0x0c ,0x10 ,0x0c ,0x20 ,0x0c ,0x20 ,0x0c ,0x20 ,0x06 ,0x40 ,
|
||||
0x06 ,0x40 ,0x06 ,0x40 ,0x06 ,0x40 ,0x03 ,0x80 ,0x03 ,0x80 ,0x03 ,0x80 ,0x03 ,0x80 ,0x01 ,0x00 ,
|
||||
0x01 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xfb ,0xcf ,0x61 ,0x84 ,0x61 ,0x84 ,0x21 ,0x84 ,
|
||||
0x31 ,0x84 ,0x31 ,0x84 ,0x31 ,0xc8 ,0x31 ,0xc8 ,0x31 ,0xc8 ,0x12 ,0xc8 ,0x12 ,0xc8 ,0x1a ,0x50 ,
|
||||
0x1a ,0x50 ,0x1a ,0x70 ,0x1c ,0x70 ,0x1c ,0x70 ,0x0c ,0x70 ,0x0c ,0x60 ,0x0c ,0x20 ,0x0c ,0x20 ,
|
||||
0x08 ,0x20 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x7c ,0x3e ,0x18 ,0x18 ,0x18 ,0x10 ,0x0c ,0x10 ,
|
||||
0x0c ,0x20 ,0x06 ,0x20 ,0x06 ,0x40 ,0x02 ,0x40 ,0x03 ,0x80 ,0x03 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,
|
||||
0x02 ,0xc0 ,0x02 ,0xc0 ,0x04 ,0x60 ,0x04 ,0x60 ,0x0c ,0x30 ,0x08 ,0x30 ,0x08 ,0x18 ,0x10 ,0x18 ,
|
||||
0x78 ,0x3e ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x7c ,0x3e ,0x30 ,0x08 ,0x18 ,0x08 ,0x18 ,0x10 ,
|
||||
0x18 ,0x10 ,0x0c ,0x20 ,0x0c ,0x20 ,0x06 ,0x20 ,0x06 ,0x40 ,0x06 ,0x40 ,0x03 ,0x40 ,0x03 ,0x80 ,
|
||||
0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,
|
||||
0x07 ,0xe0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x1f ,0xfc ,0x18 ,0x0c ,0x30 ,0x18 ,0x20 ,0x18 ,
|
||||
0x00 ,0x30 ,0x00 ,0x70 ,0x00 ,0x60 ,0x00 ,0xe0 ,0x00 ,0xc0 ,0x01 ,0x80 ,0x01 ,0x80 ,0x03 ,0x00 ,
|
||||
0x03 ,0x00 ,0x06 ,0x00 ,0x06 ,0x00 ,0x0c ,0x00 ,0x0c ,0x00 ,0x18 ,0x04 ,0x18 ,0x04 ,0x30 ,0x0c ,
|
||||
0x7f ,0xf8 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x03 ,0xfc ,0x03 ,0xfc ,0x02 ,0x00 ,0x02 ,0x00 ,0x02 ,0x00 ,0x02 ,0x00 ,0x02 ,0x00 ,0x02 ,0x00 ,
|
||||
0x02 ,0x00 ,0x02 ,0x00 ,0x02 ,0x00 ,0x02 ,0x00 ,0x02 ,0x00 ,0x02 ,0x00 ,0x02 ,0x00 ,0x02 ,0x00 ,
|
||||
0x02 ,0x00 ,0x02 ,0x00 ,0x02 ,0x00 ,0x02 ,0x00 ,0x02 ,0x00 ,0x02 ,0x00 ,0x02 ,0x00 ,0x02 ,0x00 ,
|
||||
0x02 ,0x00 ,0x02 ,0x00 ,0x02 ,0x00 ,0x03 ,0xfc ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x10 ,0x00 ,0x10 ,0x00 ,0x18 ,0x00 ,0x08 ,0x00 ,0x0c ,0x00 ,
|
||||
0x04 ,0x00 ,0x04 ,0x00 ,0x06 ,0x00 ,0x02 ,0x00 ,0x03 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x80 ,
|
||||
0x00 ,0x80 ,0x00 ,0xc0 ,0x00 ,0x40 ,0x00 ,0x40 ,0x00 ,0x60 ,0x00 ,0x20 ,0x00 ,0x30 ,0x00 ,0x10 ,
|
||||
0x00 ,0x10 ,0x00 ,0x18 ,0x00 ,0x08 ,0x00 ,0x0c ,0x00 ,0x04 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x3f ,0xc0 ,0x3f ,0xc0 ,0x00 ,0xc0 ,0x00 ,0xc0 ,0x00 ,0xc0 ,0x00 ,0xc0 ,0x00 ,0xc0 ,0x00 ,0xc0 ,
|
||||
0x00 ,0xc0 ,0x00 ,0xc0 ,0x00 ,0xc0 ,0x00 ,0xc0 ,0x00 ,0xc0 ,0x00 ,0xc0 ,0x00 ,0xc0 ,0x00 ,0xc0 ,
|
||||
0x00 ,0xc0 ,0x00 ,0xc0 ,0x00 ,0xc0 ,0x00 ,0xc0 ,0x00 ,0xc0 ,0x00 ,0xc0 ,0x00 ,0xc0 ,0x00 ,0xc0 ,
|
||||
0x00 ,0xc0 ,0x00 ,0xc0 ,0x00 ,0xc0 ,0x3f ,0xc0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x03 ,0xc0 ,0x06 ,0xe0 ,0x0c ,0x20 ,0x00 ,0x10 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xff ,0xff ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x1e ,0x00 ,0x07 ,0x00 ,0x01 ,0x80 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x07 ,0xc0 ,0x18 ,0x30 ,0x30 ,0x10 ,0x30 ,0x18 ,0x00 ,0x18 ,
|
||||
0x00 ,0x78 ,0x07 ,0x98 ,0x18 ,0x18 ,0x30 ,0x18 ,0x70 ,0x18 ,0x60 ,0x18 ,0x60 ,0x18 ,0x30 ,0x3a ,
|
||||
0x1f ,0xde ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x10 ,0x00 ,0x70 ,0x00 ,0x30 ,0x00 ,0x30 ,0x00 ,0x30 ,0x00 ,
|
||||
0x30 ,0x00 ,0x30 ,0x00 ,0x30 ,0x00 ,0x31 ,0xc0 ,0x32 ,0x30 ,0x34 ,0x18 ,0x38 ,0x0c ,0x38 ,0x0c ,
|
||||
0x30 ,0x0c ,0x30 ,0x0c ,0x30 ,0x0c ,0x30 ,0x0c ,0x30 ,0x0c ,0x30 ,0x0c ,0x30 ,0x18 ,0x38 ,0x18 ,
|
||||
0x37 ,0xf0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x03 ,0xe0 ,0x0c ,0x30 ,0x18 ,0x18 ,0x18 ,0x18 ,0x30 ,0x18 ,
|
||||
0x30 ,0x00 ,0x30 ,0x00 ,0x30 ,0x00 ,0x30 ,0x00 ,0x30 ,0x00 ,0x30 ,0x04 ,0x18 ,0x08 ,0x18 ,0x08 ,
|
||||
0x0f ,0x70 ,0x00 ,0xc0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x08 ,0x00 ,0x78 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,
|
||||
0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x03 ,0x98 ,0x0e ,0x78 ,0x18 ,0x18 ,0x18 ,0x18 ,0x30 ,0x18 ,
|
||||
0x30 ,0x18 ,0x30 ,0x18 ,0x30 ,0x18 ,0x30 ,0x18 ,0x30 ,0x18 ,0x30 ,0x18 ,0x10 ,0x18 ,0x18 ,0x38 ,
|
||||
0x0f ,0xde ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x03 ,0xc0 ,0x0c ,0x30 ,0x18 ,0x18 ,0x10 ,0x18 ,0x30 ,0x0c ,
|
||||
0x30 ,0x0c ,0x30 ,0x0c ,0x3f ,0xf0 ,0x30 ,0x00 ,0x30 ,0x00 ,0x30 ,0x00 ,0x18 ,0x08 ,0x18 ,0x08 ,
|
||||
0x07 ,0x70 ,0x00 ,0xc0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xf8 ,0x01 ,0x06 ,0x03 ,0x06 ,0x02 ,0x04 ,
|
||||
0x02 ,0x00 ,0x06 ,0x00 ,0x06 ,0x00 ,0x3f ,0xf8 ,0x06 ,0x00 ,0x06 ,0x00 ,0x06 ,0x00 ,0x06 ,0x00 ,
|
||||
0x06 ,0x00 ,0x06 ,0x00 ,0x06 ,0x00 ,0x06 ,0x00 ,0x06 ,0x00 ,0x06 ,0x00 ,0x06 ,0x00 ,0x06 ,0x00 ,
|
||||
0x1f ,0xe0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x03 ,0x8e ,0x0c ,0x76 ,0x18 ,0x30 ,0x10 ,0x10 ,0x10 ,0x10 ,
|
||||
0x10 ,0x10 ,0x18 ,0x10 ,0x08 ,0x30 ,0x0e ,0xe0 ,0x11 ,0x00 ,0x10 ,0x00 ,0x1f ,0x80 ,0x0f ,0xf8 ,
|
||||
0x10 ,0x3c ,0x20 ,0x0c ,0x20 ,0x0c ,0x20 ,0x0c ,0x10 ,0x18 ,0x0f ,0xf0 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x10 ,0x00 ,0x70 ,0x00 ,0x10 ,0x00 ,0x10 ,0x00 ,0x10 ,0x00 ,
|
||||
0x10 ,0x00 ,0x10 ,0x00 ,0x10 ,0x00 ,0x11 ,0xe0 ,0x17 ,0x30 ,0x1c ,0x18 ,0x18 ,0x18 ,0x10 ,0x18 ,
|
||||
0x10 ,0x18 ,0x10 ,0x18 ,0x10 ,0x18 ,0x10 ,0x18 ,0x10 ,0x18 ,0x10 ,0x18 ,0x10 ,0x18 ,0x10 ,0x18 ,
|
||||
0x7c ,0x3c ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x01 ,0x80 ,0x03 ,0xc0 ,0x01 ,0x80 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x80 ,0x1f ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,
|
||||
0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,
|
||||
0x0f ,0xf0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x38 ,0x00 ,0x38 ,0x00 ,0x30 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x01 ,0xf0 ,0x00 ,0x30 ,0x00 ,0x30 ,0x00 ,0x30 ,0x00 ,0x30 ,
|
||||
0x00 ,0x30 ,0x00 ,0x30 ,0x00 ,0x30 ,0x00 ,0x30 ,0x00 ,0x30 ,0x00 ,0x30 ,0x00 ,0x30 ,0x00 ,0x30 ,
|
||||
0x00 ,0x30 ,0x00 ,0x30 ,0x00 ,0x30 ,0x38 ,0x20 ,0x18 ,0x60 ,0x0f ,0x80 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x08 ,0x00 ,0x78 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,
|
||||
0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x7c ,0x18 ,0x30 ,0x18 ,0x60 ,0x18 ,0x40 ,0x18 ,0x80 ,
|
||||
0x19 ,0x00 ,0x1b ,0x80 ,0x1c ,0xc0 ,0x18 ,0xc0 ,0x18 ,0x60 ,0x18 ,0x70 ,0x18 ,0x30 ,0x18 ,0x18 ,
|
||||
0x7c ,0x3c ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x01 ,0x80 ,0x1f ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,
|
||||
0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,
|
||||
0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,
|
||||
0x1f ,0xf0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xe7 ,0x38 ,0x69 ,0xcc ,0x71 ,0x84 ,0x61 ,0x86 ,0x61 ,0x86 ,
|
||||
0x61 ,0x86 ,0x61 ,0x86 ,0x61 ,0x86 ,0x61 ,0x86 ,0x61 ,0x86 ,0x61 ,0x86 ,0x61 ,0x86 ,0x61 ,0x86 ,
|
||||
0x73 ,0xce ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x71 ,0xe0 ,0x12 ,0x30 ,0x1c ,0x18 ,0x18 ,0x18 ,0x10 ,0x18 ,
|
||||
0x10 ,0x18 ,0x10 ,0x18 ,0x10 ,0x18 ,0x10 ,0x18 ,0x10 ,0x18 ,0x10 ,0x18 ,0x10 ,0x18 ,0x10 ,0x18 ,
|
||||
0x7c ,0x3c ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x03 ,0xc0 ,0x0c ,0x30 ,0x18 ,0x18 ,0x30 ,0x08 ,0x30 ,0x0c ,
|
||||
0x30 ,0x0c ,0x60 ,0x0c ,0x60 ,0x0c ,0x60 ,0x0c ,0x30 ,0x0c ,0x30 ,0x0c ,0x30 ,0x08 ,0x18 ,0x18 ,
|
||||
0x0c ,0x20 ,0x03 ,0xc0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x71 ,0xc0 ,0x36 ,0x30 ,0x14 ,0x18 ,0x18 ,0x0c ,0x10 ,0x0c ,
|
||||
0x10 ,0x0c ,0x10 ,0x0c ,0x10 ,0x0c ,0x10 ,0x0c ,0x10 ,0x0c ,0x10 ,0x0c ,0x18 ,0x18 ,0x18 ,0x18 ,
|
||||
0x16 ,0x70 ,0x11 ,0x80 ,0x10 ,0x00 ,0x10 ,0x00 ,0x10 ,0x00 ,0x7e ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x03 ,0x88 ,0x0c ,0x68 ,0x18 ,0x18 ,0x30 ,0x18 ,0x30 ,0x18 ,
|
||||
0x30 ,0x18 ,0x30 ,0x18 ,0x30 ,0x18 ,0x30 ,0x18 ,0x30 ,0x18 ,0x30 ,0x18 ,0x30 ,0x18 ,0x18 ,0x38 ,
|
||||
0x0f ,0xd8 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,0x18 ,0x00 ,0x7e ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x7c ,0x38 ,0x0c ,0x4c ,0x0c ,0x8c ,0x0d ,0x00 ,0x0e ,0x00 ,
|
||||
0x0c ,0x00 ,0x0c ,0x00 ,0x0c ,0x00 ,0x0c ,0x00 ,0x0c ,0x00 ,0x0c ,0x00 ,0x0c ,0x00 ,0x0c ,0x00 ,
|
||||
0x7f ,0xc0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x03 ,0xc8 ,0x0c ,0x38 ,0x18 ,0x18 ,0x18 ,0x08 ,0x18 ,0x00 ,
|
||||
0x1c ,0x00 ,0x0f ,0x80 ,0x01 ,0xe0 ,0x00 ,0x78 ,0x00 ,0x18 ,0x10 ,0x0c ,0x10 ,0x08 ,0x18 ,0x08 ,
|
||||
0x1f ,0xf0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x02 ,0x00 ,
|
||||
0x02 ,0x00 ,0x02 ,0x00 ,0x06 ,0x00 ,0x3f ,0xf0 ,0x02 ,0x00 ,0x02 ,0x00 ,0x02 ,0x00 ,0x02 ,0x00 ,
|
||||
0x02 ,0x00 ,0x02 ,0x00 ,0x02 ,0x00 ,0x02 ,0x00 ,0x02 ,0x00 ,0x02 ,0x04 ,0x02 ,0x08 ,0x03 ,0x08 ,
|
||||
0x01 ,0xf0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x70 ,0x78 ,0x30 ,0x18 ,0x30 ,0x18 ,0x30 ,0x18 ,0x30 ,0x18 ,
|
||||
0x30 ,0x18 ,0x30 ,0x18 ,0x30 ,0x18 ,0x30 ,0x18 ,0x30 ,0x18 ,0x10 ,0x18 ,0x10 ,0x18 ,0x18 ,0x38 ,
|
||||
0x0f ,0xde ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x7c ,0x3e ,0x18 ,0x18 ,0x18 ,0x10 ,0x18 ,0x10 ,0x0c ,0x10 ,
|
||||
0x0c ,0x20 ,0x0c ,0x20 ,0x06 ,0x20 ,0x06 ,0x40 ,0x02 ,0x40 ,0x03 ,0x80 ,0x03 ,0x80 ,0x01 ,0x80 ,
|
||||
0x01 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xfb ,0xdf ,0x61 ,0x84 ,0x21 ,0x84 ,0x31 ,0x84 ,0x31 ,0x88 ,
|
||||
0x31 ,0xc8 ,0x12 ,0xc8 ,0x12 ,0xc8 ,0x1a ,0x50 ,0x1a ,0x50 ,0x0c ,0x70 ,0x0c ,0x70 ,0x0c ,0x20 ,
|
||||
0x0c ,0x20 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x3e ,0x7c ,0x1c ,0x10 ,0x0c ,0x30 ,0x06 ,0x20 ,0x06 ,0x40 ,
|
||||
0x03 ,0xc0 ,0x01 ,0x80 ,0x01 ,0x80 ,0x03 ,0xc0 ,0x02 ,0x40 ,0x04 ,0x60 ,0x08 ,0x30 ,0x08 ,0x30 ,
|
||||
0x78 ,0x7c ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x7e ,0x7e ,0x18 ,0x18 ,0x18 ,0x10 ,0x0c ,0x10 ,0x0c ,0x30 ,
|
||||
0x0c ,0x20 ,0x06 ,0x20 ,0x06 ,0x60 ,0x02 ,0x40 ,0x03 ,0x40 ,0x03 ,0x80 ,0x01 ,0x80 ,0x01 ,0x80 ,
|
||||
0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x02 ,0x00 ,0x3e ,0x00 ,0x1c ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x1f ,0xf8 ,0x38 ,0x30 ,0x30 ,0x30 ,0x20 ,0x60 ,0x20 ,0xc0 ,
|
||||
0x00 ,0xc0 ,0x01 ,0x80 ,0x03 ,0x00 ,0x03 ,0x00 ,0x06 ,0x04 ,0x0c ,0x08 ,0x0c ,0x08 ,0x18 ,0x08 ,
|
||||
0x3f ,0xf8 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x0c ,0x00 ,0x30 ,0x00 ,0x20 ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,
|
||||
0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x40 ,0x00 ,0x40 ,0x00 ,0xc0 ,0x01 ,0x00 ,0x00 ,0xc0 ,
|
||||
0x00 ,0x40 ,0x00 ,0x40 ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,0x00 ,0x60 ,
|
||||
0x00 ,0x60 ,0x00 ,0x20 ,0x00 ,0x20 ,0x00 ,0x38 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,
|
||||
0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,
|
||||
0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,
|
||||
0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x30 ,0x00 ,0x0c ,0x00 ,0x04 ,0x00 ,0x04 ,0x00 ,0x04 ,0x00 ,0x04 ,0x00 ,0x04 ,0x00 ,0x04 ,0x00 ,
|
||||
0x04 ,0x00 ,0x04 ,0x00 ,0x04 ,0x00 ,0x04 ,0x00 ,0x06 ,0x00 ,0x03 ,0x00 ,0x00 ,0x80 ,0x03 ,0x00 ,
|
||||
0x06 ,0x00 ,0x04 ,0x00 ,0x04 ,0x00 ,0x04 ,0x00 ,0x04 ,0x00 ,0x04 ,0x00 ,0x04 ,0x00 ,0x04 ,0x00 ,
|
||||
0x04 ,0x00 ,0x04 ,0x00 ,0x04 ,0x00 ,0x18 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x23 ,0x02 ,0x41 ,0x82 ,0x40 ,0xc4 ,0x00 ,0x6c ,0x00 ,0x30 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
|
|
@ -0,0 +1,493 @@
|
|||
/*
|
||||
* Copyright (c) 2022 HiSilicon (Shanghai) Technologies CO., LIMITED.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#include "hi_comm_vb.h"
|
||||
#include "hi_comm_vgs.h"
|
||||
#include "hi_comm_region.h"
|
||||
#include "sample_comm.h"
|
||||
#include "mpi_sys.h"
|
||||
#include "mpi_vgs.h"
|
||||
#include "hi_buffer.h"
|
||||
|
||||
#include "vgs_img.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#endif /* End of #ifdef __cplusplus */
|
||||
|
||||
#define VGS_MAX_LINE 100 // The maximum number of lines for a superimposed graphics operation
|
||||
#define RECT_LINES 4 // The number of lines in a rectangle
|
||||
|
||||
#define RECT_LINE1 1
|
||||
#define RECT_LINE2 2
|
||||
#define RECT_LINE3 3
|
||||
|
||||
/*
|
||||
* 设置帧的buffer
|
||||
* Set the buf of the frame
|
||||
*/
|
||||
static void MppFrmSetBuf(VIDEO_FRAME_INFO_S* frm,
|
||||
const VB_CAL_CONFIG_S *vbCfg, HI_U64 phyAddr, uint8_t *virAddr)
|
||||
{
|
||||
/*
|
||||
* 目前只支持SP422/SP420,不支持SP444
|
||||
* Currently only SP422/SP420 is supported, SP444 is not supported
|
||||
*/
|
||||
frm->stVFrame.u32HeaderStride[0] = vbCfg->u32HeadStride;
|
||||
frm->stVFrame.u32HeaderStride[1] = vbCfg->u32HeadStride;
|
||||
frm->stVFrame.u32HeaderStride[2] = vbCfg->u32HeadStride; // 2: Array subscript, not out of bounds
|
||||
frm->stVFrame.u64HeaderPhyAddr[0] = phyAddr;
|
||||
frm->stVFrame.u64HeaderPhyAddr[1] = frm->stVFrame.u64HeaderPhyAddr[0] + vbCfg->u32HeadYSize;
|
||||
frm->stVFrame.u64HeaderPhyAddr[2] = frm->stVFrame.u64HeaderPhyAddr[1]; // 2: Array subscript, not out of bounds
|
||||
frm->stVFrame.u64HeaderVirAddr[0] = (HI_U64)(HI_UL)virAddr;
|
||||
frm->stVFrame.u64HeaderVirAddr[1] = frm->stVFrame.u64HeaderVirAddr[0] + vbCfg->u32HeadYSize;
|
||||
frm->stVFrame.u64HeaderVirAddr[2] = frm->stVFrame.u64HeaderVirAddr[1]; // 2: Array subscript, not out of bounds
|
||||
|
||||
frm->stVFrame.u32Stride[0] = vbCfg->u32MainStride;
|
||||
frm->stVFrame.u32Stride[1] = vbCfg->u32MainStride;
|
||||
frm->stVFrame.u32Stride[2] = vbCfg->u32MainStride; // 2: Array subscript, not out of bounds
|
||||
frm->stVFrame.u64PhyAddr[0] = frm->stVFrame.u64HeaderPhyAddr[0] + vbCfg->u32HeadSize;
|
||||
frm->stVFrame.u64PhyAddr[1] = frm->stVFrame.u64PhyAddr[0] + vbCfg->u32MainYSize;
|
||||
frm->stVFrame.u64PhyAddr[2] = frm->stVFrame.u64PhyAddr[1]; // 2: Array subscript, not out of bounds
|
||||
frm->stVFrame.u64VirAddr[0] = frm->stVFrame.u64HeaderVirAddr[0] + vbCfg->u32HeadSize;
|
||||
frm->stVFrame.u64VirAddr[1] = frm->stVFrame.u64VirAddr[0] + vbCfg->u32MainYSize;
|
||||
frm->stVFrame.u64VirAddr[2] = frm->stVFrame.u64VirAddr[1]; // 2: Array subscript, not out of bounds
|
||||
}
|
||||
|
||||
/*
|
||||
* 创建一个空的frame buf.
|
||||
* 它根据参数的规格计算frame所需空间,为frame分配内存.
|
||||
* @param frm[in|out]: 若成功,创建的frame信息会复制到frm.
|
||||
* @param width[in]: frame width.
|
||||
* @param height[in]: frame height.
|
||||
* @param pixelFormat[in]: 置为-1表示取默认值PIXEL_FORMAT_YVU_SEMIPLANAR_420.
|
||||
* @param bitWidth[in]: 置为-1表示取默认值DATA_BITWIDTH_8.
|
||||
* @param compressMode[in]: 置为-1表示取默认值COMPRESS_MODE_NONE.
|
||||
* @param align[in]: 对齐的字节长度. 置为-1表示取默认值'自动对齐'.
|
||||
*
|
||||
* Create an empty frame buf.
|
||||
* It calculates the space required by the frame according to the parameter specification,
|
||||
* and allocates memory for the frame.
|
||||
* @param frm[in|out]: If successful, the created frame information will be copied to frm.
|
||||
* @param width[in]: frame width.
|
||||
* @param height[in]: frame height.
|
||||
* @param pixelFormat[in]: Set to -1 means to take the default value PIXEL_FORMAT_YVU_SEMIPLANAR_420.
|
||||
* @param bitWidth[in]: Set to -1 means to take the default value DATA_BITWIDTH_8.
|
||||
* @param compressMode[in]: Set to -1 means to take the default value COMPRESS_MODE_NONE.
|
||||
* @param align[in]: The byte length of the alignment. Set to -1 to take the default value 'automatic alignment'.
|
||||
*/
|
||||
int MppFrmCreate(
|
||||
VIDEO_FRAME_INFO_S* frm,
|
||||
int width, int height,
|
||||
PIXEL_FORMAT_E pixelFormat,
|
||||
DATA_BITWIDTH_E bitWidth,
|
||||
COMPRESS_MODE_E compressMode,
|
||||
int align)
|
||||
{
|
||||
HI_ASSERT(frm);
|
||||
VB_CAL_CONFIG_S vbCfg;
|
||||
|
||||
if (memset_s(frm, sizeof(*frm), 0, sizeof(*frm)) != EOK) {
|
||||
HI_ASSERT(0);
|
||||
}
|
||||
|
||||
HI_ASSERT(width > 0 && height > 0);
|
||||
if ((int)pixelFormat < 0) {
|
||||
pixelFormat = PIXEL_FORMAT_YVU_SEMIPLANAR_420;
|
||||
}
|
||||
if ((int)bitWidth < 0) {
|
||||
bitWidth = DATA_BITWIDTH_8;
|
||||
}
|
||||
if ((int)compressMode < 0) {
|
||||
compressMode = COMPRESS_MODE_NONE;
|
||||
}
|
||||
if (align < 0) {
|
||||
HI_ASSERT(0);
|
||||
}
|
||||
|
||||
COMMON_GetPicBufferConfig(width, height, pixelFormat, bitWidth, compressMode, align, &vbCfg);
|
||||
|
||||
HI_U64 u64VBSize = (HI_U64) vbCfg.u32VBSize; // HACK 不强转一下有问题, 可能是clang有bug吧
|
||||
VB_BLK vbHnd = HI_MPI_VB_GetBlock(VB_INVALID_POOLID, u64VBSize, NULL);
|
||||
if (vbHnd == VB_INVALID_HANDLE) {
|
||||
SAMPLE_PRT("HI_MPI_VB_GetBlock FAIL\n");
|
||||
return HI_FAILURE;
|
||||
}
|
||||
|
||||
HI_U64 phyAddr = HI_MPI_VB_Handle2PhysAddr(vbHnd);
|
||||
HI_ASSERT(phyAddr);
|
||||
uint8_t* virAddr = (uint8_t*)HI_MPI_SYS_Mmap(phyAddr, u64VBSize);
|
||||
HI_ASSERT(virAddr);
|
||||
|
||||
/*
|
||||
* u64PrivateData用来存储映射的内存区长度和vbHnd,在destroy时会用到
|
||||
*
|
||||
* u64PrivateData is used to store the length of the mapped memory area and vbHnd,
|
||||
* which will be used when destroying
|
||||
*/
|
||||
frm->stVFrame.u64PrivateData = ((uint64_t)(uint32_t)vbHnd) << HI_INT32_BITS;
|
||||
frm->stVFrame.u64PrivateData |= (uint64_t)u64VBSize;
|
||||
|
||||
frm->enModId = HI_ID_VGS;
|
||||
frm->u32PoolId = HI_MPI_VB_Handle2PoolId(vbHnd);
|
||||
|
||||
frm->stVFrame.u32Width = width;
|
||||
frm->stVFrame.u32Height = height;
|
||||
frm->stVFrame.enField = VIDEO_FIELD_FRAME;
|
||||
frm->stVFrame.enPixelFormat = pixelFormat;
|
||||
frm->stVFrame.enVideoFormat = VIDEO_FORMAT_LINEAR;
|
||||
frm->stVFrame.enCompressMode = compressMode;
|
||||
frm->stVFrame.enDynamicRange = DYNAMIC_RANGE_SDR8;
|
||||
frm->stVFrame.enColorGamut = COLOR_GAMUT_BT601;
|
||||
|
||||
MppFrmSetBuf(frm, &vbCfg, phyAddr, virAddr);
|
||||
return HI_SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
* 判断frame是否可用, 即是否分配了内存
|
||||
* Determine whether the frame is available, That is, whether the memory is allocated
|
||||
*/
|
||||
bool MppFrmValid(const VIDEO_FRAME_INFO_S* frm)
|
||||
{
|
||||
/*
|
||||
* VPSS输出的frame默认没有映射虚地址
|
||||
* The frame output by VPSS does not map virtual addresses by default
|
||||
*/
|
||||
return frm->stVFrame.u64PhyAddr[0];
|
||||
}
|
||||
|
||||
/*
|
||||
* 销毁frame
|
||||
* Destory frame
|
||||
*/
|
||||
void MppFrmDestroy(VIDEO_FRAME_INFO_S* frm)
|
||||
{
|
||||
if (!MppFrmValid(frm)) {
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* u64PrivateData被用来存储映射的内存区长度和vbHnd,在创建时设置
|
||||
* u64PrivateData is used to store the length of the mapped memory area and vbHnd, which is set at create
|
||||
*/
|
||||
uint32_t memSize = (uint32_t)(frm->stVFrame.u64PrivateData);
|
||||
uint32_t vbHnd = (uint32_t)(frm->stVFrame.u64PrivateData >> HI_INT32_BITS);
|
||||
HI_S32 ret;
|
||||
|
||||
ret = HI_MPI_SYS_Munmap((void*)(uintptr_t)frm->stVFrame.u64VirAddr[0], memSize);
|
||||
HI_ASSERT(ret == HI_SUCCESS);
|
||||
ret = HI_MPI_VB_ReleaseBlock(vbHnd);
|
||||
HI_ASSERT(ret == HI_SUCCESS);
|
||||
if (memset_s(frm, sizeof(*frm), 0, sizeof(*frm)) != EOK) {
|
||||
HI_ASSERT(0);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 执行一次VGS缩放
|
||||
* 每一次VGS resize的缩放倍数是有限制的. VGS支持对一幅图像进行缩放,最大支持图像
|
||||
* 宽高均放大16倍,缩小30 倍。支持单分量(Y)缩放
|
||||
*
|
||||
* Perform a VGS resize.
|
||||
* The zoom factor of each VGS resize is limited. VGS supports zooming of an image.
|
||||
* The width and height are both enlarged by 16 times and reduced by 30 times.Support single-component (Y) scaling.
|
||||
*/
|
||||
static int VgsResizeOnce(const VIDEO_FRAME_INFO_S* src, VIDEO_FRAME_INFO_S* dst, uint32_t dstWidth, uint32_t dstHeight)
|
||||
{
|
||||
HI_ASSERT(src && dst);
|
||||
HI_ASSERT(dstWidth > 0 && dstHeight > 0);
|
||||
VGS_HANDLE jobHnd = -1;
|
||||
VGS_TASK_ATTR_S task;
|
||||
int ret;
|
||||
|
||||
ret = MppFrmCreate(dst, dstWidth, dstHeight, src->stVFrame.enPixelFormat, DATA_BITWIDTH_8,
|
||||
src->stVFrame.enCompressMode, 0);
|
||||
if (ret != 0) {
|
||||
SAMPLE_PRT("frm resize FAIL, for create dstFrm FAIL\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (memset_s(&task, sizeof(task), 0, sizeof(task)) != EOK) {
|
||||
HI_ASSERT(0);
|
||||
}
|
||||
task.stImgIn = *src;
|
||||
task.stImgOut = *dst;
|
||||
|
||||
ret = HI_MPI_VGS_BeginJob(&jobHnd);
|
||||
if (ret != 0) {
|
||||
SAMPLE_PRT("HI_MPI_VGS_BeginJob FAIL, ret=%08X\n", ret);
|
||||
if (jobHnd >= 0 && HI_MPI_VGS_CancelJob(jobHnd) != HI_SUCCESS) {
|
||||
HI_ASSERT(0);
|
||||
}
|
||||
MppFrmDestroy(dst);
|
||||
return ret;
|
||||
}
|
||||
HI_ASSERT(jobHnd >= 0);
|
||||
|
||||
ret = HI_MPI_VGS_AddScaleTask(jobHnd, &task, VGS_SCLCOEF_NORMAL);
|
||||
if (ret != 0) {
|
||||
SAMPLE_PRT("HI_MPI_VGS_AddScaleTask FAIL, ret=%08X\n", ret);
|
||||
if (jobHnd >= 0 && HI_MPI_VGS_CancelJob(jobHnd) != HI_SUCCESS) {
|
||||
HI_ASSERT(0);
|
||||
}
|
||||
MppFrmDestroy(dst);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = HI_MPI_VGS_EndJob(jobHnd);
|
||||
if (ret != 0) {
|
||||
SAMPLE_PRT("HI_MPI_VGS_EndJob FAIL, ret=%08X\n", ret);
|
||||
if (jobHnd >= 0 && HI_MPI_VGS_CancelJob(jobHnd) != HI_SUCCESS) {
|
||||
HI_ASSERT(0);
|
||||
}
|
||||
MppFrmDestroy(dst);
|
||||
return ret;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* 对一帧实现缩放
|
||||
* 多次调用vgs_resize以实现任意比例的缩放
|
||||
* 为简化实现,约定每次缩放最大14倍,此时宽、高仅需2像素对齐
|
||||
* 当两个方向缩放方向不同时,例如一向(如X)放大,另一向缩小倍,无需特别处理
|
||||
* 此时某个方向或两个方向缩放比例均超标,也不需要特别处理
|
||||
*
|
||||
* resize frame.
|
||||
* Call vgs_resize multiple times to achieve arbitrary scaling.
|
||||
* In order to simplify the implementation, it is agreed that each zoom is up to 14 times,
|
||||
* and at this time, the width and height only need to be aligned by 2 pixels.
|
||||
* When the zooming direction of the two directions is different, for example,
|
||||
* zooming in one direction (such as X) and zooming out in the other direction, no special processing is required
|
||||
* At this time, the zoom ratio in one direction or both directions exceeds the standard,
|
||||
* and no special treatment is required.
|
||||
*/
|
||||
int MppFrmResize(
|
||||
const VIDEO_FRAME_INFO_S* src,
|
||||
VIDEO_FRAME_INFO_S* dst,
|
||||
uint32_t dstWidth, uint32_t dstHeight)
|
||||
{
|
||||
static const double rateMax = 14.0; // Maximum magnification
|
||||
static const double rateMin = 1.0 / rateMax; // The smallest magnification, that is, the largest reduction
|
||||
|
||||
uint32_t srcWidth = src->stVFrame.u32Width;
|
||||
uint32_t srcHeight = src->stVFrame.u32Height;
|
||||
HI_ASSERT(srcWidth > 0 && srcHeight > 0);
|
||||
HI_ASSERT(!(srcWidth % HI_OVEN_BASE) && !(srcHeight % HI_OVEN_BASE));
|
||||
HI_ASSERT(dstWidth > 0 && dstHeight > 0);
|
||||
HI_ASSERT(!(dstWidth % HI_OVEN_BASE) && !(dstHeight % HI_OVEN_BASE));
|
||||
int ret;
|
||||
|
||||
/*
|
||||
* 放大倍数
|
||||
* magnification
|
||||
*/
|
||||
double widthRate = ((double)dstWidth) / (double)srcWidth; // >1 means zoom in, <1 means zoom out
|
||||
double heightRate = ((double)dstHeight) / (double)srcHeight; // >1 means zoom in, <1 means zoom out
|
||||
|
||||
/*
|
||||
* 根据缩放倍数分别处理
|
||||
* Separate processing according to zoom factor
|
||||
*/
|
||||
if (widthRate > rateMax || widthRate < rateMin ||
|
||||
heightRate > rateMax || heightRate < rateMin) {
|
||||
/*
|
||||
* 缩放倍数超过一次VGS的最大值时,递归处理 ...
|
||||
* When the zoom factor exceeds the maximum value of one VGS, recursive processing...
|
||||
*/
|
||||
uint32_t midWidth = (uint32_t)IntZoomTo((int)srcWidth, widthRate, rateMin, rateMax);
|
||||
uint32_t midHeight = (uint32_t)IntZoomTo((int)srcHeight, heightRate, rateMin, rateMax);
|
||||
/*
|
||||
* 确保为偶数。为奇数时,放大则减一,否则加一
|
||||
*
|
||||
* Make sure it is an even number. When it is an odd number,
|
||||
* the zoom is reduced by one, otherwise it is increased by one
|
||||
*/
|
||||
if (midWidth % HI_OVEN_BASE) {
|
||||
midWidth += widthRate > 1 ? -1 : 1;
|
||||
}
|
||||
if (midHeight % HI_OVEN_BASE) {
|
||||
midHeight += heightRate > 1 ? -1 : 1;
|
||||
}
|
||||
|
||||
SAMPLE_PRT("@@@ multi-lev vgs resize, src={%u, %u}, mid={%u, %u}, dst={%u, %u}, rate={%.4f, %.4f}\n",
|
||||
srcWidth, srcHeight, midWidth, midHeight, dstWidth, dstHeight, widthRate, heightRate);
|
||||
|
||||
/*
|
||||
* 缩放一次
|
||||
* Zoom once
|
||||
*/
|
||||
VIDEO_FRAME_INFO_S midFrm;
|
||||
ret = VgsResizeOnce(src, &midFrm, midWidth, midHeight);
|
||||
if (ret != 0) {
|
||||
SAMPLE_PRT("VgsResizeOnce(dw=%u, dh=%u) FAIL\n", midWidth, midHeight);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* 以midFrm为src递归调用
|
||||
* Recursively call with midFrm as src
|
||||
*/
|
||||
ret = MppFrmResize(&midFrm, dst, dstWidth, dstHeight);
|
||||
MppFrmDestroy(&midFrm);
|
||||
if (ret != 0) {
|
||||
SAMPLE_PRT("sub call MppFrmResize(dw=%u, dh=%u) FAIL\n", dstWidth, dstHeight);
|
||||
return ret;
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
* 缩放倍数未超过一次VGS的最大值,直接完成
|
||||
* The zoom factor does not exceed the maximum value of VGS once, and it is done directly
|
||||
*/
|
||||
ret = VgsResizeOnce(src, dst, dstWidth, dstHeight);
|
||||
if (ret != 0) {
|
||||
SAMPLE_PRT("VgsResizeOnce(dw=%u, dh=%u) FAIL\n", dstWidth, dstHeight);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* 将整数向上修整为偶数
|
||||
* Round up integers to even numbers
|
||||
*/
|
||||
static inline int IntToOven(int x)
|
||||
{
|
||||
if (x % HI_OVEN_BASE == 0) {
|
||||
return x;
|
||||
} else {
|
||||
return x + 1;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 创建并执行VGS画线任务
|
||||
* Create and execute VGS draw lines job
|
||||
*/
|
||||
static HI_S32 VgsDrawLines(VIDEO_FRAME_INFO_S *frm, const VGS_DRAW_LINE_S lines[], int lineNum)
|
||||
{
|
||||
VGS_HANDLE jobHnd = -1;
|
||||
VGS_TASK_ATTR_S task;
|
||||
int ret;
|
||||
|
||||
if (memset_s(&task, sizeof(task), 0, sizeof(task)) != EOK) {
|
||||
HI_ASSERT(0);
|
||||
}
|
||||
task.stImgIn = *frm;
|
||||
task.stImgOut = *frm;
|
||||
|
||||
/*
|
||||
* 启动一个job
|
||||
* Start a job
|
||||
*/
|
||||
ret = HI_MPI_VGS_BeginJob(&jobHnd);
|
||||
if (ret != 0) {
|
||||
SAMPLE_PRT("HI_MPI_VGS_BeginJob FAIL, ret=%08X\n", ret);
|
||||
if (jobHnd >= 0 && HI_MPI_VGS_CancelJob(jobHnd) != HI_SUCCESS) {
|
||||
HI_ASSERT(0);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
HI_ASSERT(jobHnd >= 0);
|
||||
|
||||
/*
|
||||
* 往一个已经启动的job里添加批量画线task
|
||||
* Add a batch line drawing task to an already started job
|
||||
*/
|
||||
ret = HI_MPI_VGS_AddDrawLineTaskArray(jobHnd, &task, lines, lineNum);
|
||||
if (ret != 0) {
|
||||
SAMPLE_PRT("HI_MPI_VGS_AddDrawLineTaskArray FAIL, ret=%08X\n", ret);
|
||||
if (jobHnd >= 0 && HI_MPI_VGS_CancelJob(jobHnd) != HI_SUCCESS) {
|
||||
HI_ASSERT(0);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* 提交一个job
|
||||
* Submit a job
|
||||
*/
|
||||
ret = HI_MPI_VGS_EndJob(jobHnd);
|
||||
if (ret != 0) {
|
||||
SAMPLE_PRT("HI_MPI_VGS_EndJob FAIL, ret=%08X\n", ret);
|
||||
if (jobHnd >= 0 && HI_MPI_VGS_CancelJob(jobHnd) != HI_SUCCESS) {
|
||||
HI_ASSERT(0);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* 在frame中叠加一个或多个矩形框
|
||||
* Superimpose one or more rectangular boxes in the frame
|
||||
*/
|
||||
int MppFrmDrawRects(VIDEO_FRAME_INFO_S *frm,
|
||||
const RectBox *boxes, int boxesNum, uint32_t color, int thick)
|
||||
{
|
||||
VGS_DRAW_LINE_S lines[VGS_MAX_LINE];
|
||||
int i;
|
||||
|
||||
if (thick <= 0) {
|
||||
HI_ASSERT(0);
|
||||
}
|
||||
|
||||
/*
|
||||
* 将各矩形四边平面化为lines
|
||||
* Planarize the four sides of each rectangle into lines
|
||||
*/
|
||||
for (i = 0; i < boxesNum; i++) {
|
||||
lines[RECT_LINES * i].stStartPoint.s32X = IntToOven(boxes[i].xmin);
|
||||
lines[RECT_LINES * i].stStartPoint.s32Y = IntToOven(boxes[i].ymin);
|
||||
lines[RECT_LINES * i].stEndPoint.s32X = IntToOven(boxes[i].xmax);
|
||||
lines[RECT_LINES * i].stEndPoint.s32Y = IntToOven(boxes[i].ymin);
|
||||
lines[RECT_LINES * i].u32Color = color;
|
||||
lines[RECT_LINES * i].u32Thick = thick;
|
||||
lines[RECT_LINES * i + RECT_LINE1].stStartPoint.s32X = IntToOven(boxes[i].xmax);
|
||||
lines[RECT_LINES * i + RECT_LINE1].stStartPoint.s32Y = IntToOven(boxes[i].ymin);
|
||||
lines[RECT_LINES * i + RECT_LINE1].stEndPoint.s32X = IntToOven(boxes[i].xmax);
|
||||
lines[RECT_LINES * i + RECT_LINE1].stEndPoint.s32Y = IntToOven(boxes[i].ymax);
|
||||
lines[RECT_LINES * i + RECT_LINE1].u32Color = color;
|
||||
lines[RECT_LINES * i + RECT_LINE1].u32Thick = thick;
|
||||
lines[RECT_LINES * i + RECT_LINE2].stStartPoint.s32X = IntToOven(boxes[i].xmax);
|
||||
lines[RECT_LINES * i + RECT_LINE2].stStartPoint.s32Y = IntToOven(boxes[i].ymax);
|
||||
lines[RECT_LINES * i + RECT_LINE2].stEndPoint.s32X = IntToOven(boxes[i].xmin);
|
||||
lines[RECT_LINES * i + RECT_LINE2].stEndPoint.s32Y = IntToOven(boxes[i].ymax);
|
||||
lines[RECT_LINES * i + RECT_LINE2].u32Color = color;
|
||||
lines[RECT_LINES * i + RECT_LINE2].u32Thick = thick;
|
||||
lines[RECT_LINES * i + RECT_LINE3].stStartPoint.s32X = IntToOven(boxes[i].xmin);
|
||||
lines[RECT_LINES * i + RECT_LINE3].stStartPoint.s32Y = IntToOven(boxes[i].ymax);
|
||||
lines[RECT_LINES * i + RECT_LINE3].stEndPoint.s32X = IntToOven(boxes[i].xmin);
|
||||
lines[RECT_LINES * i + RECT_LINE3].stEndPoint.s32Y = IntToOven(boxes[i].ymin);
|
||||
lines[RECT_LINES * i + RECT_LINE3].u32Color = color;
|
||||
lines[RECT_LINES * i + RECT_LINE3].u32Thick = thick;
|
||||
}
|
||||
return VgsDrawLines(frm, lines, i * RECT_LINES);
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* End of #ifdef __cplusplus */
|
|
@ -0,0 +1,82 @@
|
|||
/*
|
||||
* Copyright (c) 2022 HiSilicon (Shanghai) Technologies CO., LIMITED.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef VGS_IMG_H
|
||||
#define VGS_IMG_H
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "hi_common.h"
|
||||
#include "hi_comm_video.h"
|
||||
#include "hi_comm_venc.h"
|
||||
#include "util.h"
|
||||
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* 常用数字单位
|
||||
* Commonly used numerical units
|
||||
*/
|
||||
#define HI_KB 1024
|
||||
#define HI_MB (1024 * 1024)
|
||||
#define HI_MS_OF_SEC 1000 // 1s in milliseconds
|
||||
#define HI_NS_OF_MS 1000000 // Nanoseconds in 1ms
|
||||
#define HI_BYTE_BITS 8 // Number of bits in 1 byte
|
||||
#define HI_INT8_BITS 8 // 8-bit integer number of bits
|
||||
#define HI_INT16_BITS 16 // 16-bit integer number of bits
|
||||
#define HI_INT32_BITS 32 // 32-bit integer number of bits
|
||||
#define HI_INT64_BITS 64 // The number of bits of a 64-bit integer
|
||||
|
||||
/*
|
||||
* 帧缩放
|
||||
* 多次调用vgs_resize以实现任意比例的缩放
|
||||
* 为简化实现,约定每次缩放最大14倍,此时宽、高仅需2像素对齐
|
||||
* 当两个方向缩放方向不同时,例如一向(如X)放大,另一向缩小倍,无需特别处理
|
||||
* 此时某个方向或两个方向缩放比例均超标,也不需要特别处理
|
||||
*
|
||||
* resize frame.
|
||||
* Call vgs_resize multiple times to achieve arbitrary scaling.
|
||||
* In order to simplify the implementation, it is agreed that each zoom is up to 14 times,
|
||||
* and at this time, the width and height only need to be aligned by 2 pixels.
|
||||
* When the zoom directions are different in the two directions, for example,
|
||||
* zooming in one direction (such as X) and zooming out in the other direction,
|
||||
* no special processing is required. At this time, the zoom ratio in one direction or
|
||||
* both directions exceeds the standard, and no special treatment is required.
|
||||
*/
|
||||
int MppFrmResize(
|
||||
const VIDEO_FRAME_INFO_S* src,
|
||||
VIDEO_FRAME_INFO_S* dst,
|
||||
uint32_t dstWidth, uint32_t dstHeight);
|
||||
|
||||
/*
|
||||
* 销毁帧
|
||||
* Destory frame
|
||||
*/
|
||||
void MppFrmDestroy(VIDEO_FRAME_INFO_S* frm);
|
||||
|
||||
/*
|
||||
* 在框架中叠加一个或多个矩形框
|
||||
* Superimpose one or more rectangular boxes in the frame
|
||||
*/
|
||||
int MppFrmDrawRects(VIDEO_FRAME_INFO_S *frm,
|
||||
const RectBox *boxes, int boxesNum, uint32_t color, int thick);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
File diff suppressed because it is too large
Load Diff
|
@ -6,9 +6,19 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
#include <stdbool.h>
|
||||
#include "util.h"
|
||||
|
||||
bool eb3516Yolov3Init(const char *model_file, const char *pic_file);
|
||||
void eb3516Yolov3Exit(void);
|
||||
typedef struct {
|
||||
int cls; // The category of the object, an integer > 0
|
||||
float score; // Object's credibility score
|
||||
RectBox box; // The rectangular area of the object (pixels)
|
||||
} DetectObjInfo;
|
||||
|
||||
int nnie_init();
|
||||
void nnie_exit();
|
||||
int nnie_start();
|
||||
int nnie_stop();
|
||||
void nnie_callback(DetectObjInfo *detections, int count);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -42,7 +42,7 @@ MJPEGDeviceSource::~MJPEGDeviceSource() {
|
|||
}
|
||||
|
||||
codec_type_t MJPEGDeviceSource::getCodecType() {
|
||||
return ROV_JPEG;
|
||||
return JPEG;
|
||||
}
|
||||
|
||||
void MJPEGDeviceSource::signalNewFrame(const FrameData &frameData) {
|
||||
|
|
|
@ -0,0 +1,73 @@
|
|||
/*
|
||||
* Copyright (c) 2022 HiSilicon (Shanghai) Technologies CO., LIMITED.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include "util.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "hi_debug.h"
|
||||
|
||||
int IntZoomTo(int n, double rate, double rateMin, double rateMax) {
|
||||
HI_ASSERT(rateMin < 1 && rateMax > 1);
|
||||
|
||||
if (!rateMin) {
|
||||
HI_ASSERT(rateMin);
|
||||
return n;
|
||||
} else {
|
||||
int ret;
|
||||
if (rate > rateMax) {
|
||||
ret = n * (int) rateMax;
|
||||
} else if (rate < rateMin) {
|
||||
ret = n / (int) (1 / rateMin);
|
||||
} else {
|
||||
ret = (int) (n * rate);
|
||||
}
|
||||
return ret < 1 ? 1 : ret;
|
||||
}
|
||||
}
|
||||
|
||||
void RectBoxTran(RectBox* box, int srcWidth, int srcHeight, int dstWidth, int dstHeight) {
|
||||
HI_ASSERT(box && srcWidth && srcHeight);
|
||||
box->xmin = box->xmin * dstWidth / srcWidth * 2 / 2;
|
||||
box->xmax = box->xmax * dstWidth / srcWidth * 2 / 2;
|
||||
box->ymin = box->ymin * dstHeight / srcHeight * 2 / 2;
|
||||
box->ymax = box->ymax * dstHeight / srcHeight * 2 / 2;
|
||||
}
|
||||
|
||||
int HiStrxfrm(char *s1, char *s2, int n) {
|
||||
int i;
|
||||
|
||||
for (i = 0; (i < n - 1) && s2[i]; i++) {
|
||||
s1[i] = s2[i];
|
||||
}
|
||||
s1[i] = 0;
|
||||
return i;
|
||||
}
|
||||
|
||||
void RecurMutexInit(pthread_mutex_t* mutex) {
|
||||
HI_ASSERT(mutex);
|
||||
pthread_mutexattr_t attr;
|
||||
int res;
|
||||
|
||||
res = pthread_mutexattr_init(&attr);
|
||||
HI_ASSERT(!res);
|
||||
|
||||
res = pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE_NP);
|
||||
HI_ASSERT(!res);
|
||||
res = pthread_mutex_init(mutex, &attr);
|
||||
HI_ASSERT(!res);
|
||||
|
||||
pthread_mutexattr_destroy(&attr);
|
||||
}
|
|
@ -0,0 +1,84 @@
|
|||
/*
|
||||
* Copyright (c) 2022 HiSilicon (Shanghai) Technologies CO., LIMITED.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef UTIL_H
|
||||
#define UTIL_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <pthread.h>
|
||||
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define HI_PER_BASE 100
|
||||
#define HI_OVEN_BASE 2 // Even base
|
||||
|
||||
/*
|
||||
* RGB888常用的颜色
|
||||
* RGB888 commonly used colors
|
||||
*/
|
||||
#define RGB888_RED ((uint32_t)0xFF0000)
|
||||
#define RGB888_GREEN ((uint32_t)0x00FF00)
|
||||
#define RGB888_BLUE ((uint32_t)0x0000FF)
|
||||
#define RGB888_YELLOW ((uint32_t)0xFFFF00)
|
||||
#define RGB888_WHITE ((uint32_t)0xFFFFFF)
|
||||
#define RGB888_BLACK ((uint32_t)0x000000)
|
||||
|
||||
#ifndef SAMPLE_PRT
|
||||
#define SAMPLE_PRT(fmt...) \
|
||||
do { \
|
||||
printf("[%s]-%d: ", __FUNCTION__, __LINE__); \
|
||||
printf(fmt); \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
int xmin;
|
||||
int xmax;
|
||||
int ymin;
|
||||
int ymax;
|
||||
} RectBox;
|
||||
|
||||
/*
|
||||
* 将整数放大到给定的倍数范围
|
||||
* Amplify the integer to the given multiple range
|
||||
*/
|
||||
int IntZoomTo(int n, double rate, double rateMin, double rateMax);
|
||||
|
||||
/*
|
||||
* 按比例转换坐标
|
||||
* Convert coordinates proportionally
|
||||
*/
|
||||
void RectBoxTran(RectBox* box, int srcWidth, int srcHeight, int dstWidth, int dstHeight);
|
||||
|
||||
/*
|
||||
* 字符处理接口
|
||||
* Character processing interface
|
||||
*/
|
||||
int HiStrxfrm(char *s1, char *s2, int n);
|
||||
|
||||
/*
|
||||
* 初始化recursive pmutex
|
||||
* Init recursive pmutex
|
||||
*/
|
||||
void RecurMutexInit(pthread_mutex_t* mutex);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // UTIL_H
|
64
xmake.lua
64
xmake.lua
|
@ -3,13 +3,13 @@ includes("Hi3516_SDK.lua", "live555.lua", " readerwriterqueue.lua")
|
|||
|
||||
--- Add Cross Compile Toolchain
|
||||
toolchain("arm-himix200-linux")
|
||||
set_kind("standalone")
|
||||
|
||||
set_sdkdir(path.join(os.projectdir(), "arm-himix200-linux"))
|
||||
set_kind("standalone")
|
||||
set_sdkdir(path.join(os.projectdir(), "arm-himix200-linux"))
|
||||
toolchain_end()
|
||||
|
||||
--- Set toolchain and C/C++ standard
|
||||
-- set_config("sdk", "/opt/hisi-linux/x86-arm/arm-himix200-linux/")
|
||||
set_config("sdk", path.join(os.projectdir(), "arm-himix200-linux"))
|
||||
set_toolchains("arm-himix200-linux")
|
||||
set_plat("cross")
|
||||
set_arch("arm")
|
||||
|
@ -25,43 +25,43 @@ add_requires(
|
|||
)
|
||||
|
||||
target("ISP")
|
||||
set_kind("static")
|
||||
add_files("src/modules/isp/*.c")
|
||||
add_includedirs("src", "src/modules")
|
||||
add_deps("sample_common")
|
||||
add_packages("zlog")
|
||||
set_kind("static")
|
||||
add_files("src/modules/isp/**.c", "src/modules/*.c")
|
||||
add_includedirs("src", "src/modules", "src/modules/isp")
|
||||
add_deps("sample_common")
|
||||
add_packages("zlog")
|
||||
target_end()
|
||||
|
||||
target("NNIE")
|
||||
set_kind("static")
|
||||
add_files("src/modules/nnie/*.c")
|
||||
add_includedirs("src", "src/modules")
|
||||
add_deps("sample_common", "sample_svp")
|
||||
add_packages("zlog")
|
||||
set_kind("static")
|
||||
add_files("src/modules/nnie/**.c", "src/modules/*.c")
|
||||
add_includedirs("src", "src/modules", "src/modules/isp")
|
||||
add_deps("sample_common", "sample_svp", "ISP")
|
||||
add_packages("zlog")
|
||||
target_end()
|
||||
|
||||
target("RTSP")
|
||||
set_kind("static")
|
||||
add_files("src/modules/rtsp/*.cpp")
|
||||
add_includedirs("src", "src/modules")
|
||||
add_packages("live555", "zlog", "readerwriterqueue")
|
||||
add_links("pthread")
|
||||
set_kind("static")
|
||||
add_files("src/modules/rtsp/**.cpp", "src/modules/*.c")
|
||||
add_includedirs("src", "src/modules")
|
||||
add_packages("live555", "zlog", "readerwriterqueue")
|
||||
add_links("pthread")
|
||||
target_end()
|
||||
|
||||
target("CatFeeder")
|
||||
set_kind("binary")
|
||||
add_includedirs("src")
|
||||
add_files("src/*.cpp")
|
||||
add_deps("hi_library", "ISP", "NNIE", "RTSP")
|
||||
add_packages("zlog")
|
||||
add_links("stdc++fs")
|
||||
after_build(function(target)
|
||||
os.cp("src/log.conf", "$(buildir)/cross/arm/release")
|
||||
end)
|
||||
set_kind("binary")
|
||||
add_includedirs("src", "src/modules")
|
||||
add_files("src/*.cpp")
|
||||
add_deps("hi_library", "ISP", "NNIE")
|
||||
add_packages("zlog")
|
||||
add_links("stdc++fs")
|
||||
after_build(function(target)
|
||||
os.cp("src/log.conf", "$(buildir)/cross/arm/release")
|
||||
end)
|
||||
|
||||
if is_mode("debug") then
|
||||
add_defines("DEBUG")
|
||||
set_symbols("debug")
|
||||
set_optimize("none")
|
||||
end
|
||||
if is_mode("debug") then
|
||||
add_defines("DEBUG")
|
||||
set_symbols("debug")
|
||||
set_optimize("none")
|
||||
end
|
||||
target_end()
|
||||
|
|
Loading…
Reference in New Issue