blob: e445b527671cec8f1e259c7d35fe6885144f7dcc [file] [log] [blame]
/*
* Copyright 2022 Google LLC
*
* 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.
*/
#include "samples/risp4ml/common/utils.h"
#include "samples/risp4ml/isp_stages/blc.h"
#include "samples/risp4ml/isp_stages/demosaic.h"
#include "samples/risp4ml/isp_stages/dg.h"
#include "samples/risp4ml/isp_stages/downscale.h"
#include "samples/risp4ml/isp_stages/gamma.h"
#include "samples/risp4ml/isp_stages/wbg.h"
#include "samples/risp4ml/pipeline/pipeline.h"
void isp_pipeline(ImageU8 *input, ImageU8 *output) {
Image *img_bayer =
image_new(input->num_channels, input->height, input->width);
// shift the 8bits wide input to 16bits (the processing pipeline bitwidth)
const uint32_t input_dimensions =
input->num_channels * input->height * input->width;
for (uint32_t i = 0; i < input_dimensions; ++i) {
img_bayer->data[i] = input->data[i] << kRawPipelineFraction; // 8
}
// black level offset (in-place)
blc_process(img_bayer);
// digital gain (in-place)
dg_process(img_bayer);
// white balance gain (in-place)
wbg_process(img_bayer);
// demosaic
Image *img_color =
image_new(output->num_channels, input->height, input->width);
demosaic_process(img_bayer, img_color);
image_delete(img_bayer);
// gamma correction (in-place)
gamma_process(img_color);
// downscaler
set_downscale_factor(img_color, output);
downscale_process(img_color, output);
image_delete(img_color);
}