Home | History | Annotate | Download | only in xcore
      1 /*
      2  * smart_analysis_handler.h - smart analysis handler
      3  *
      4  *  Copyright (c) 2015 Intel Corporation
      5  *
      6  * Licensed under the Apache License, Version 2.0 (the "License");
      7  * you may not use this file except in compliance with the License.
      8  * You may obtain a copy of the License at
      9  *
     10  *      http://www.apache.org/licenses/LICENSE-2.0
     11  *
     12  * Unless required by applicable law or agreed to in writing, software
     13  * distributed under the License is distributed on an "AS IS" BASIS,
     14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     15  * See the License for the specific language governing permissions and
     16  * limitations under the License.
     17  *
     18  * Author: Zong Wei <wei.zong (at) intel.com>
     19  *             Wind Yuan <feng.yuan (at) intel.com>
     20  */
     21 #ifndef XCAM_SMART_ANALYSIS_HANDLER_H
     22 #define XCAM_SMART_ANALYSIS_HANDLER_H
     23 
     24 #include <xcam_std.h>
     25 #include <base/xcam_smart_description.h>
     26 #include <map>
     27 #include <x3a_result_factory.h>
     28 
     29 namespace XCam {
     30 
     31 class VideoBuffer;
     32 class SmartAnalysisHandler;
     33 class SmartAnalyzerLoader;
     34 class SmartAnalyzer;
     35 
     36 typedef std::list<SmartPtr<SmartAnalysisHandler>> SmartHandlerList;
     37 
     38 class SmartAnalysisHandler
     39 {
     40     typedef std::map<XCamSmartAnalysisContext*, SmartPtr<SmartAnalysisHandler>> SmartHandlerMap;
     41 
     42 public:
     43     SmartAnalysisHandler (XCamSmartAnalysisDescription *desc, SmartPtr<SmartAnalyzerLoader> &loader, const char *name = "SmartHandler");
     44     ~SmartAnalysisHandler ();
     45     void set_analyzer (SmartAnalyzer *analyzer) {
     46         _analyzer = analyzer;
     47     }
     48 
     49     XCamReturn create_context (SmartPtr<SmartAnalysisHandler> &self);
     50     void destroy_context ();
     51     bool is_valid () const {
     52         return (_context != NULL);
     53     }
     54 
     55     XCamReturn update_params (XCamSmartAnalysisParam &params);
     56     XCamReturn analyze (const SmartPtr<VideoBuffer> &buffer, X3aResultList &results);
     57     const char * get_name () const {
     58         return _name;
     59     }
     60     uint32_t get_priority () const {
     61         if (_desc)
     62             return _desc->priority;
     63         return 0;
     64     }
     65 
     66 protected:
     67     XCamReturn post_smart_results (const XCamVideoBuffer *buffer, XCam3aResultHead *results[], uint32_t res_count);
     68     static XCamReturn post_aync_results (
     69         XCamSmartAnalysisContext *context,
     70         const XCamVideoBuffer *buffer,
     71         XCam3aResultHead *results[], uint32_t res_count);
     72 
     73 private:
     74     XCamReturn convert_results (XCam3aResultHead *from[], uint32_t from_count, X3aResultList &to);
     75     XCAM_DEAD_COPY (SmartAnalysisHandler);
     76 
     77 //
     78 private:
     79     static SmartHandlerMap          _handler_map;
     80     static Mutex                    _handler_map_lock;
     81 
     82 private:
     83     XCamSmartAnalysisDescription   *_desc;
     84     SmartPtr<SmartAnalyzerLoader>   _loader;
     85     SmartAnalyzer                  *_analyzer;
     86     char                           *_name;
     87     XCamSmartAnalysisContext       *_context;
     88     bool                            _async_mode;
     89 };
     90 
     91 }
     92 
     93 #endif //XCAM_SMART_ANALYSIS_HANDLER_H
     94