void XCamSmartAnalyerContext::x3a_calculation_done (XAnalyzer *analyzer, X3aResultList &results) { XCAM_UNUSED (analyzer); SmartLock locker (_result_mutex); _results.insert (_results.end (), results.begin (), results.end ()); }
void X3aAnalyzeTuner::x3a_calculation_done (XAnalyzer *analyzer, X3aResultList &results) { XCAM_UNUSED (analyzer); _results.clear (); _results.assign (results.begin (), results.end ()); }
uint32_t XCamSmartAnalyerContext::get_results (X3aResultList &results) { uint32_t size = 0; SmartLock locker (_result_mutex); results.assign (_results.begin (), _results.end ()); size = _results.size (); _results.clear (); return size; }
void x3a_list_remove_result (X3aResultList &list, uint32_t type) { for (X3aResultList::iterator i = list.begin (); i != list.end ();) { SmartPtr<X3aResult> &result = *i; XCAM_ASSERT (result.ptr ()); if (result->get_type () == type) { list.erase (i++); continue; } ++i; } }
XCamReturn CL3aImageProcessor::apply_3a_results (X3aResultList &results) { XCamReturn ret = XCAM_RETURN_NO_ERROR; for (X3aResultList::iterator iter = results.begin (); iter != results.end (); ++iter) { SmartPtr<X3aResult> &result = *iter; ret = apply_3a_result (result); if (ret != XCAM_RETURN_NO_ERROR) break; } return ret; }
void AnalyzerCallback::x3a_calculation_done (X3aAnalyzer *analyzer, X3aResultList &results) { XCAM_UNUSED (analyzer); for (X3aResultList::iterator i_res = results.begin(); i_res != results.end(); ++i_res) { SmartPtr<X3aResult> res = *i_res; if (res.ptr() == NULL) continue; XCAM_LOG_DEBUG ( "calculated 3a result(type:%d, timestamp:" XCAM_TIMESTAMP_FORMAT ")", res->get_type (), XCAM_TIMESTAMP_ARGS (res->get_timestamp ())); } }
XCamReturn HybridAnalyzer::post_3a_analyze (X3aResultList &results) { XCamReturn ret = XCAM_RETURN_NO_ERROR; SmartPtr<X3aStats> stats = get_cur_stats (); if ((ret = DynamicAnalyzer::post_3a_analyze (results)) != XCAM_RETURN_NO_ERROR) { return ret; } for (X3aResultList::iterator i_res = results.begin (); i_res != results.end (); ++i_res) { SmartPtr<X3aResult> result = *i_res; switch (result->get_type ()) { case XCAM_3A_RESULT_EXPOSURE: { XCam3aResultExposure *res = (XCam3aResultExposure *) result->get_ptr (); _analyzer_aiq->set_ae_mode (XCAM_AE_MODE_MANUAL); _analyzer_aiq->set_ae_manual_exposure_time (res->exposure_time); _analyzer_aiq->set_ae_manual_analog_gain (res->analog_gain); break; } case XCAM_3A_RESULT_WHITE_BALANCE: { _analyzer_aiq->set_awb_mode (XCAM_AWB_MODE_MANUAL); XCam3aResultWhiteBalance *res = (XCam3aResultWhiteBalance *) result->get_ptr (); _analyzer_aiq->set_awb_manual_gain (res->gr_gain, res->r_gain, res->b_gain, res->gb_gain); break; } default: break; } } results.clear (); SmartPtr<X3aIspStatistics> isp_stats = stats.dynamic_cast_ptr<X3aIspStatistics> (); if (!isp_stats.ptr ()) { if (!_stats_pool.ptr () && setup_stats_pool (stats->get_stats ()) != XCAM_RETURN_NO_ERROR) return XCAM_RETURN_ERROR_MEM; isp_stats = convert_to_isp_stats (stats); } return _analyzer_aiq->push_3a_stats (isp_stats); }
uint32_t translate_3a_results_to_xcam (X3aResultList &list, XCam3aResultHead *results[], uint32_t max_count) { uint32_t result_count = 0; for (X3aResultList::iterator iter = list.begin (); iter != list.end (); ++iter) { SmartPtr<X3aResult> &isp_result = *iter; switch (isp_result->get_type()) { case X3aIspConfig::IspExposureParameters: { SmartPtr<X3aIspExposureResult> isp_exposure = isp_result.dynamic_cast_ptr<X3aIspExposureResult> (); XCAM_ASSERT (isp_exposure.ptr ()); const XCam3aResultExposure &exposure = isp_exposure->get_standard_result (); XCam3aResultExposure *new_exposure = xcam_malloc0_type (XCam3aResultExposure); *new_exposure = exposure; new_exposure->head.type = XCAM_3A_RESULT_EXPOSURE; new_exposure->head.process_type = XCAM_IMAGE_PROCESS_ALWAYS; new_exposure->head.version = XCAM_VERSION; results[result_count++] = (XCam3aResultHead*)new_exposure; break; } case X3aIspConfig::IspAllParameters: { SmartPtr<X3aAtomIspParametersResult> isp_3a_all = isp_result.dynamic_cast_ptr<X3aAtomIspParametersResult> (); XCAM_ASSERT (isp_3a_all.ptr ()); const struct atomisp_parameters &atomisp_params = isp_3a_all->get_isp_config (); result_count += translate_atomisp_parameters (atomisp_params, &results[result_count], max_count - result_count); break; } default: XCAM_LOG_WARNING ("unknow type(%d) in translation", isp_result->get_type()); break; } } return result_count; }