finish snap but don't work
This commit is contained in:
		@@ -1,6 +1,8 @@
 | 
			
		||||
#include "eb3516_video.h"
 | 
			
		||||
 | 
			
		||||
#include "hi_comm_snap.h"
 | 
			
		||||
#include "hi_common.h"
 | 
			
		||||
#include "mpi_snap.h"
 | 
			
		||||
#include "my_common.h"
 | 
			
		||||
#include "sample_comm.h"
 | 
			
		||||
#include "zlog.h"
 | 
			
		||||
@@ -34,7 +36,7 @@ static SAMPLE_VPSS_CONFIG_S g_stVpss1Config = {0};
 | 
			
		||||
static const VPSS_CHN g_Vpss0Chn[2] = {1, 2};
 | 
			
		||||
static const VPSS_CHN g_Vpss1Chn = 1;
 | 
			
		||||
static const PIC_SIZE_E g_PicSizes[3] = {PIC_1080P, PIC_720P, PIC_1080P};
 | 
			
		||||
static const VENC_CHN g_VencChn[1] = {0};
 | 
			
		||||
static const VENC_CHN g_VencChn[3] = {0, 1, 2};
 | 
			
		||||
static const PAYLOAD_TYPE_E g_CodecTypes[3] = {PT_H265, PT_H264, PT_JPEG};
 | 
			
		||||
 | 
			
		||||
static HI_S32 VPSS_GetDefChnAttr(VPSS_CHN_ATTR_S* pstVpssChnAttr,
 | 
			
		||||
@@ -130,8 +132,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] = 0;  // video pipe
 | 
			
		||||
    g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1] = 1;  // snap pipe
 | 
			
		||||
    g_stViConfig.astViInfo[0].stPipeInfo.aPipe[2] = -1;
 | 
			
		||||
    g_stViConfig.astViInfo[0].stPipeInfo.aPipe[3] = -1;
 | 
			
		||||
    g_stViConfig.astViInfo[0].stPipeInfo.enMastPipeMode =
 | 
			
		||||
