summaryrefslogtreecommitdiffstats
path: root/exynos4/hal/include/jpeg_hal.h
diff options
context:
space:
mode:
Diffstat (limited to 'exynos4/hal/include/jpeg_hal.h')
-rw-r--r--exynos4/hal/include/jpeg_hal.h137
1 files changed, 137 insertions, 0 deletions
diff --git a/exynos4/hal/include/jpeg_hal.h b/exynos4/hal/include/jpeg_hal.h
new file mode 100644
index 0000000..5c55592
--- /dev/null
+++ b/exynos4/hal/include/jpeg_hal.h
@@ -0,0 +1,137 @@
+/*
+ * 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];
+ 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