blob: 3b51c84468b90f3bba8835f24326d86a714043dd [file] [log] [blame]
/*
* Copyright (C) 2015-2020 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.
*/
#pragma once
#include <string.h>
#include <vector>
#include <string>
#include <linux/v4l2-subdev.h>
#include "CameraTypes.h"
#include "CameraBuffer.h"
namespace icamera {
/**
* global dump level
* This global variable is set from system properties
* It is used to control the type of frame dump
*/
extern int gDumpType;
extern char gDumpPath[50];
// Dump bit mask definition
enum {
// ISYS Buffer dump (bit[0-3])
DUMP_ISYS_BUFFER = 1 << 0,
// Reserve bit[1-3] for detailed buffer dump control
DUMP_JPEG_BUFFER = 1 << 3, // JPEG buffer
// ISYS PG/PAL/Stats dump (bit[4-7])
DUMP_ISYS_PAL = 1 << 4, // ISP param binary
DUMP_ISYS_PG = 1 << 5, // ISYS whole PG dump assisted by libiacss
DUMP_ISYS_ENCODED_STAT = 1 << 6, // p2p encoded statistics
DUMP_ISYS_AIQ_STAT = 1 << 7, // rgbs_grid format stats for AIQ use
// PSYS dump (bit[8-11])
DUMP_PSYS_OUTPUT_BUFFER = 1 << 8,
DUMP_PSYS_INTERM_BUFFER = 1 << 9, // dump Psys intermediate buffers like PreGDC output
// Reserve bit[10-11] for detailed buffer dump control
DUMP_AIQ_DVS_RESULT = 1 << 10, // dump dvs result
// PSYS PG/PAL/Stats dump (bit[12-15])
DUMP_PSYS_PAL = 1 << 12, // ISP param binary
DUMP_PSYS_PG = 1 << 13, // PSYS whole PG dump assisted by libiacss
DUMP_PSYS_AIQ_STAT = 1 << 14, // rgbs_grid format stats for AIQ use
DUMP_PSYS_DECODED_STAT = 1 << 15, // p2p decoded statistics
// Other dump
DUMP_MIPI_BUFFER = 1 << 16, // e.g. export cameraDump=0x10000
DUMP_UT_BUFFER = 1 << 17, // e.g. export cameraDump=0x20000
DUMP_EMBEDDED_METADATA = 1 << 18,
DUMP_DEINTERLACED_BUFFER = 1 << 19, // 0x80000 Decimal val 524288
DUMP_SW_IMG_PROC_OUTPUT = 1 << 20, // 0x100000 Decimal val 1048576
// Pipe executors' dump
DUMP_EXECUTOR_OUTPUT = 1 << 21, // 0x200000 Decimal val 2097152
// LTM output's dump
DUMP_LTM_OUTPUT = 1 << 22, // 0x400000 Decimal val 4194304
DUMP_AAL_OUTPUT = 1 << 23, // 0x800000 Decimal val 8388608
DUMP_AAL_INPUT = 1 << 24, // 0x1000000 Decimal val 16777216
};
enum {
DUMP_FORMAT_NORMAL = 1 << 0, // Normal format
DUMP_FORMAT_IQSTUDIO = 1 << 1, // IQStudio format
};
const int MAX_NAME_LEN = 256;
typedef enum {
M_NA,
M_SENSOR, // MIPI frame dump
M_ISYS, // ISYS param, payload, frame dump
M_PSYS, // PSYS param, payload, frame dump
M_DEINTR, // De-interlaced frame dump
M_SWIPOP, // Sw Image processor frame dump
} ModuleType_t;
typedef enum {
BIN_TYPE_GENERAL,
BIN_TYPE_STATISTIC,
BIN_TYPE_SENSOR_METADATA,
BIN_TYPE_BUFFER,
} BinType_t;
typedef struct {
const char* appendix;
} GeneralParam_t;
typedef struct {
int gridWidth;
int gridHeight;
const char* appendix;
} StatParam_t;
typedef struct {
int width;
int height;
int planeIdx;
int metaFormat;
} SensorMetadataParam_t;
typedef struct {
int width;
int height;
int format;
} BufferParam_t;
typedef struct {
BinType_t bType;
ModuleType_t mType;
long sequence;
union {
GeneralParam_t gParam;
StatParam_t sParam;
SensorMetadataParam_t mParam;
BufferParam_t bParam;
};
int sUsage;
} BinParam_t;
/**
* Dump files with formated file name, put under getDumpPath()
* Supported dump type:
* Image(RAW/YUV/RGB)
* PAL bin
* Decoded statistics
* Sensor Metadata
* File name format example:
* Path/cameraId_sensorName_isys(psys)_
* frame(pal/stats/)_sequence_resolution_appendix.suffix
*/
namespace CameraDump {
/**
* File dump control functions.
*/
void setDumpLevel(void);
bool isDumpTypeEnable(int dumpType);
bool isDumpFormatEnable(int dumpFormat);
void writeData(const void* data, int size, const char* fileName);
const char* getDumpPath(void);
/**
* Dump image according to CameraBuffer properties
*/
void dumpImage(int cameraId, const std::shared_ptr<CameraBuffer> &camBuffer,
ModuleType_t mType = M_NA, Port port = INVALID_PORT);
/**
* Dump any buffer to binary file
*/
void dumpBinary(int cameraId, const void *data, int size, BinParam_t *binParam);
}
} //namespace icamera