/* * 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 "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]; }; 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; int width; int height; int num_planes; int scaled_width; int scaled_height; 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