@@ -144,10 +146,10 @@ bool eb3516VideoInit(void) {
 | 
			
		||||
    g_stViConfig.astViInfo[0].stChnInfo.enVideoFormat = VIDEO_FORMAT_LINEAR;
 | 
			
		||||
    g_stViConfig.astViInfo[0].stChnInfo.enCompressMode = COMPRESS_MODE_SEG;
 | 
			
		||||
    // 设置 VI 抓拍信息
 | 
			
		||||
    g_stViConfig.astViInfo[0].stSnapInfo.bSnap = HI_FALSE;
 | 
			
		||||
    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.SnapPipe = 1;
 | 
			
		||||
    g_stViConfig.astViInfo[0].stSnapInfo.enVideoPipeMode =
 | 
			
		||||
        VI_OFFLINE_VPSS_OFFLINE;
 | 
			
		||||
    g_stViConfig.astViInfo[0].stSnapInfo.enSnapPipeMode =
 | 
			
		||||
@@ -155,9 +157,9 @@ bool eb3516VideoInit(void) {
 | 
			
		||||
 | 
			
		||||
    // 配置 VPSS
 | 
			
		||||
    VPSS_GetParams(&g_stVpss0Config, &stSize, false);
 | 
			
		||||
    // VPSS_GetParams(&g_stVpss1Config, &stSize, true);
 | 
			
		||||
    VPSS_GetParams(&g_stVpss1Config, &stSize, true);
 | 
			
		||||
 | 
			
		||||
    zlog_info(log_video, "eb3516 Video Init Finish...");
 | 
			
		||||
    zlog_debug(log_video, "eb3516 Video Init Finish...");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool eb3516VideoStart(void) {
 | 
			
		||||
@@ -185,27 +187,48 @@ bool eb3516VideoStart(void) {
 | 
			
		||||
        zlog_error(log_video, "Start VI failed with %#x!\n", s32Ret);
 | 
			
		||||
        goto EXIT_SYS_STOP;
 | 
			
		||||
    }
 | 
			
		||||
    zlog_info(log_video, "eb3516 VI Start Success...");
 | 
			
		||||
    zlog_debug(log_video, "eb3516 VI Start Success...");
 | 
			
		||||
 | 
			
		||||
    // 启动 VPSS
 | 
			
		||||
    s32Ret = SAMPLE_COMM_VPSS_Start(
 | 
			
		||||
        g_stVpss0Config.s32GrpId, g_stVpss0Config.abChnEnable,
 | 
			
		||||
        &g_stVpss0Config.stGrpAttr, g_stVpss0Config.astChnAttrs);
 | 
			
		||||
    if (s32Ret != HI_SUCCESS) {
 | 
			
		||||
        zlog_error(log_video, "Start VPSS group %d failed with %#x!\n",
 | 
			
		||||
        zlog_error(log_video, "Start VPSS0 group %d failed with %#x!\n",
 | 
			
		||||
                   g_stVpss0Config.s32GrpId, s32Ret);
 | 
			
		||||
        goto EXIT_VI_STOP;
 | 
			
		||||
    }
 | 
			
		||||
    zlog_info(log_video, "eb3516 VPSS Start Success...");
 | 
			
		||||
    zlog_debug(log_video, "eb3516 VPSS0 Start Success...");
 | 
			
		||||
 | 
			
		||||
    s32Ret = SAMPLE_COMM_VPSS_Start(
 | 
			
		||||
        g_stVpss1Config.s32GrpId, g_stVpss1Config.abChnEnable,
 | 
			
		||||
        &g_stVpss1Config.stGrpAttr, g_stVpss1Config.astChnAttrs);
 | 
			
		||||
    if (s32Ret != HI_SUCCESS) {
 | 
			
		||||
        zlog_error(log_video, "Start VPSS1 group %d failed with %#x!\n",
 | 
			
		||||
                   g_stVpss1Config.s32GrpId, s32Ret);
 | 
			
		||||
        goto EXIT_VI_STOP;
 | 
			
		||||
    }
 | 
			
		||||
    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);
 | 
			
		||||
    if (s32Ret != HI_SUCCESS) {
 | 
			
		||||
        zlog_error(log_video, "VI Video Pipe bind VPSS failed with %#x!\n", s32Ret);
 | 
			
		||||
        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);
 | 
			
		||||
    if (s32Ret != HI_SUCCESS) {
 | 
			
		||||
        zlog_error(log_video, "VI Snap Pipe bind VPSS1 failed with %#x!\n",
 | 
			
		||||
                   s32Ret);
 | 
			
		||||
        goto EXIT_VPSS_STOP;
 | 
			
		||||
    }
 | 
			
		||||
    zlog_debug(log_video, "eb3516 VI Bind VPSS1 Success");
 | 
			
		||||
 | 
			
		||||
    // Get Venc Config
 | 
			
		||||
    VENC_GOP_ATTR_S stGopAttr;
 | 
			
		||||
@@ -216,11 +239,11 @@ bool eb3516VideoStart(void) {
 | 
			
		||||
        SAMPLE_COMM_VENC_Creat(g_VencChn[0], g_CodecTypes[0], g_PicSizes[0],
 | 
			
		||||
                               SAMPLE_RC_VBR, 0, HI_FALSE, &stGopAttr);
 | 
			
		||||
    if (s32Ret != HI_SUCCESS) {
 | 
			
		||||
        zlog_error(log_video, "Create Venc Chn %d failed with %#x!\n", g_VencChn[0],
 | 
			
		||||
                   s32Ret);
 | 
			
		||||
        zlog_error(log_video, "Create Venc Chn %d failed with %#x!\n",
 | 
			
		||||
                   g_VencChn[0], s32Ret);
 | 
			
		||||
        goto EXIT_VI_VPSS_UNBIND;
 | 
			
		||||
    }
 | 
			
		||||
    zlog_info(log_video, "eb3516 VENC Start Success...");
 | 
			
		||||
    zlog_debug(log_video, "eb3516 VENC Start Success...");
 | 
			
		||||
 | 
			
		||||
    /*config vo*/
 | 
			
		||||
    SAMPLE_COMM_VO_GetDefConfig(&stVoConfig);
 | 
			
		||||
@@ -234,7 +257,7 @@ bool eb3516VideoStart(void) {
 | 
			
		||||
        SAMPLE_PRT("start vo failed. s32Ret: 0x%x !\n", s32Ret);
 | 
			
		||||
        goto EXIT_VENC_H264_STOP;
 | 
			
		||||
    }
 | 
			
		||||
    zlog_info(log_video, "eb3516 VO Start Success...");
 | 
			
		||||
    zlog_debug(log_video, "eb3516 VO Start Success...");
 | 
			
		||||
 | 
			
		||||
    /*vpss bind vo*/
 | 
			
		||||
    s32Ret = SAMPLE_COMM_VPSS_Bind_VO(g_stVpss0Config.s32GrpId, g_Vpss0Chn[0],
 | 
			
		||||
@@ -244,6 +267,63 @@ bool eb3516VideoStart(void) {
 | 
			
		||||
        goto EXIT_VO_STOP;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // 抓拍 jpeg 4k
 | 
			
		||||
    SIZE_S stPicSize;
 | 
			
		||||
    SAMPLE_COMM_SYS_GetPicSize(g_PicSizes[2], &stPicSize);
 | 
			
		||||
    s32Ret = SAMPLE_COMM_VENC_SnapStart(g_VencChn[2], &stPicSize, HI_TRUE);
 | 
			
		||||
    if (s32Ret != HI_SUCCESS) {
 | 
			
		||||
        zlog_error(log_video, "Venc Snap Start failed with %#x\n", s32Ret);
 | 
			
		||||
        goto EXIT_VENC_H264_UNBIND;
 | 
			
		||||
    }
 | 
			
		||||
    // 绑定 VPSS[1,0]->VENC[2]
 | 
			
		||||
    s32Ret = SAMPLE_COMM_VPSS_Bind_VENC(g_stVpss1Config.s32GrpId, g_Vpss1Chn,
 | 
			
		||||
                                        g_VencChn[2]);
 | 
			
		||||
    if (s32Ret != HI_SUCCESS) {
 | 
			
		||||
        zlog_error(log_video, "Venc bind Vpss failed with %#x!\n", s32Ret);
 | 
			
		||||
        goto EXIT_VENC_SNAP_STOP;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // 启动抓拍通道
 | 
			
		||||
    SNAP_ATTR_S stSnapAttr;
 | 
			
		||||
    stSnapAttr.enSnapType = SNAP_TYPE_NORMAL;
 | 
			
		||||
    stSnapAttr.bLoadCCM = HI_TRUE;
 | 
			
		||||
    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);
 | 
			
		||||
    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]);
 | 
			
		||||
    if (s32Ret != HI_SUCCESS) {
 | 
			
		||||
        zlog_error(log_video, "HI_MPI_SNAP_EnablePipe failed with %#x!\n",
 | 
			
		||||
                   s32Ret);
 | 
			
		||||
        goto EXIT_VO_STOP;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // 设置照片 EXIF 信息
 | 
			
		||||
    ISP_DCF_INFO_S stIspDCF;
 | 
			
		||||
    HI_MPI_ISP_GetDCFInfo(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0],
 | 
			
		||||
                          &stIspDCF);
 | 
			
		||||
    strncpy((char*)stIspDCF.stIspDCFConstInfo.au8ImageDescription, "",
 | 
			
		||||
            DCF_DRSCRIPTION_LENGTH);
 | 
			
		||||
    strncpy((char*)stIspDCF.stIspDCFConstInfo.au8Make, "OurEDA",
 | 
			
		||||
            DCF_DRSCRIPTION_LENGTH);
 | 
			
		||||
    strncpy((char*)stIspDCF.stIspDCFConstInfo.au8Model, "CatFeeder Camera",
 | 
			
		||||
            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], &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],
 | 
			
		||||
@@ -260,44 +340,84 @@ bool eb3516VideoStart(void) {
 | 
			
		||||
    //     zlog_error(log_video, "Get venc stream failed!\n");
 | 
			
		||||
    //     goto EXIT_VENC_H264_STOP;
 | 
			
		||||
    // }
 | 
			
		||||
    // zlog_info(log_video, "eb3516 Stream Start Success...");
 | 
			
		||||
    // zlog_debug(log_video, "eb3516 Stream Start Success...");
 | 
			
		||||
 | 
			
		||||
    PAUSE();
 | 
			
		||||
    // 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();
 | 
			
		||||
    return true;
 | 
			
		||||
 | 
			
		||||
EXIT_VENC_SNAP_STOP:
 | 
			
		||||
    SAMPLE_COMM_VENC_Stop(g_VencChn[2]);
 | 
			
		||||
EXIT_VO_STOP:
 | 
			
		||||
    SAMPLE_COMM_VO_StopVO(&stVoConfig);
 | 
			
		||||
EXIT_VENC_H264_STOP:
 | 
			
		||||
    SAMPLE_COMM_VENC_Stop(g_VencChn[1]);
 | 
			
		||||
EXIT_VENC_H265_STOP:
 | 
			
		||||
    // SAMPLE_COMM_VENC_Stop(g_VencChn[0]);
 | 
			
		||||
EXIT_VENC_H264_UNBIND:
 | 
			
		||||
    // SAMPLE_COMM_VPSS_UnBind_VENC(g_stVpss0Config.s32GrpId, g_Vpss0Chn[1],
 | 
			
		||||
    // g_VencChn[1]);
 | 
			
		||||
VENC_H265_STOP:
 | 
			
		||||
    SAMPLE_COMM_VENC_Stop(g_VencChn[0]);
 | 
			
		||||
EXIT_VI_VPSS_UNBIND:
 | 
			
		||||
    SAMPLE_COMM_VI_UnBind_VPSS(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0],
 | 
			
		||||
                               g_stViConfig.astViInfo[0].stChnInfo.ViChn,
 | 
			
		||||
                               g_stVpss0Config.s32GrpId);
 | 
			
		||||
    SAMPLE_COMM_VI_UnBind_VPSS(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1],
 | 
			
		||||
                               g_stViConfig.astViInfo[0].stChnInfo.ViChn,
 | 
			
		||||
                               g_stVpss1Config.s32GrpId);
 | 
			
		||||
EXIT_VPSS_STOP:
 | 
			
		||||
    SAMPLE_COMM_VPSS_Stop(g_stVpss0Config.s32GrpId,
 | 
			
		||||
                          g_stVpss0Config.abChnEnable);
 | 
			
		||||
    SAMPLE_COMM_VPSS_Stop(g_stVpss1Config.s32GrpId,
 | 
			
		||||
                          g_stVpss1Config.abChnEnable);
 | 
			
		||||
EXIT_VI_STOP:
 | 
			
		||||
    SAMPLE_COMM_VI_StopVi(&g_stViConfig);
 | 
			
		||||
EXIT_SYS_STOP:
 | 
			
		||||
    SAMPLE_COMM_SYS_Exit();
 | 
			
		||||
EXIT_SYS_RST_CLK:
 | 
			
		||||
EXIT:
 | 
			
		||||
    return s32Ret;
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void eb3516VideoStop(void) {
 | 
			
		||||
    SAMPLE_COMM_VENC_Stop(g_VencChn[2]);
 | 
			
		||||
    SAMPLE_COMM_VO_StopVO(&stVoConfig);
 | 
			
		||||
    SAMPLE_COMM_VENC_Stop(g_VencChn[1]);
 | 
			
		||||
    SAMPLE_COMM_VENC_Stop(g_VencChn[0]);
 | 
			
		||||
    SAMPLE_COMM_VI_UnBind_VPSS(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0],
 | 
			
		||||
                               g_stViConfig.astViInfo[0].stChnInfo.ViChn,
 | 
			
		||||
                               g_stVpss0Config.s32GrpId);
 | 
			
		||||
    SAMPLE_COMM_VI_UnBind_VPSS(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1],
 | 
			
		||||
                               g_stViConfig.astViInfo[0].stChnInfo.ViChn,
 | 
			
		||||
                               g_stVpss1Config.s32GrpId);
 | 
			
		||||
    SAMPLE_COMM_VPSS_Stop(g_stVpss0Config.s32GrpId,
 | 
			
		||||
                          g_stVpss0Config.abChnEnable);
 | 
			
		||||
    SAMPLE_COMM_VPSS_Stop(g_stVpss1Config.s32GrpId,
 | 
			
		||||
                          g_stVpss1Config.abChnEnable);
 | 
			
		||||
    SAMPLE_COMM_VI_StopVi(&g_stViConfig);
 | 
			
		||||
    SAMPLE_COMM_SYS_Exit();
 | 
			
		||||
    
 | 
			
		||||
    zlog_info(log_video, "Exit process Sucessfully!");
 | 
			
		||||
 | 
			
		||||
    zlog_info(log_video, "Finish Stopping eb3516 Video");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool eb3516GetPic(void) {
 | 
			
		||||
    HI_S32 ret = HI_SUCCESS;
 | 
			
		||||
 | 
			
		||||
    VIDEO_FRAME_INFO_S stRawInfo;
 | 
			
		||||
    HI_S32 milliSec = 10000;
 | 
			
		||||
 | 
			
		||||
    ret = HI_MPI_VI_GetPipeFrame(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1],
 | 
			
		||||
                                 &stRawInfo, milliSec);
 | 
			
		||||
    if (HI_SUCCESS != ret) {
 | 
			
		||||
        zlog_error(log_video, "Get Pipe Frame Failed");
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -10,7 +10,7 @@ detail = "[%d.%us] [%p:%F:%L] [%V] %m%n"
 | 
			
		||||
 | 
			
		||||
[rules]
 | 
			
		||||
 | 
			
		||||
*.ERROR       >stdout; detail
 | 
			
		||||
*.WARN        >stdout;
 | 
			
		||||
*.INFO        >stdout; simple
 | 
			
		||||
*.=ERROR       >stdout; detail
 | 
			
		||||
*.=WARN        >stdout; detail
 | 
			
		||||
*.=INFO        >stdout; simple
 | 
			
		||||
*.DEBUG       "log/%c.log"; detail
 | 
			
		||||
 
 | 
			
		||||
@@ -28,9 +28,9 @@ int main(int argc, char** argv) {
 | 
			
		||||
    }
 | 
			
		||||
    zlog_info(log, "Init zlog Sucessfully");
 | 
			
		||||
 | 
			
		||||
    // if (!std::experimental::filesystem::remove_all("log", file_error)) {
 | 
			
		||||
    //     zlog_warn(log, "Can't Remove Last Logs FOR %s", file_error.message().c_str());
 | 
			
		||||
    // }
 | 
			
		||||
    if (!std::experimental::filesystem::remove_all("log", file_error)) {
 | 
			
		||||
        zlog_warn(log, "Can't Remove Last Logs FOR %s", file_error.message().c_str());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!std::experimental::filesystem::create_directory("log", file_error)) {
 | 
			
		||||
        zlog_warn(log, "Can't Create log dir FOR %s", file_error.message().c_str());
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user