debug: dump all buffers to path specified by CAMERA_DEBUG_CAPTURE
This commit is contained in:
parent
dce3a388b0
commit
04dd8c926f
@ -94,6 +94,7 @@ void camera_capture_add_callbacks(camera_t *camera, buffer_list_t *capture, link
|
||||
|
||||
int camera_configure_input(camera_t *camera);
|
||||
int camera_configure_pipeline(camera_t *camera, buffer_list_t *camera_capture);
|
||||
void camera_debug_capture(camera_t *camera, buffer_list_t *capture);
|
||||
|
||||
buffer_list_t *camera_configure_isp(camera_t *camera, buffer_list_t *src_capture);
|
||||
buffer_list_t *camera_configure_decoder(camera_t *camera, buffer_list_t *src_capture);
|
||||
|
40
device/camera/camera_debug.c
Normal file
40
device/camera/camera_debug.c
Normal file
@ -0,0 +1,40 @@
|
||||
#include "device/buffer.h"
|
||||
#include "device/buffer_list.h"
|
||||
#include "device/links.h"
|
||||
#include "device/camera/camera.h"
|
||||
#include "util/opts/log.h"
|
||||
#include "util/opts/fourcc.h"
|
||||
#include "output/output.h"
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
||||
static void debug_capture_on_buffer(buffer_t *buf)
|
||||
{
|
||||
if (!buf) {
|
||||
return;
|
||||
}
|
||||
|
||||
char path[256];
|
||||
sprintf(path, "%s/decoder_capture.%d.%s", getenv("CAMERA_DEBUG_CAPTURE"), buf->index, fourcc_to_string(buf->buf_list->fmt.format).buf);
|
||||
|
||||
FILE *fp = fopen(path, "wb");
|
||||
if (!fp) {
|
||||
return;
|
||||
}
|
||||
|
||||
fwrite(buf->start, 1, buf->used, fp);
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
static link_callbacks_t debug_capture_callbacks = {
|
||||
.name = "DEBUG-CAPTURE",
|
||||
.on_buffer = debug_capture_on_buffer
|
||||
};
|
||||
|
||||
void camera_debug_capture(camera_t *camera, buffer_list_t *capture)
|
||||
{
|
||||
if (getenv("CAMERA_DEBUG_CAPTURE")) {
|
||||
mkdir(getenv("CAMERA_DEBUG_CAPTURE"), 0755);
|
||||
camera_capture_add_callbacks(camera, capture, debug_capture_callbacks);
|
||||
}
|
||||
}
|
@ -12,8 +12,6 @@
|
||||
#include "output/rtsp/rtsp.h"
|
||||
#include "output/output.h"
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
||||
static unsigned decoder_formats[] =
|
||||
{
|
||||
// best quality
|
||||
@ -29,31 +27,6 @@ static unsigned decoder_formats[] =
|
||||
0
|
||||
};
|
||||
|
||||
static void decoder_debug_on_buffer(buffer_t *buf)
|
||||
{
|
||||
if (!buf) {
|
||||
return;
|
||||
}
|
||||
|
||||
static int index = 0;
|
||||
|
||||
char path[256];
|
||||
sprintf(path, "%s/decoder_capture.%d.%s", getenv("CAMERA_DECODER_DEBUG"), index++ % 10, fourcc_to_string(buf->buf_list->fmt.format).buf);
|
||||
|
||||
FILE *fp = fopen(path, "wb");
|
||||
if (!fp) {
|
||||
return;
|
||||
}
|
||||
|
||||
fwrite(buf->start, 1, buf->used, fp);
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
static link_callbacks_t decoder_debug_callbacks = {
|
||||
.name = "DECODER-DEBUG-CAPTURE",
|
||||
.on_buffer = decoder_debug_on_buffer
|
||||
};
|
||||
|
||||
buffer_list_t *camera_configure_decoder(camera_t *camera, buffer_list_t *src_capture)
|
||||
{
|
||||
unsigned chosen_format = 0;
|
||||
@ -73,12 +46,7 @@ buffer_list_t *camera_configure_decoder(camera_t *camera, buffer_list_t *src_cap
|
||||
buffer_list_t *decoder_capture = device_open_buffer_list_capture2(
|
||||
camera->decoder, NULL, decoder_output, chosen_format, true);
|
||||
|
||||
if (getenv("CAMERA_DECODER_DEBUG")) {
|
||||
mkdir(getenv("CAMERA_DECODER_DEBUG"), 0755);
|
||||
camera_capture_add_callbacks(camera, src_capture, decoder_debug_callbacks);
|
||||
camera_capture_add_callbacks(camera, decoder_capture, decoder_debug_callbacks);
|
||||
}
|
||||
|
||||
camera_debug_capture(camera, decoder_capture);
|
||||
camera_capture_add_output(camera, src_capture, decoder_output);
|
||||
|
||||
return decoder_capture;
|
||||
|
@ -164,5 +164,6 @@ int camera_configure_output(camera_t *camera, buffer_list_t *camera_capture, con
|
||||
|
||||
camera_capture_add_output(camera, src_capture, output);
|
||||
camera_capture_add_callbacks(camera, capture, callbacks);
|
||||
camera_debug_capture(camera, capture);
|
||||
return 0;
|
||||
}
|
||||
|
@ -46,6 +46,8 @@ int camera_configure_pipeline(camera_t *camera, buffer_list_t *camera_capture)
|
||||
{
|
||||
camera_capture->do_timestamps = true;
|
||||
|
||||
camera_debug_capture(camera, camera_capture);
|
||||
|
||||
if (camera_configure_output(camera, camera_capture, "SNAPSHOT", &camera->options.snapshot,
|
||||
snapshot_formats, snapshot_callbacks, &camera->codec_snapshot) < 0) {
|
||||
return -1;
|
||||
|
@ -151,6 +151,15 @@ int libcamera_buffer_list_dequeue(buffer_list_t *buf_list, buffer_t **bufp)
|
||||
uint64_t now_us = get_monotonic_time_us(NULL, NULL);
|
||||
|
||||
(*bufp)->captured_time_us = now_us - (boot_time_us - sensor_timestamp_us);
|
||||
(*bufp)->used = 0;
|
||||
|
||||
for (auto &bufferMap : (*bufp)->libcamera->request->buffers()) {
|
||||
auto frameBuffer = bufferMap.second;
|
||||
|
||||
for (auto const &plane : frameBuffer->metadata().planes()) {
|
||||
(*bufp)->used += plane.bytesused;
|
||||
}
|
||||
}
|
||||
|
||||
if (index == 0) {
|
||||
libcamera_buffer_dump_metadata(*bufp);
|
||||
|
Loading…
x
Reference in New Issue
Block a user