summaryrefslogtreecommitdiff
path: root/include/ia_imaging/ia_dpc.h
blob: b787ed3f4a43826697efed1b091985e7e1f967dc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*
 * Copyright (C) 2015 - 2017 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.
 */
/*!
 * \mainpage IA DPC API documentation
 *
 * Browse Files and Classes tabs for details.
 *
 */
/*!
 * \file ia_dpc.h
 * \brief Definitions and declarations of IA SD-DPC library.
 */
#ifndef _IA_DPC_H_
#define _IA_DPC_H_

#include "ia_aiq_types.h"
#include "ia_types.h"
#include "ia_mkn_types.h"
#include "ia_cmc_types.h"

#ifdef __cplusplus
extern "C" {
#endif
#define IA_DPC_VERSION "1.0.0.0"
typedef struct ia_dpc_t ia_dpc;

/*!
 * \brief SD-DPC runtime input.
 */
typedef struct {
    short *frame_data;                 /*!< fixed point image */
    int frame_width;                   /*!< current frame width (might be cropped) */
    int frame_height;                  /*!< current frame height (might be cropped) */
} sd_dpc_input;

/*!
 * \brief SD-DPC per-run output.
 */
typedef struct {
    short *defect_lut;          /*!< defects LUT stores the column indices (one-based) of the approved defects per row. size frame_height x max_defects_per_line */
    int dpc_lut_width;        /*!< the width of the DP LUT, equal to maximum number of defects per line */
    int dpc_lut_height;       /*!< the height of the DP LUT, equal to sensor height */
    bool dpc_lut_changed;     /*!< true if the new defects have been added */
} sd_dpc_output;

/*!
 * \brief Initialize IA_DPC.The function parses the given AIQB data and determines if the SD-DPC should be used.
 *        If yes the object is allocated and initialized.
 *        If not, null is returned
 *
 * \param[in]     aiqb_data              Mandatory.\n
 *                                       CPFF that contains tuning parameters for camera, ISP and AIQ algorithms.
 *                                       If NULL is given the function will return NULL.
 * \param[in]     ia_cmc                 Mandatory.\n
 *                                       Parsed camera module characterization structure. Internal copy of the structure will be taken.
 *                                       If NULL is given the function will return NULL.
 * \param[in]     ia_dpcd_data           Mandatory.\n
 *                                       loaded DPCD data. Should not be NULL, but have size = 0 instead
 * \param[in]     max_defects_per_line   Mandatory.\n
 *                                       maximum number of defects per line support by the ISP.
 * \param[in]     stripe_number_of_lines Mandatory.\n
 *                                       The maximum stripe height.
 * return                                IA_DPC handle. Use the returned handle as input parameter for the consequent IA_DPC calls.
 *                                       Returns NULL is SD-DPC should be bypassed.
 */
LIBEXPORT ia_dpc*
ia_dpc_init(const ia_binary_data *aiqb_data,
            const ia_cmc_t *ia_cmc,
            const ia_binary_data *ia_dpcd_data,
            unsigned int max_defects_per_line,
            unsigned int stripe_number_of_lines);

/*!
 * \brief De-initialize IA_DPC.
 * All memory allocated by DPC algoriths are freed. DPC handle can no longer be used.
 *
 * \param[in] ia_dpc                Mandatory.\n
 *                                  DPC instance handle.
 */
LIBEXPORT void
ia_dpc_deinit(ia_dpc *ia_dpc);
/*!
 * \brief SD-DPC execution based on input parameters and stripe.
 *
 *  \param [in]      ia_dpc         Mandatory.\n
 *                                  SD-DPC state, updated with the intermediate results
 *  \param [in,out]  stripe_ptr     Mandatory.\n
 *                                  Stripe data that include the RAW pixels and the exisitng/ missing margins information.
 *  \param [out]     dpc_output     Mandatory.\n
 *                                  Output LUT of the verified defect pixels. The new defect pixels can be only in the given stripe region.
 *                                  Results can be used directly as input for AIC.
 *  \return                         Error code.
 */

LIBEXPORT ia_err
ia_dpc_run(ia_dpc *ia_dpc,
          const sd_dpc_input *stripe_ptr,
          const ia_aiq_frame_params *aiq_frame_params_ptr,
          const ia_aiq_ae_exposure_result *ae_exposure_result_ptr,
          sd_dpc_output *dpc_output);

/*!
 * \param[in]  ia_aiq               Mandatory.\n
 *                                  DPC instance handle.
 * \param[out] out_ia_dpcd_data     Mandatory.\n
 *                                  Contains various DPC related information, collected during run-time and subject to
 *                                  be stored in a host file system. Host will copy this data, if ia_dpcd_data->size > 0
 *                                  and ia_dpcd_data->data != NULL; SD-DPC is responsible to deallocate data buffer
 *                                  during ia_dpc_deinit().
 * \return                          Error code.
 */
LIBEXPORT ia_err
ia_dpc_get_dpcd_data(
        ia_dpc *ia_dpc,
        ia_binary_data *out_ia_dpcd_data);

#ifdef __cplusplus
}
#endif
#endif /* _IA_DPC_H_ */