| /* |
| * x3a_analyze_tuner.cpp - x3a analyzer Common IQ tuning adaptor |
| * |
| * Copyright (c) 2014-2015 Intel Corporation |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| * Author: Zong Wei <[email protected]> |
| */ |
| |
| #include "xcam_utils.h" |
| #include "x3a_stats_pool.h" |
| #include "x3a_analyzer.h" |
| #include "x3a_analyze_tuner.h" |
| #include "x3a_ciq_tuning_handler.h" |
| #include "x3a_ciq_tnr_tuning_handler.h" |
| #include "x3a_ciq_bnr_ee_tuning_handler.h" |
| #include "x3a_ciq_wavelet_tuning_handler.h" |
| |
| namespace XCam { |
| |
| X3aAnalyzeTuner::X3aAnalyzeTuner () |
| : X3aAnalyzer ("X3aAnalyzeTuner") |
| { |
| } |
| |
| X3aAnalyzeTuner::~X3aAnalyzeTuner () |
| { |
| } |
| |
| void |
| X3aAnalyzeTuner::set_analyzer (SmartPtr<X3aAnalyzer> &analyzer) |
| { |
| XCAM_ASSERT (analyzer.ptr () && !_analyzer.ptr ()); |
| _analyzer = analyzer; |
| |
| _analyzer->set_results_callback (this); |
| _analyzer->prepare_handlers (); |
| _analyzer->set_sync_mode (true); |
| } |
| |
| XCamReturn |
| X3aAnalyzeTuner::create_tuning_handlers () |
| { |
| XCamReturn ret = XCAM_RETURN_NO_ERROR; |
| |
| SmartPtr<AeHandler> ae_handler = _analyzer->get_ae_handler (); |
| SmartPtr<AwbHandler> awb_handler = _analyzer->get_awb_handler(); |
| |
| SmartPtr<X3aCiqTuningHandler> tnr_tuning = new X3aCiqTnrTuningHandler (); |
| SmartPtr<X3aCiqTuningHandler> bnr_ee_tuning = new X3aCiqBnrEeTuningHandler (); |
| SmartPtr<X3aCiqTuningHandler> wavelet_tuning = new X3aCiqWaveletTuningHandler (); |
| |
| if (tnr_tuning.ptr ()) { |
| tnr_tuning->set_ae_handler (ae_handler); |
| tnr_tuning->set_awb_handler (awb_handler); |
| add_handler (tnr_tuning); |
| } else { |
| ret = XCAM_RETURN_ERROR_PARAM; |
| } |
| |
| if (bnr_ee_tuning.ptr ()) { |
| bnr_ee_tuning->set_ae_handler (ae_handler); |
| bnr_ee_tuning->set_awb_handler (awb_handler); |
| add_handler (bnr_ee_tuning); |
| } else { |
| ret = XCAM_RETURN_ERROR_PARAM; |
| } |
| |
| if (wavelet_tuning.ptr ()) { |
| wavelet_tuning->set_ae_handler (ae_handler); |
| wavelet_tuning->set_awb_handler (awb_handler); |
| add_handler (wavelet_tuning); |
| } else { |
| ret = XCAM_RETURN_ERROR_PARAM; |
| } |
| |
| return ret; |
| } |
| |
| bool |
| X3aAnalyzeTuner::add_handler (SmartPtr<X3aCiqTuningHandler> &handler) |
| { |
| XCAM_ASSERT (handler.ptr ()); |
| _handlers.push_back (handler); |
| return true; |
| } |
| |
| XCamReturn |
| X3aAnalyzeTuner::analyze_ae (XCamAeParam ¶m) |
| { |
| XCamReturn ret = XCAM_RETURN_NO_ERROR; |
| |
| XCAM_ASSERT (_analyzer.ptr ()); |
| _analyzer->update_ae_parameters (param); |
| return ret; |
| } |
| |
| XCamReturn |
| X3aAnalyzeTuner::analyze_awb (XCamAwbParam ¶m) |
| { |
| XCamReturn ret = XCAM_RETURN_NO_ERROR; |
| |
| XCAM_ASSERT (_analyzer.ptr ()); |
| _analyzer->update_awb_parameters (param); |
| return ret; |
| } |
| |
| XCamReturn |
| X3aAnalyzeTuner::analyze_af (XCamAfParam ¶m) |
| { |
| XCamReturn ret = XCAM_RETURN_NO_ERROR; |
| |
| XCAM_ASSERT (_analyzer.ptr ()); |
| _analyzer->update_af_parameters (param); |
| return ret; |
| } |
| |
| XCamReturn |
| X3aAnalyzeTuner::analyze_common (XCamCommonParam ¶m) |
| { |
| XCamReturn ret = XCAM_RETURN_NO_ERROR; |
| |
| XCAM_ASSERT (_analyzer.ptr ()); |
| _analyzer->update_common_parameters (param); |
| return ret; |
| } |
| |
| SmartPtr<AeHandler> |
| X3aAnalyzeTuner::create_ae_handler () |
| { |
| SmartPtr<AeHandler> ae_handler = new X3aCiqTuningAeHandler (this); |
| return ae_handler; |
| } |
| |
| SmartPtr<AwbHandler> |
| X3aAnalyzeTuner::create_awb_handler () |
| { |
| SmartPtr<AwbHandler> awb_handler = new X3aCiqTuningAwbHandler (this); |
| return awb_handler; |
| } |
| |
| SmartPtr<AfHandler> |
| X3aAnalyzeTuner::create_af_handler () |
| { |
| SmartPtr<AfHandler> af_handler = new X3aCiqTuningAfHandler (this); |
| return af_handler; |
| } |
| |
| SmartPtr<CommonHandler> |
| X3aAnalyzeTuner::create_common_handler () |
| { |
| SmartPtr<CommonHandler> common_handler = new X3aCiqTuningCommonHandler (this); |
| return common_handler; |
| } |
| |
| XCamReturn |
| X3aAnalyzeTuner::internal_init (uint32_t width, uint32_t height, double framerate) |
| { |
| XCAM_ASSERT (_analyzer.ptr ()); |
| XCamReturn ret = XCAM_RETURN_NO_ERROR; |
| |
| _analyzer->init (width, height, framerate); |
| |
| if (XCAM_RETURN_NO_ERROR == ret) { |
| ret = create_tuning_handlers (); |
| } |
| return ret; |
| } |
| |
| XCamReturn |
| X3aAnalyzeTuner::internal_deinit () |
| { |
| XCAM_ASSERT (_analyzer.ptr ()); |
| XCamReturn ret = XCAM_RETURN_NO_ERROR; |
| |
| ret = _analyzer->deinit (); |
| |
| return ret; |
| } |
| |
| XCamReturn |
| X3aAnalyzeTuner::configure_3a () |
| { |
| XCAM_ASSERT (_analyzer.ptr ()); |
| XCamReturn ret = XCAM_RETURN_NO_ERROR; |
| |
| ret = _analyzer->start (); |
| |
| return ret; |
| } |
| |
| XCamReturn |
| X3aAnalyzeTuner::pre_3a_analyze (SmartPtr<X3aStats> &stats) |
| { |
| // save stats for aiq analyzer |
| XCamReturn ret = XCAM_RETURN_NO_ERROR; |
| if (stats.ptr ()) { |
| _stats = stats; |
| } |
| return ret; |
| } |
| |
| XCamReturn |
| X3aAnalyzeTuner::post_3a_analyze (X3aResultList &results) |
| { |
| XCamReturn ret = XCAM_RETURN_NO_ERROR; |
| |
| XCAM_ASSERT (_analyzer.ptr ()); |
| ret = _analyzer->push_3a_stats (_stats); |
| _stats.release (); |
| |
| results.insert (results.end (), _results.begin (), _results.end ()); |
| _results.clear (); |
| |
| X3aCiqTuningHandlerList::iterator i_handler = _handlers.begin (); |
| for (; i_handler != _handlers.end (); ++i_handler) |
| { |
| (*i_handler)->analyze (results); |
| } |
| |
| return ret; |
| } |
| |
| void |
| X3aAnalyzeTuner::x3a_calculation_done (XAnalyzer *analyzer, X3aResultList &results) |
| { |
| XCAM_UNUSED (analyzer); |
| _results.clear (); |
| _results.assign (results.begin (), results.end ()); |
| } |
| |
| }; |
| |