All pastes #805924 Raw Edit

Array issue

public text v1 · immutable
·published 2007-12-04 20:05 UTC
rendered paste body
__EXPORT uns32 GetPicture(int16 hcam, uns32 exposure_id, unsigned short (*argData)[1400][1400])
{
	unsigned long lPVCAMBufferSize;
	unsigned short xdimension = 1040;
	unsigned short ydimension = 1392;

	rgn_type tRegion;
	unsigned short* pData = NULL;

	uns32 uns32_param = 0;

	
	//if ((ydimension > 0 && xdimension > 0) && (ydimension < 20000 && xdimension < 20000))
	{
		tRegion.s1 = (unsigned short)1;
		tRegion.s2 = (unsigned short)ydimension;
		tRegion.sbin = 1;

		tRegion.p1 = (unsigned short)1;
		tRegion.p2 = (unsigned short)xdimension;
		tRegion.pbin = (unsigned short)1;

		


		pl_exp_init_seq();
		pl_exp_setup_seq(hcam,1,1,&tRegion, exposure_id, (unsigned long)1.0 ,&lPVCAMBufferSize);
			
				
			short status = 0;
			unsigned short bResult;
			unsigned long bytes;
						   
			if (!pl_buf_init()) {
				AddError("Cam: %i exposure id: %i Unable to free the camera buffer", hcam, exposure_id);
			}

			if (pData != NULL)
			{
				delete pData;
			}

			pData = new unsigned short[lPVCAMBufferSize];

			bResult = pl_exp_start_seq(hcam, pData);

			if (bResult == FALSE)
			{
				AfxMessageBox("Start camera running failed");
				return 1;
			}


			while (1)
			{
				bResult = pl_exp_check_status(hcam, &status, &bytes);
				if (bResult == false)
				{
					AddError("Cam: %i exposure id: %i Error while reading exposure status", hcam, exposure_id);
					return 1;
				}
				else
				{
					if (status == READOUT_FAILED)
					{
						AddError("READOUT_FAILED");
						return 1;
					}

					if (status == READOUT_COMPLETE)
					{

						AddError("Cam: %i exposure id: %i camera readout complete)", hcam, exposure_id);
						
						break;
					}

				}
			}

				pl_get_param(hcam, PARAM_EXPOSURE_MODE, ATTR_CURRENT, (void *)&uns32_param);
			pl_exp_finish_seq( hCam, pData, 0);
		pl_exp_uninit_seq();
	}

	// Fill the output value
	for(int iY = 0;iY <= ydimension;iY++)
	{ // Y dimension
		for (int iX = 0;iX <= xdimension;iX++)
		{ // X dimension
		   (*argData)[iY][iX] = pData[((iY*xdimension)+iX)];
		}
	}
	return 0;
}

int main(int argc, char* argv[])
{

	if (Openlib())
		printf("[Ok] Open library.\n");
	else
	{
		printf("[Err] Open library.\n");
		goto close;
	}

	if (Opencam(0))
		printf("[Ok] Open Camera.\n");
	else
	{
		printf("[Err] Open Camera.\n");
		goto close;
	}

	//unsigned short pData[1400][1400];
	//unsigned short *pData;

	//pData = malloc(sizeof(unsigned short)*1400*1400);


	if (Init(0))
	{
		printf("[Ok] Init Camera.\n");
		GetPicture(0, 0, &pData);
	}
	else
	{
		printf("[Err] Init Camera.\n");
		goto close;
	}

	if (CloseCam(0))
		printf("[Ok] Camera closed.\n");
	else
		printf("[Err] Camera closed.\n");
	
	if (Closelib())
		printf("[Ok] Library closed.\n");
	else
		printf("[Err] Library closed.\n");

close:
	PressEnter();
	return 0;
}