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;
}
Beispiel #6
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();
}
Beispiel #7
0
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();
}