blob: eddb08ca9b92a95a4e4828a7a2d97979b9031a05 [file] [log] [blame]
/*
* Copyright@ Samsung Electronics Co. LTD
*
* 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 <linux/videodev2.h>
#define JPEG_DEC_NODE "/dev/video11"
#define JPEG_ENC_NODE "/dev/video12"
#define JPEG_MAX_PLANE_CNT 3
#define JPEG_DEC_OUT_BYTE_ALIGN 8
//#define JPEG_PERF_MEAS
#ifdef JPEG_PERF_MEAS
#define JPEG_PERF_DEFINE(n) \
struct timeval time_start_##n, time_stop_##n; unsigned long log_time_##n = 0;
#define JPEG_PERF_START(n) \
gettimeofday(&time_start_##n, NULL);
#define JPEG_PERF_END(n) \
gettimeofday(&time_stop_##n, NULL); log_time_##n = measure_time(&time_start_##n, &time_stop_##n);
#define JPEG_PERF(n) \
log_time_##n
#else
#define JPEG_PERF_DEFINE(n)
#define JPEG_PERF_START(n)
#define JPEG_PERF_END(n)
#define JPEG_PERF(n)
#endif
enum jpeg_ret_type {
JPEG_FAIL,
JPEG_OK,
JPEG_ENCODE_FAIL,
JPEG_ENCODE_OK,
JPEG_DECODE_FAIL,
JPEG_DECODE_OK,
JPEG_OUT_OF_MEMORY,
JPEG_UNKNOWN_ERROR
};
enum jpeg_quality_level {
QUALITY_LEVEL_1 = 0, /* high */
QUALITY_LEVEL_2,
QUALITY_LEVEL_3,
QUALITY_LEVEL_4, /* low */
};
enum jpeg_mode {
JPEG_ENCODE,
JPEG_DECODE
};
struct jpeg_buf {
int num_planes;
void *start[JPEG_MAX_PLANE_CNT];
int length[JPEG_MAX_PLANE_CNT];
enum v4l2_memory memory;
enum v4l2_buf_type buf_type; // Caller need not set this
};
struct jpeg_buf_info {
int num_planes;
enum v4l2_memory memory;
enum v4l2_buf_type buf_type;
int reserved[4];
};
struct jpeg_pixfmt {
int in_fmt;
int out_fmt;
int reserved[4];
};
struct jpeg_config {
enum jpeg_mode mode;
enum jpeg_quality_level enc_qual; // for encoding
int width;
int height;
int num_planes;
int scaled_width; // 1/2, 1/4 scaling for decoding
int scaled_height; // 1/2, 1/4 scaling for decoding
int sizeJpeg;
union {
struct jpeg_pixfmt enc_fmt;
struct jpeg_pixfmt dec_fmt;
} pix;
int reserved[8];
};
#ifdef __cplusplus
extern "C" {
#endif
int jpeghal_dec_init();
int jpeghal_enc_init();
int jpeghal_dec_setconfig(int fd, struct jpeg_config *config);
int jpeghal_enc_setconfig(int fd, struct jpeg_config *config);
int jpeghal_dec_getconfig(int fd, struct jpeg_config *config);
int jpeghal_enc_getconfig(int fd, struct jpeg_config *config);
int jpeghal_set_inbuf(int fd, struct jpeg_buf *buf);
int jpeghal_set_outbuf(int fd, struct jpeg_buf *buf);
int jpeghal_dec_exe(int fd, struct jpeg_buf *in_buf, struct jpeg_buf *out_buf);
int jpeghal_enc_exe(int fd, struct jpeg_buf *in_buf, struct jpeg_buf *out_buf);
int jpeghal_deinit(int fd, struct jpeg_buf *in_buf, struct jpeg_buf *out_buf);
int jpeghal_s_ctrl(int fd, int cid, int value);
int jpeghal_g_ctrl(int fd, int id);
unsigned long measure_time(struct timeval *start, struct timeval *stop);
#ifdef __cplusplus
}
#endif