You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
3.4 KiB
136 lines
3.4 KiB
13 years ago
|
/*
|
||
|
* 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
|