Пример #1
0
///////////////////////////////////////////////////////////////////////////
/// @brief Set 3 SmallImg Buffer addresses to HDR Drv.
///
/// @return SUCCDSS (TRUE) or Fail (FALSE).
///////////////////////////////////////////////////////////////////////////
MBOOL
HdrHal::HdrSmallImgBufSet(HDR_PIPE_CONFIG_PARAM& rHdrPipeConfigParam)
{
	HDR_LOGD("- E.");
	HDR_LOGV("rHdrPipeConfigParam.pSmallImgBufAddr[0/1/2]: (%p, %p, %p).", rHdrPipeConfigParam.pSmallImgBufAddr[0], rHdrPipeConfigParam.pSmallImgBufAddr[1], rHdrPipeConfigParam.pSmallImgBufAddr[2]);

    MBOOL   ret = MTRUE;
	MINT32	err = 0;	// 0: No error.
    HDR_SET_PROC_INFO_STRUCT HDR_SET_PROC_INFO;

	#if 1	//kidd for new hdr
    HDR_SET_PROC_INFO.ehdr_round = (HDR_PROC_ROUND_ENUM)rHdrPipeConfigParam.eHdrRound;
    HDR_SET_PROC_INFO.input_source_image_width = rHdrPipeConfigParam.u4SourceImgWidth;
    HDR_SET_PROC_INFO.input_source_image_height = rHdrPipeConfigParam.u4SourceImgHeight;
	HDR_SET_PROC_INFO.input_source_image[0] = rHdrPipeConfigParam.pSourceImgBufAddr[0];
	HDR_SET_PROC_INFO.input_source_image[1] = rHdrPipeConfigParam.pSourceImgBufAddr[1];
	HDR_SET_PROC_INFO.input_source_image[2] = rHdrPipeConfigParam.pSourceImgBufAddr[2];
	#endif

    // Set process info (small image addr and working buffer)
	HDR_SET_PROC_INFO.small_image_addr[0] = rHdrPipeConfigParam.pSmallImgBufAddr[0];
	HDR_SET_PROC_INFO.small_image_addr[1] = rHdrPipeConfigParam.pSmallImgBufAddr[1];
	HDR_SET_PROC_INFO.small_image_addr[2] = rHdrPipeConfigParam.pSmallImgBufAddr[2];

    ret = ( 0 == (err = m_pHdrDrv->HdrFeatureCtrl(HDR_FEATURE_SET_PROC_INFO, &HDR_SET_PROC_INFO, NULL)) );

	HDR_LOGD("- X. ret: %d.", ret);
	return ret;

}
///////////////////////////////////////////////////////////////////////////
/// @brief Get MAV Working Buffer size.
///
/// Get MAV Working Buffer size. Working Buffer size is obtained from MAV DRv.
///
/// @param [IN]  ru4SmallImgWidth		Small Image width.
/// @param [IN]  ru4SmallImgHeight		Small Image height.
/// @return MAV Working Buffer Size.
///////////////////////////////////////////////////////////////////////////
MUINT32
HdrHal::MavWorkingBuffSizeGet(MUINT32 ru4SmallImgWidth, MUINT32 ru4SmallImgHeight)
{
	HDR_LOGV("- E. ru4SmallImgWidth/Height: (%d, %d).", ru4SmallImgWidth, ru4SmallImgHeight);
    MUINT32 u4MavWorkingBuffSize = 0;

    MavImageInfo ImageInfo;
    ImageInfo.Width = ru4SmallImgWidth;
    ImageInfo.Height= ru4SmallImgHeight;
//    m_pMavDrv->MavFeatureCtrl(MAV_FEATURE_GET_WORKBUF_SIZE, &ImageInfo, &u4MavWorkingBuffSize); //Get small image width/height and ask working buf size

	u4MavWorkingBuffSize = ru4SmallImgWidth * ru4SmallImgHeight * 10;	// FIXME: This knowledge (MAV working buffer size) should not be known by HDR Hal.

	HDR_LOGV("- X. MavWorkingBuffSize: %d.", u4MavWorkingBuffSize);

	return u4MavWorkingBuffSize;
}
Пример #3
0
///////////////////////////////////////////////////////////////////////////
/// @brief Query SW EIS image width/height.
///
/// @param [OUT]  ru4Width		SW EIS Image width.
/// @param [OUT]  ru4Height		SW EIS Image height.
///////////////////////////////////////////////////////////////////////////
void
HdrHal::QuerySEImgResolution(MUINT32& ru4Width, MUINT32& ru4Height)
{
    ru4Width    = EIS_WIDTH2;	// FIXME: Should be replaced by customer parameter.
    ru4Height   = EIS_HEIGHT2;	// FIXME: Should be replaced by customer parameter.

	HDR_LOGV("SW EIS W/H: (%d, %d).", ru4Width, ru4Height);

}
Пример #4
0
///////////////////////////////////////////////////////////////////////////
/// @brief Set HDR Working Buffer address and size to HDR Drv.
///
/// @return SUCCDSS (TRUE) or Fail (FALSE).
///////////////////////////////////////////////////////////////////////////
MBOOL
HdrHal::HdrWorkingBufSet(MUINT32 u4BufAddr, MUINT32 u4BufSize)
{
	HDR_LOGD("- E. u4BufAddr: 0x%08X. u4BufSize: %d.", u4BufAddr, u4BufSize);

    MBOOL   ret = MTRUE;
	MINT32	err = 0;	// 0: No error.
    HDR_SET_WORK_BUF_INFO_STRUCT HDR_SET_WORK_BUF_INFO;

	// Allocate workin buffer
	HDR_SET_WORK_BUF_INFO.ext_mem_size = u4BufSize;
	HDR_SET_WORK_BUF_INFO.ext_mem_start_addr = u4BufAddr;
	HDR_LOGV("Before Enter HDR_FEATURE_SET_WORK_BUF_INFO.");
    ret = ( 0 == (err = m_pHdrDrv->HdrFeatureCtrl(HDR_FEATURE_SET_WORK_BUF_INFO, &HDR_SET_WORK_BUF_INFO, NULL)) );
	HDR_LOGV("After Enter HDR_FEATURE_SET_WORK_BUF_INFO.");

	HDR_LOGD("- X. ret: %d.", ret);
	return ret;
}
Пример #5
0
///////////////////////////////////////////////////////////////////////////
/// @brief Get HDR Working Buffer size.
///
/// Get HDR Working Buffer size. Working Buffer size is obtained from HDR Drv.
/// Important Note: This function can only be used after HDR Drv knows the
///     width and Height of Image, i.e. after HDR Drv init.
///
/// @return HDR Working Buffer Size.
///////////////////////////////////////////////////////////////////////////
MUINT32
HdrHal::HdrWorkingBuffSizeGet(void)
{
    MUINT32 u4HdrWorkingBuffSize = 0;
    HDR_GET_PROC_INFO_STRUCT rHdrGetProcInfo;
    m_pHdrDrv->HdrFeatureCtrl(HDR_FEATURE_GET_PROC_INFO, NULL, &rHdrGetProcInfo); //Get small image width/height and ask working buf size
	u4HdrWorkingBuffSize = rHdrGetProcInfo.ext_mem_size;

	HDR_LOGV("HdrWorkingBuffSize: %d.", u4HdrWorkingBuffSize);
	return u4HdrWorkingBuffSize;
}
Пример #6
0
///////////////////////////////////////////////////////////////////////////
/// @brief Query small image width/height.
///
/// Important Note: This function can only be used after HDR Drv knows the
///     width and Height of Image, i.e. after HDR Drv init.
////
/// @param [OUT]  ru4Width		SW EIS Image width.
/// @param [OUT]  ru4Height		SW EIS Image height.
///////////////////////////////////////////////////////////////////////////
void
HdrHal::QuerySmallImgResolution(MUINT32& ru4Width, MUINT32& ru4Height)
{
    HDR_GET_PROC_INFO_STRUCT rHdrGetProcInfo;

    m_pHdrDrv->HdrFeatureCtrl(HDR_FEATURE_GET_PROC_INFO, NULL, &rHdrGetProcInfo); //Get small image width/height and ask working buf size

    ru4Width    = rHdrGetProcInfo.small_image_width;
    ru4Height   = rHdrGetProcInfo.small_image_height;

	HDR_LOGV("SmallImg W/H: (%d, %d).", ru4Width, ru4Height);

}
Пример #7
0
///////////////////////////////////////////////////////////////////////////
/// @brief Get MAV Working Buffer size.
///
/// Get MAV Working Buffer size. Working Buffer size is obtained from MAV DRv.
///
/// @param [IN]  ru4SmallImgWidth		Small Image width.
/// @param [IN]  ru4SmallImgHeight		Small Image height.
/// @param [OUT] u4MavWorkingBuffSize	return MAV Working Buffer Size.
/// @return SUCCDSS (TRUE) or Fail (FALSE).
///////////////////////////////////////////////////////////////////////////
MBOOL
HdrHal::MavWorkingBuffSizeGet(MUINT32 ru4SmallImgWidth, MUINT32 ru4SmallImgHeight, MUINT32 *pMavWorkingBuffSize)
{
	HDR_LOGD("- E.");
    MBOOL   ret = MTRUE;

	if(m_pMavDrv) {
		HDR_LOGV("ru4SmallImgWidth/Height: (%d, %d).", ru4SmallImgWidth, ru4SmallImgHeight);

		//Get small image width/height and ask working buf size
	    MavImageInfo ImageInfo;
	    ImageInfo.Width = ru4SmallImgWidth;
	    ImageInfo.Height= ru4SmallImgHeight;
	    m_pMavDrv->MavFeatureCtrl(MAV_FEATURE_GET_WORKBUF_SIZE, &ImageInfo, pMavWorkingBuffSize);

		HDR_LOGV("MavWorkingBuffSize: %d.", *pMavWorkingBuffSize);
	} else {
		HDR_LOGE("m_pMavDrv wasn't inited");
		ret = MFALSE;
	}

	HDR_LOGD("- X. ret: %d.", ret);
	return ret;
}
Пример #8
0
///////////////////////////////////////////////////////////////////////////
/// @brief Get HDR final result.
///
/// @param [OUT] prHdrResult		A pointer pointing to HDR result (including width, height, address).
/// @return SUCCDSS (TRUE) or Fail (FALSE).
///////////////////////////////////////////////////////////////////////////
MBOOL
HdrHal::HdrCroppedResultGet(HDR_PIPE_HDR_RESULT_STRUCT& rHdrCroppedResult)
{
	HDR_LOGD("- E.");

    MBOOL   ret = MTRUE;
	MINT32	err = 0;	// 0: No error.

    ret = ( 0 == (err = m_pHdrDrv->HdrFeatureCtrl(HDR_FEATURE_GET_RESULT, 0, &rHdrCroppedResult)) );


	HDR_LOGV("rHdrResult:: W/H: (%d, %d). Addr: 0x%08X. Size: %d.", rHdrCroppedResult.output_image_width, rHdrCroppedResult.output_image_height, rHdrCroppedResult.output_image_addr, rHdrCroppedResult.output_image_width * rHdrCroppedResult.output_image_height * 3 / 2);


	HDR_LOGD("- X. ret: %d.", ret);
	return ret;

}
///////////////////////////////////////////////////////////////////////////
/// @brief Set 3 SmallImg Buffer addresses to HDR Drv.
///
/// @return SUCCDSS (TRUE) or Fail (FALSE).
///////////////////////////////////////////////////////////////////////////
MBOOL
HdrHal::HdrSmallImgBufSet(HDR_PIPE_CONFIG_PARAM& rHdrPipeConfigParam)
{
	HDR_LOGD("- E.");
	HDR_LOGV("rHdrPipeConfigParam.pSmallImgBufAddr[0/1/2]: (0x%08X, 0x%08X, 0x%08X).", rHdrPipeConfigParam.pSmallImgBufAddr[0], rHdrPipeConfigParam.pSmallImgBufAddr[1], rHdrPipeConfigParam.pSmallImgBufAddr[2]);

    MBOOL   ret = MTRUE;
	MINT32	err = 0;	// 0: No error.
    HDR_SET_PROC_INFO_STRUCT HDR_SET_PROC_INFO;

    // Set process info (small image addr and working buffer)
	HDR_SET_PROC_INFO.small_image_addr[0] = rHdrPipeConfigParam.pSmallImgBufAddr[0];
	HDR_SET_PROC_INFO.small_image_addr[1] = rHdrPipeConfigParam.pSmallImgBufAddr[1];
	HDR_SET_PROC_INFO.small_image_addr[2] = rHdrPipeConfigParam.pSmallImgBufAddr[2];

    ret = ( 0 == (err = m_pHdrDrv->HdrFeatureCtrl(HDR_FEATURE_SET_PROC_INFO, &HDR_SET_PROC_INFO, NULL)) );

	HDR_LOGD("- X. ret: %d.", ret);
	return ret;

}
Пример #10
0
///////////////////////////////////////////////////////////////////////////
/// @brief Do Feature Extraction.
///
/// @param [IN]  rHdrPipeFeatureExtractInputInfo
/// @return SUCCDSS (TRUE) or Fail (FALSE).
///////////////////////////////////////////////////////////////////////////
MBOOL
HdrHal::Do_FeatureExtraction(HDR_PIPE_FEATURE_EXTRACT_INPUT_INFO& rHdrPipeFeatureExtractInputInfo)
{
	HDR_LOGD("- E.");
	HDR_LOGV("rHdrPipeFeatureExtractInputInfo: W/H: (%d, %d). Addr[0/1/2]: (%p, %p, %p) .", rHdrPipeFeatureExtractInputInfo.u2SmallImgW, rHdrPipeFeatureExtractInputInfo.u2SmallImgH, rHdrPipeFeatureExtractInputInfo.pSmallImgBufAddr[0], rHdrPipeFeatureExtractInputInfo.pSmallImgBufAddr[1], rHdrPipeFeatureExtractInputInfo.pSmallImgBufAddr[2]);

    MBOOL   ret = MTRUE;
	MINT32	err = 0;	// 0: No error.
	MavImageInfo rMavInfo;

	// assign working buffer
	m_pMavDrv->MavFeatureCtrl(MAV_FEATURE_SET_WORKBUF_ADDR
							, (void*)rHdrPipeFeatureExtractInputInfo.pWorkingBuffer
							, NULL);

    // overall process starts from 2nd image
    for (MUINT32 i = 0; i < GS_u4OutputFrameNum; i++)
    {
		// Add i image
		rMavInfo.Width	 = rHdrPipeFeatureExtractInputInfo.u2SmallImgW;
		rMavInfo.Height	 = rHdrPipeFeatureExtractInputInfo.u2SmallImgH;
		rMavInfo.ImgAddr = rHdrPipeFeatureExtractInputInfo.pSmallImgBufAddr[i];

		if ( i == 0)	// 1st image.
		{
			rMavInfo.MotionValue[0] = 0;
			rMavInfo.MotionValue[1] = 0;
		}
		else	// 2nd and 3rd image.
		{
			rMavInfo.MotionValue[0] = G_i4GMV2[(i-1)*2];
			rMavInfo.MotionValue[1] = G_i4GMV2[(i-1)*2+1];
		}

		HDR_LOGV("rMavInfo[%d]:: W/H: (%d, %d). ImgAddr: 0x%08X. MotionValue[0/1]: (%d, %d)."
				, i
				, rMavInfo.Width
				, rMavInfo.Height
				, rMavInfo.ImgAddr
				, rMavInfo.MotionValue[0]
				, rMavInfo.MotionValue[1]
				);

		ret =	( 0 == (err = m_pMavDrv->MavFeatureCtrl(MAV_FEATURE_ADD_IMAGE, &rMavInfo, 0)) );

		// Leave For_loop if error happened.
		if (! ret)	// if ret != MTRUE means error happened.
	    {
	        goto lbExit;
	    }
    }

	ret =	( 0 == (err = m_pMavDrv->MavMain()) );	// Feature Extraction
	if (! ret)	// if ret != MTRUE means error happened.
    {
		HDR_LOGE("MavMain() fail, err(%d)", err);
        goto lbExit;
    }

	// Get MAV result, and set for HDR.
	mav_rec_par_struct gRecPar;
	MavMatchImagePairStruct gMyMavMatchImagePair;
    gRecPar.m_Match = &gMyMavMatchImagePair;

	ret =	( 0 == (err = m_pMavDrv->MavFeatureCtrl(MAV_FEATURE_GET_MATCH_PAIR_INFO,NULL,&gRecPar)) )
    	&&	( 0 == (err = m_pHdrDrv->HdrFeatureCtrl(HDR_FEATURE_SET_REC_PAIR_INFO, &gRecPar, NULL)) )
			;
    if(!ret) {
		HDR_LOGE("MavFeatureCtrl() or fail HdrFeatureCtrl(), err(%d)", err);
        goto lbExit;
    }
    

lbExit:

	HDR_LOGD("- X. ret: %d.", ret);
	return ret;

}
Пример #11
0
MBOOL
HdrHal::init(void *pInitInData)
{
	HDR_LOGD("- E. mUsers: %d.", mUsers);
	HDR_PIPE_INIT_INFO* prHdrPipeInitInfo = (HDR_PIPE_INIT_INFO*)pInitInData;
	HDR_LOGV("ImgW/H: (%d, %d). FinalGainDiff[0/1]: (%d, %d). OutputFrameNum: %d. TargetTone: %d.", prHdrPipeInitInfo->u4ImgW, prHdrPipeInitInfo->u4ImgH, prHdrPipeInitInfo->u4FinalGainDiff0, prHdrPipeInitInfo->u4FinalGainDiff1, prHdrPipeInitInfo->u4OutputFrameNum, prHdrPipeInitInfo->u4TargetTone);
	HDR_LOGV("pSourceImgBufAddr[0/1/2]: (%p, %p, %p).", prHdrPipeInitInfo->pSourceImgBufAddr[0], prHdrPipeInitInfo->pSourceImgBufAddr[1], prHdrPipeInitInfo->pSourceImgBufAddr[2]);

    MBOOL   ret = MFALSE;
	MINT32	err = 0;	// 0: No error. other value: error.

	Mutex::Autolock lock(mLock);

	if (mUsers > 0)
	{
		HDR_LOGD("%d has created.", mUsers);
		android_atomic_inc(&mUsers);

		HDR_LOGD("- X. ret: %d.", MTRUE);
		return MTRUE;
	}

	// Create HdrDrv instance.
    m_pHdrDrv = MTKHdr::createInstance();
	if (!m_pHdrDrv)
	{
		HDR_LOGD("MTKHdr::createInstance() fail.");
		goto create_fail_exit;
	}

	// Allocate working buffer needed by Drv (HdrDrv and MavDrv).

	// Init HdrDrv object.
    //     Fill init data.
    HDR_SET_ENV_INFO_STRUCT rHdrInitInfo;

	rHdrInitInfo.image_num		= prHdrPipeInitInfo->u4OutputFrameNum;
	GS_u4OutputFrameNum			= prHdrPipeInitInfo->u4OutputFrameNum;	// Record u4OutputFrameNum for HDR Pipe to use.
	rHdrInitInfo.ev_gain1		= (MUINT16)prHdrPipeInitInfo->u4FinalGainDiff0;
	rHdrInitInfo.ev_gain2		= 1024; 	// Fix at 1024.
	rHdrInitInfo.ev_gain3		= (MUINT16)prHdrPipeInitInfo->u4FinalGainDiff1;
	rHdrInitInfo.target_tone	= prHdrPipeInitInfo->u4TargetTone;
	rHdrInitInfo.image_width	= prHdrPipeInitInfo->u4ImgW;
    rHdrInitInfo.image_height	= prHdrPipeInitInfo->u4ImgH;

    if(CustomHdrUseIspGamma())
    {
        HDR_LOGD("Use ISP Gamma");
        rHdrInitInfo.pIsp_gamma = prHdrPipeInitInfo->pIsp_gamma;
    }
    else
    {
        HDR_LOGD("Use Fixed Gamma");
        rHdrInitInfo.pIsp_gamma = NULL;
    }
	
    rHdrInitInfo.hdr_tuning_data.BRatio	= CustomHdrBRatioGet();

    for (MUINT32 i = 0; i < 11; i++)
    {
		rHdrInitInfo.hdr_tuning_data.Gain[i]	= CustomHdrGainArrayGet(i);
    }

    rHdrInitInfo.hdr_tuning_data.BottomFRatio	= CustomHdrBottomFRatioGet();
    rHdrInitInfo.hdr_tuning_data.TopFRatio		= CustomHdrTopFRatioGet();
    rHdrInitInfo.hdr_tuning_data.BottomFBound	= CustomHdrBottomFBoundGet();
    rHdrInitInfo.hdr_tuning_data.TopFBound		= CustomHdrTopFBoundGet();

    rHdrInitInfo.hdr_tuning_data.ThHigh         = CustomHdrThHighGet();
    rHdrInitInfo.hdr_tuning_data.ThLow          = CustomHdrThLowGet();

    rHdrInitInfo.hdr_tuning_data.TargetLevelSub = CustomHdrTargetLevelSubGet();
    rHdrInitInfo.hdr_tuning_data.CoreNumber     = CustomHdrCoreNumberGet();
    rHdrInitInfo.hdr_tuning_data.HdrSpeed       = HDR_PROCESS_NORMAL;	//Never use HDR_PROCESS_FAST

    rHdrInitInfo.HdrSrcInfo     = (prHdrPipeInitInfo->u4SensorType == NSCam::SENSOR_TYPE_YUV)
                                    ? HDR_INFO_SRC_YUV
                                    : HDR_INFO_SRC_RAW;

	HDR_LOGD("rHdrInitInfo:: ImgW/H: (%d, %d). FinalGainDiff[0/1]: (%d, %d). OutputFrameNum: %d. TargetTone: %d. RawSensor: %d."
			, rHdrInitInfo.image_width
			, rHdrInitInfo.image_height
			, rHdrInitInfo.ev_gain1
			, rHdrInitInfo.ev_gain3
			, rHdrInitInfo.image_num
			, rHdrInitInfo.target_tone
			, rHdrInitInfo.HdrSrcInfo);

	//HDR_LOGV("rHdrInitInfo:: pSourceImgBufAddr[0/1/2]: (0x%08X, 0x%08X, 0x%08X).", rHdrInitInfo.image_addr[0], rHdrInitInfo.image_addr[1], rHdrInitInfo.image_addr[2]);
	HDR_LOGV("rHdrInitInfo:: BRatio: %d. BottomFRatio: %f. TopFRatio: %f. BottomFBound:	%d. TopFBound: %d.",
		rHdrInitInfo.hdr_tuning_data.BRatio,
		rHdrInitInfo.hdr_tuning_data.BottomFRatio,
		rHdrInitInfo.hdr_tuning_data.TopFRatio,
		rHdrInitInfo.hdr_tuning_data.BottomFBound,
		rHdrInitInfo.hdr_tuning_data.TopFBound
	);
	HDR_LOGV("rHdrInitInfo:: ThHigh: %d. ThLow: %d. TargetLevelSub: %d.",
		rHdrInitInfo.hdr_tuning_data.ThHigh,
		rHdrInitInfo.hdr_tuning_data.ThLow,
		rHdrInitInfo.hdr_tuning_data.TargetLevelSub
	);
    for (MUINT32 i = 0; i < 11; i++)
		HDR_LOGV("rHdrInitInfo:: u4Gain[%d]: %d.", i, rHdrInitInfo.hdr_tuning_data.Gain[i]);

    //     Call HdrDrv init.
    err = m_pHdrDrv->HdrInit(&rHdrInitInfo, 0);
	if (err)	// if ret != 0 means error happened.
	{
		HDR_LOGD("m_pHdrDrv->HdrInit() fail, err=%d", err);
		goto create_fail_exit;
	}

	if(1) {
		//	set HDR default pthread attribute to avoid RT throttling
	    pthread_attr_t attr = {0, NULL, 1024 * 1024, 4096, SCHED_OTHER, ANDROID_PRIORITY_FOREGROUND+1};
		m_pHdrDrv->HdrFeatureCtrl(HDR_FEATURE_SET_PTHREAD_ATTR, &attr, NULL);
	}

#if EARLY_MAV_INIT
	// Create MavDrv instance.
	m_pMavDrv = MTKMav::createInstance(DRV_MAV_OBJ_SWHDR);
	if (!m_pMavDrv)
	{
		HDR_LOGD("MTKMav::createInstance() fail.");
		goto create_fail_exit;
	}

	// Init MavDrv object.
    //     Fill init data.
	MavInitInfo rMavInitInfo;
	rMavInitInfo.WorkingBuffAddr = (MUINT32)global_buffer_rectify;	// FIXME: Allocate working buffer for MAV.
    rMavInitInfo.pTuningInfo = NULL;
    //     Call MavDrv init.
	err = m_pMavDrv->MavInit(&rMavInitInfo, 0);
	if (err)	// if ret != 0 means error happened.
	{
		HDR_LOGD("m_pMavDrv->MavInit() fail. err: %d.", err);
		goto create_fail_exit;
	}
#endif	// EARLY_MAV_INIT

	android_atomic_inc(&mUsers);

	ret = MTRUE;
	HDR_LOGD("- X. ret: %d.", ret);
	return ret;

create_fail_exit:

	// HdrDrv Init failed, destroy HdrDrv instance.
	if (m_pHdrDrv)
	{
		m_pHdrDrv->destroyInstance();
		m_pHdrDrv = NULL;
	}

#if EARLY_MAV_INIT
	// MavDrv Init failed, destroy MavDrv instance.
	if (m_pMavDrv)
	{
		m_pMavDrv->MavReset();
		m_pMavDrv->destroyInstance();
		m_pMavDrv = NULL;
	}
#endif	// EARLY_MAV_INIT

	HDR_LOGD("- X. ret: %d.", ret);
	return ret;	// 0: No error. other value: error.

}
Пример #12
0
MBOOL
HdrHal::init(void *pInitInData)
{
	HDR_LOGD("- E. mUsers: %d.", mUsers);
	HDR_PIPE_INIT_INFO* prHdrPipeInitInfo = (HDR_PIPE_INIT_INFO*)pInitInData;
	HDR_LOGV("ImgW/H: (%d, %d). FinalGainDiff[0/1]: (%d, %d). OutputFrameNum: %d. TargetTone: %d.", prHdrPipeInitInfo->u4ImgW, prHdrPipeInitInfo->u4ImgH, prHdrPipeInitInfo->u4FinalGainDiff0, prHdrPipeInitInfo->u4FinalGainDiff1, prHdrPipeInitInfo->u4OutputFrameNum, prHdrPipeInitInfo->u4TargetTone);
	HDR_LOGV("pSourceImgBufAddr[0/1/2]: (0x%08X, 0x%08X, 0x%08X).", prHdrPipeInitInfo->pSourceImgBufAddr[0], prHdrPipeInitInfo->pSourceImgBufAddr[1], prHdrPipeInitInfo->pSourceImgBufAddr[2]);

    MBOOL   ret = MFALSE;
	MINT32	err = 0;	// 0: No error. other value: error.

	Mutex::Autolock lock(mLock);

	if (mUsers > 0)
	{
		HDR_LOGD("%d has created.", mUsers);
		android_atomic_inc(&mUsers);

		HDR_LOGD("- X. ret: %d.", MTRUE);
		return MTRUE;
	}

	// Create HdrDrv instance.
    m_pHdrDrv = MTKHdr::createInstance();
	if (!m_pHdrDrv)
	{
		HDR_LOGD("MTKHdr::createInstance() fail.");
		goto create_fail_exit;
	}

	// Allocate working buffer needed by Drv (HdrDrv and MavDrv).

	// Init HdrDrv object.
    //     Fill init data.
    HDR_SET_ENV_INFO_STRUCT rHdrInitInfo;

	rHdrInitInfo.image_num		= prHdrPipeInitInfo->u4OutputFrameNum;
	GS_u4OutputFrameNum			= prHdrPipeInitInfo->u4OutputFrameNum;	// Record u4OutputFrameNum for HDR Pipe to use.
	rHdrInitInfo.ev_gain1		= (MUINT16)prHdrPipeInitInfo->u4FinalGainDiff0;
	rHdrInitInfo.ev_gain2		= 1024; 	// Fix at 1024.
	rHdrInitInfo.ev_gain3		= (MUINT16)prHdrPipeInitInfo->u4FinalGainDiff1;
	rHdrInitInfo.target_tone	= prHdrPipeInitInfo->u4TargetTone;
	rHdrInitInfo.image_width	= prHdrPipeInitInfo->u4ImgW;
    rHdrInitInfo.image_height	= prHdrPipeInitInfo->u4ImgH;
	rHdrInitInfo.image_addr[0]	= prHdrPipeInitInfo->pSourceImgBufAddr[0];
	rHdrInitInfo.image_addr[1]	= prHdrPipeInitInfo->pSourceImgBufAddr[1];
	rHdrInitInfo.image_addr[2]	= prHdrPipeInitInfo->pSourceImgBufAddr[2];

    rHdrInitInfo.hdr_tuning_data.BlurRatio	= CustomHdrBlurRatioGet();

    for (MUINT32 i = 0; i < 11; i++)
    {
		rHdrInitInfo.hdr_tuning_data.Gain[i]	= CustomHdrGainArrayGet(i);
    }
 
    rHdrInitInfo.hdr_tuning_data.BottomFlareRatio	= CustomHdrBottomFlareRatioGet();
    rHdrInitInfo.hdr_tuning_data.TopFlareRatio		= CustomHdrTopFlareRatioGet();
    rHdrInitInfo.hdr_tuning_data.BottomFlareBound	= CustomHdrBottomFlareBoundGet();
    rHdrInitInfo.hdr_tuning_data.TopFlareBound		= CustomHdrTopFlareBoundGet();

    rHdrInitInfo.hdr_tuning_data.ThHigh				= CustomHdrThHighGet();
    rHdrInitInfo.hdr_tuning_data.ThLow				= CustomHdrThLowGet();
    
    rHdrInitInfo.hdr_tuning_data.TargetLevelSub		= CustomHdrTargetLevelSubGet();
    rHdrInitInfo.hdr_tuning_data.CoreNumber		    = CustomHdrCoreNumberGet();

	HDR_LOGV("rHdrInitInfo:: ImgW/H: (%d, %d). FinalGainDiff[0/1]: (%d, %d). OutputFrameNum: %d. TargetTone: %d.", rHdrInitInfo.image_width, rHdrInitInfo.image_height, rHdrInitInfo.ev_gain1, rHdrInitInfo.ev_gain3, rHdrInitInfo.image_num, rHdrInitInfo.target_tone);
	HDR_LOGV("rHdrInitInfo:: pSourceImgBufAddr[0/1/2]: (0x%08X, 0x%08X, 0x%08X).", rHdrInitInfo.image_addr[0], rHdrInitInfo.image_addr[1], rHdrInitInfo.image_addr[2]);
	HDR_LOGV("rHdrInitInfo:: BlurRatio: %d. BottomFlareRatio: %f. TopFlareRatio: %f. BottomFlareBound:	%d. TopFlareBound: %d.",
		rHdrInitInfo.hdr_tuning_data.BlurRatio,
		rHdrInitInfo.hdr_tuning_data.BottomFlareRatio,
		rHdrInitInfo.hdr_tuning_data.TopFlareRatio,
		rHdrInitInfo.hdr_tuning_data.BottomFlareBound,
		rHdrInitInfo.hdr_tuning_data.TopFlareBound
	);
	HDR_LOGD("rHdrInitInfo:: ThHigh: %d. ThLow: %d. TargetLevelSub: %d. CoreNumber: %d.",
		rHdrInitInfo.hdr_tuning_data.ThHigh,
		rHdrInitInfo.hdr_tuning_data.ThLow,
		rHdrInitInfo.hdr_tuning_data.TargetLevelSub,
		rHdrInitInfo.hdr_tuning_data.CoreNumber
	);
    for (MUINT32 i = 0; i < 11; i++)
		HDR_LOGV("rHdrInitInfo:: u4Gain[%d]: %d.", i, rHdrInitInfo.hdr_tuning_data.Gain[i]);

    //     Call HdrDrv init.
    err = m_pHdrDrv->HdrInit(&rHdrInitInfo, 0);
	if (err)	// if ret != 0 means error happened.
	{
		HDR_LOGD("m_pHdrDrv->HdrInit() fail.");
		goto create_fail_exit;
	}

#if EARLY_MAV_INIT
	// Create MavDrv instance.
	m_pMavDrv = MTKMav::createInstance(DRV_MAV_OBJ_SWHDR);
	if (!m_pMavDrv)
	{
		HDR_LOGD("MTKMav::createInstance() fail.");
		goto create_fail_exit;
	}

	// Init MavDrv object.
    //     Fill init data.
	MavInitInfo rMavInitInfo;
	rMavInitInfo.WorkingBuffAddr = (MUINT32)global_buffer_rectify;	// FIXME: Allocate working buffer for MAV.
    rMavInitInfo.pTuningInfo = NULL;
    //     Call MavDrv init.
	err = m_pMavDrv->MavInit(&rMavInitInfo, 0);
	if (err)	// if ret != 0 means error happened.
	{
		HDR_LOGD("m_pMavDrv->MavInit() fail. err: %d.", err);
		goto create_fail_exit;
	}
#endif	// EARLY_MAV_INIT

	android_atomic_inc(&mUsers);

	ret = MTRUE;
	HDR_LOGD("- X. ret: %d.", ret);
	return ret;

create_fail_exit:

	// HdrDrv Init failed, destroy HdrDrv instance.
	if (m_pHdrDrv)
	{
		m_pHdrDrv->destroyInstance();
		m_pHdrDrv = NULL;
	}

#if EARLY_MAV_INIT
	// MavDrv Init failed, destroy MavDrv instance.
	if (m_pMavDrv)
	{
		m_pMavDrv->destroyInstance();
		m_pMavDrv = NULL;
	}
#endif	// EARLY_MAV_INIT

	HDR_LOGD("- X. ret: %d.", ret);
	return ret;	// 0: No error. other value: error.

}