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; }
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); }