This illustrates the debayer usage. To run the example, please, pass the following arguments:
#include "framereader.hpp"
#include <iostream>
#include <libcudaisp/cudabufferparams.hpp>
#include <libcudaisp/debayerparams.hpp>
#include <libcudaisp/ibackend.hpp>
#include <memory>
#include <string>
int main(int argc, char **argv) {
bool ret = true;
if (argc != 5) {
std::cerr << "Error: requires 4 arguments"
<< "\tinput_path output_path width height" << std::endl;
return -1;
}
int buffer_width = atoi(argv[3]);
int buffer_height = atoi(argv[4]);
const int output_num_channels = 3;
int input_buffer_planes = 1;
std::array<int, rr::Buffer::kMaxPlanes> input_buffer_strides = {buffer_width,
0, 0, 0};
size_t input_buffer_size =
buffer_height * buffer_width;
int output_buffer_planes = 1;
std::array<int, rr::Buffer::kMaxPlanes> output_buffer_strides = {
output_num_channels * buffer_width, 0, 0, 0};
size_t output_buffer_size =
buffer_height * buffer_width * output_num_channels;
auto isp_debayer =
auto memory_params = std::make_shared<rr::CudaBufferParams>();
auto input_buffer =
isp_backend->CreateBuffer(input_buffer_size, memory_params);
auto output_buffer =
isp_backend->CreateBuffer(output_buffer_size, memory_params);
rrerr = input_buffer->SetBufferInfo(input_buffer_format, input_buffer_planes,
input_buffer_strides, buffer_width,
buffer_height);
std::cerr <<
"Error allocating the input buffer: " << rrerr.
GetDescription()
<< std::endl;
return -1;
}
rrerr = output_buffer->SetBufferInfo(
output_buffer_format, output_buffer_planes, output_buffer_strides,
buffer_width, buffer_height);
std::cerr << "Error allocating the output buffer: "
return -1;
}
ret = ReadFrame(argv[1], input_buffer->data(), input_buffer_size);
if (!ret) {
std::cerr << "Cannot read frame" << std::endl;
return -1;
}
auto params = std::make_shared<rr::DebayerParams>();
rrerr = isp_debayer->Apply(input_buffer.get(), output_buffer.get(), params,
false);
std::cerr <<
"Error while applying debayering: " + rrerr.
GetDescription()
<< std::endl;
return -1;
}
rrerr = isp_backend->Synchronize();
<< std::endl;
return -1;
}
ret = WriteFrame(argv[2], output_buffer->data(), output_buffer_size);
if (!ret) {
std::cerr << "Cannot write frame" << std::endl;
return -1;
}
return 0;
}