static int get_h264_stream(int fd, int chn) { int ret; /* Polling H264 Stream, set timeout as 1000msec */ ret = IMP_Encoder_PollingStream(chn, 100); if (ret < 0) { IMP_LOG_ERR(TAG, "Polling stream timeout\n"); } IMPEncoderStream stream; /* Get H264 Stream */ ret = IMP_Encoder_GetStream(chn, &stream, 1); if (ret < 0) { IMP_LOG_ERR(TAG, "IMP_Encoder_GetStream() failed\n"); return -1; } ret = save_stream(fd, &stream); if (ret < 0) { close(fd); return ret; } IMP_Encoder_ReleaseStream(chn, &stream); return 0; }
int capture_and_encoding() { int ret = 0; int i = 0; printf(">>>>>caputre_and_encoding start\n"); ret = sample_system_init(); if (ret < 0) { IMP_LOG_ERR(TAG, "IMP_System_Init() failed\n"); return -1; } /* Step.2 FrameSource init */ ret = sample_framesource_init(); if (ret < 0) { IMP_LOG_ERR(TAG, "FrameSource init failed\n"); return -1; } for (i = 0; i < FS_CHN_NUM; i++) { if (chn[i].enable) { ret = IMP_Encoder_CreateGroup(chn[i].index); if (ret < 0) { IMP_LOG_ERR(TAG, "IMP_Encoder_CreateGroup(%d) error !\n", i); return -1; } } } /* Step.3 Encoder init */ ret = sample_encoder_init(); if (ret < 0) { IMP_LOG_ERR(TAG, "Encoder init failed\n"); return -1; } /* Step.4 Bind */ for (i = 0; i < FS_CHN_NUM; i++) { if (chn[i].enable) { ret = IMP_System_Bind(&chn[i].framesource_chn, &chn[i].imp_encoder); if (ret < 0) { IMP_LOG_ERR(TAG, "Bind FrameSource channel%d and Encoder failed\n",i); return -1; } } } /* Step.5 Stream On */ ret = sample_framesource_streamon(); if (ret < 0) { IMP_LOG_ERR(TAG, "ImpStreamOn failed\n"); return -1; } return 0; }
void *get_stream(int fd, int chn) { int ret; ret = IMP_Encoder_StartRecvPic(chn); if (ret < 0){ IMP_LOG_ERR(TAG, "IMP_Encoder_StartRecvPic(%d) failed\n", 1); return NULL; } ret = get_h264_stream(fd, chn); if (ret < 0) { IMP_LOG_ERR(TAG, "Get H264 stream failed\n"); return NULL; } /* ret = IMP_Encoder_StopRecvPic(chn); if (ret < 0) { IMP_LOG_ERR(TAG, "IMP_Encoder_StopRecvPic() failed\n"); return NULL; } */ return 0; }
static int save_stream(int fd, IMPEncoderStream *stream) { unsigned int ret; int i, nr_pack = stream->packCount; for (i = 0; i < nr_pack; i++) { ret = write(fd, (void *)stream->pack[i].virAddr, stream->pack[i].length); if (ret != stream->pack[i].length){ IMP_LOG_ERR(TAG,"stream write error:%s\n", strerror(errno)); return -1; } } return 0; }
int destory() { int ret, i; /* Exit sequence as follow */ /* Step.a Stream Off */ ret = sample_framesource_streamoff(); if (ret < 0) { IMP_LOG_ERR(TAG, "FrameSource StreamOff failed\n"); return -1; } /* Step.b UnBind */ for (i = 0; i < FS_CHN_NUM; i++) { if (chn[i].enable) { ret = IMP_System_UnBind(&chn[i].framesource_chn, &chn[i].imp_encoder); if (ret < 0) { IMP_LOG_ERR(TAG, "UnBind FrameSource channel%d and Encoder failed\n",i); return -1; } } } /* Step.c Encoder exit */ ret = sample_encoder_exit(); if (ret < 0) { IMP_LOG_ERR(TAG, "Encoder exit failed\n"); return -1; } /* Step.d FrameSource exit */ ret = sample_framesource_exit(); if (ret < 0) { IMP_LOG_ERR(TAG, "FrameSource exit failed\n"); return -1; } /* Step.e System exit */ ret = sample_system_exit(); if (ret < 0) { IMP_LOG_ERR(TAG, "sample_system_exit() failed\n"); return -1; } ret = IMP_Encoder_StopRecvPic(0); if (ret < 0) { IMP_LOG_ERR(TAG, "IMP_Encoder_StopRecvPic() failed\n"); return -1; } return 0; }
static void test3_base_test() { int ret; SUDevID devid; ret = SU_Base_GetDevID(&devid); if (ret < 0) { IMP_LOG_ERR(TAG, "SU_Base_GetDevID() error\n"); CU_FAIL(); return; } IMP_LOG_INFO(TAG, "Device ID: %s\n", &devid.chr); SUTime now_save; ret = SU_Base_GetTime(&now_save); if (ret < 0) { IMP_LOG_ERR(TAG, "SU_Base_GetTime() error\n"); CU_FAIL(); return; } IMP_LOG_INFO(TAG, "Now: %d.%d.%d %d:%d:%d\n", now_save.year, now_save.mon, now_save.mday, now_save.hour , now_save.min, now_save.sec); SUTime time_to_set, now; #define TEST_SET_GET_TIME(Y, MON, D, H, MIN, S) \ time_to_set.year = Y; \ time_to_set.mon = MON; \ time_to_set.mday = D; \ time_to_set.hour = H; \ time_to_set.min = MIN; \ time_to_set.sec = S; \ \ ret = SU_Base_SetTime(&time_to_set); \ if (ret < 0) { \ IMP_LOG_ERR(TAG, "SU_Base_SetTime() error\n"); \ CU_FAIL(); \ return; \ } \ \ ret = SU_Base_GetTime(&now); \ if (ret < 0) { \ IMP_LOG_ERR(TAG, "SU_Base_GetTime() error\n"); \ CU_FAIL(); \ return; \ } \ IMP_LOG_DBG(TAG, "After set: %d.%d.%d %d:%d:%d\n", \ now.year, now.mon, now.mday, \ now.hour , now.min, now.sec); \ if ((now.year = time_to_set.year) \ && (now.mon == time_to_set.mon) \ && (now.mday == time_to_set.mday) \ && (now.hour == time_to_set.hour) \ && (now.min == time_to_set.min) \ && (now.sec >= time_to_set.sec)) { \ ; \ } else { \ CU_FAIL(); \ return; \ } TEST_SET_GET_TIME(2015, 1, 26, 21, 13, 20); TEST_SET_GET_TIME(2010, 12, 14, 9, 1, 2); ret = SU_Base_SetTime(&now_save); if (ret < 0) { IMP_LOG_ERR(TAG, "SU_Base_SetTime() error\n"); CU_FAIL(); return; } ret = SU_Base_GetTime(&now); if (ret < 0) { IMP_LOG_ERR(TAG, "SU_Base_SetTime() error\n"); CU_FAIL(); return; } IMP_LOG_INFO(TAG, "Restore: %d.%d.%d %d:%d:%d\n", now.year, now.mon, now.mday, now.hour , now.min, now.sec); CU_PASS(); }
static void framesource_test(void *p1, void *p2) { IMP_LOG_DBG(TAG, "IMP_Framesource_Init\n"); int ret; ret = IMP_System_Init(); if (ret < 0) { IMP_LOG_ERR(TAG, "IMP_System_Init() failed:%d\n", ret); CU_FAIL(); return; } IMP_LOG_DBG(TAG, "Create EmuFake groups\n"); IMP_EmuFakedev_CreateGroup(0, 0, p1); IMP_EmuFakedev_CreateGroup(1, 0, p2); IMP_LOG_DBG(TAG, "Define DGCs...\n"); IMPChannel framesource0 = { DEV_ID_FS, 0, 0 }; IMPChannel framesource1 = { DEV_ID_FS, 0, 1 }; IMPChannel dev0_chn0 = { DEV_ID_EMU_FAKE(0), 0, 0 }; IMPChannel dev1_chn0 = { DEV_ID_EMU_FAKE(1), 0, 0 }; /* Configure Dev attr */ IMPFSDevAttr imp_dev_attr; imp_dev_attr.inFrmRate = FRAME_RATE_IN; imp_dev_attr.nrVBs = 4; ret = IMP_FrameSource_SetDevAttr(&imp_dev_attr); if (ret < 0) { IMP_LOG_ERR(TAG, "IMP_EmuFrameSource_SetDevAttr() error: %d\n", ret); return ; } /* Check Dev attr */ IMPFSDevAttr imp_dev_attr_check; ret =IMP_FrameSource_GetDevAttr(&imp_dev_attr_check); if (ret < 0) { IMP_LOG_ERR(TAG, "IMP_EmuFrameSource_GetDevAttr() error: %d\n", ret); return ; } if(imp_dev_attr_check.inFrmRate != imp_dev_attr.inFrmRate) CU_FAIL("IMP_FrameSource_GetDevAttr"); IMP_LOG_DBG(TAG, "Bind...\n"); #define BIND(A, B) \ ret = IMP_System_Bind(&A, &B); \ if (ret < 0) { \ IMP_LOG_ERR(TAG, "Bind src(%d,%d,%d) dst(%d,%d,%d) error\n", \ A.devID, A.grpID, A.chnID, \ B.devID, B.grpID, B.chnID); \ goto out; \ } BIND(framesource0, dev0_chn0); BIND(framesource1, dev1_chn0); #undef BIND IMP_LOG_DBG(TAG, "Dump...\n"); ret = system_bind_dump(); if (ret < 0) { IMP_LOG_ERR(TAG, "Dump error\n"); CU_FAIL(); return; } /* Configure channel 0 attr */ IMPFSChnAttr imp_chn_attr; imp_chn_attr.picWidth = FRAME_W_1; imp_chn_attr.picHeight = FRAME_H_1; imp_chn_attr.pixFmt = FRAME_FORMAT_1; imp_chn_attr.outFrmRate = FRAME_RATE_OUT_1; ret = IMP_FrameSource_SetChnAttr(0, &imp_chn_attr); if (ret < 0) { IMP_LOG_ERR(TAG, "IMP_EmuFrameSource_SetChnAttr(0) error: %d\n", ret); return ; } /* Check channel 0 attr */ IMPFSChnAttr imp_chn_attr_check; ret = IMP_FrameSource_GetChnAttr(0, &imp_chn_attr_check); if (ret < 0) { IMP_LOG_ERR(TAG, "IMP_EmuFrameSource_GetChnAttr(1) error: %d\n", ret); return ; } IMP_LOG_DBG(TAG, "FS Chn0 ChnAttr.picWidth=%d\n", imp_chn_attr_check.picWidth); IMP_LOG_DBG(TAG, "FS Chn0 ChnAttr.picHeight=%d\n", imp_chn_attr_check.picHeight); IMP_LOG_DBG(TAG, "FS Chn0 ChnAttr.pixFmt=%d\n", imp_chn_attr_check.pixFmt); IMP_LOG_DBG(TAG, "FS Chn0 ChnAttr.outFrmRate=%d\n", imp_chn_attr_check.outFrmRate); /* Configure channel 1 attr */ imp_chn_attr.picWidth = FRAME_W_2; imp_chn_attr.picHeight = FRAME_H_2; imp_chn_attr.pixFmt = FRAME_FORMAT_2; imp_chn_attr.outFrmRate = FRAME_RATE_OUT_2; ret = IMP_FrameSource_SetChnAttr(1, &imp_chn_attr); if (ret < 0) { IMP_LOG_ERR(TAG, "IMP_EmuFrameSource_SetChnAttr(0) error: %d\n", ret); return ; } /* Check channel 0 attr */ ret = IMP_FrameSource_GetChnAttr(1, &imp_chn_attr_check); if (ret < 0) { IMP_LOG_ERR(TAG, "IMP_EmuFrameSource_GetChnAttr(1) error: %d\n", ret); return ; } IMP_LOG_DBG(TAG, "FS Chn1 ChnAttr.picWidth=%d\n", imp_chn_attr_check.picWidth); IMP_LOG_DBG(TAG, "FS Chn1 ChnAttr.picHeight=%d\n", imp_chn_attr_check.picHeight); IMP_LOG_DBG(TAG, "FS Chn1 ChnAttr.pixFmt=%d\n", imp_chn_attr_check.pixFmt); IMP_LOG_DBG(TAG, "FS Chn1 ChnAttr.outFrmRate=%d\n", imp_chn_attr_check.outFrmRate); /* Enable channels */ ret = IMP_FrameSource_EnableChn(0); if (ret < 0) { IMP_LOG_ERR(TAG, "IMP_EmuFrameSource_EnableChn(0) error: %d\n", ret); return ; } ret = IMP_FrameSource_EnableChn(1); if (ret < 0) { IMP_LOG_ERR(TAG, "IMP_EmuFrameSource_EnableChn(1) error: %d\n", ret); return ; } /* Enable Device */ ret = IMP_FrameSource_EnableDev(); if (ret < 0) { IMP_LOG_ERR(TAG, "IMP_EmuFrameSource_EnableDev error: %d\n", ret); return ; } IMP_LOG_DBG(TAG, "%s(): OK.\n", __func__); IMP_FrameSource_StreamOn(); struct timeval tv = {6, 0}; select(0, NULL, NULL, NULL, &tv); IMP_FrameSource_StreamOff(); IMP_FrameSource_DisableDev(); IMP_FrameSource_DisableChn(1); IMP_FrameSource_DisableChn(0); IMP_LOG_DBG(TAG, "Unbind...\n"); #define UNBIND(A, B) \ ret = IMP_System_UnBind(&A, &B); \ if (ret < 0) { \ IMP_LOG_ERR(TAG, "UnBind src(%d,%d,%d) dst(%d,%d,%d) error\n", \ A.devID, A.grpID, A.chnID, \ B.devID, B.grpID, B.chnID); \ goto out; \ } UNBIND(framesource0, dev0_chn0); UNBIND(framesource1, dev1_chn0); #undef UNBIND out: IMP_LOG_DBG(TAG, "IMP_System_Exit\n"); ret = IMP_System_Exit(); if (ret < 0) { IMP_LOG_ERR(TAG, "IMP_System_Exit() failed:%d\n", ret); CU_FAIL(); return; } CU_PASS(); }