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.
178 lines
7.2 KiB
178 lines
7.2 KiB
/*
|
|
* Copyright Samsung Electronics Co.,LTD.
|
|
* Copyright (C) 2015 The Android Open Source Project
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
#ifndef __HARDWARE_SAMSUNG_EXYNOS_HWJPEGDECOMPRESSOR_H__
|
|
#define __HARDWARE_SAMSUNG_EXYNOS_HWJPEGDECOMPRESSOR_H__
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
|
|
/*
|
|
* hwjpeg_decompress_ptr - handle of decompressor instance
|
|
*/
|
|
typedef struct hwjpeg_decompressor_struct {
|
|
unsigned int image_width; /* width of the compressed image */
|
|
unsigned int image_height; /* height of the compressed image */
|
|
unsigned char num_components; /* number of components of the compressed image */
|
|
unsigned char chroma_h_samp_factor; /* horizontal chroma sampling factor of the compressed image */
|
|
unsigned char chroma_v_samp_factor; /* vertical chroma sampling factor of the compressed image */
|
|
unsigned char scale_factor; /* down-scaling factor during decompression: one of 1, 2, 4 and 8 */
|
|
|
|
unsigned int output_width; /* width of the output image (image_width/scale_factor) */
|
|
unsigned int output_height; /* height of the output image (image_height/scale_factor) */
|
|
__u32 output_format; /* 4CC style format identifier of the output image defined in videodev2.h */
|
|
} *hwjpeg_decompress_ptr;
|
|
|
|
/*
|
|
* hwjpeg_create_decompress - create an instance of decompressor
|
|
*
|
|
* @return: the handle of the decompressor instance. NULL on failure.
|
|
*
|
|
* The decompresson process starts from calling this function. The return value
|
|
* is the handle of the decompressor instance. Every step of the decompression
|
|
* process needs the handle. The handle should be destroyed with
|
|
* hwjpeg_destroy_decompress() when it is no longer required.
|
|
*/
|
|
hwjpeg_decompress_ptr hwjpeg_create_decompress(void);
|
|
|
|
/*
|
|
* hwjpeg_file_src - configure the path to a file of compressed JPEG stream
|
|
*
|
|
* @cinfo: decompressor instance handle
|
|
* @path: path to the file of compressed JPEG stream.
|
|
* It is assumed that EOI is at the end of the file.
|
|
* @return: false on failure
|
|
*/
|
|
bool hwjpeg_file_src(hwjpeg_decompress_ptr cinfo, const char *path);
|
|
|
|
/*
|
|
* hwjpeg_dmabuf_src - configure the buffer file descriptor that contains the compressed JPEG stream
|
|
*
|
|
* @cinfo: decompressor instance handle
|
|
* @infd: the file descriptor exported by ION of the buffer that contains the compressed JPEG stream
|
|
* @insize: the length in bytes of @infd. It is assumed that EOI is at the end of the buffer.
|
|
* @dummybytes: The available dummy bytes after @insize.
|
|
* @return: false on failure
|
|
*/
|
|
bool hwjpeg_dmabuf_src(hwjpeg_decompress_ptr cinfo, int infd, size_t insize, size_t dummybytes);
|
|
|
|
/*
|
|
* hwjpeg_mem_src - configure the buffer that contains the compressed JPEG stream
|
|
*
|
|
* @cinfo: decompressor instance handle
|
|
* @inbuffer: the address of the buffer that contains the compressed JPEG stream
|
|
* @insize: the length in bytes of @inbuffer. It is assumed that EOI is at the end of the buffer.
|
|
* @dummybytes: The available dummy bytes after @insize.
|
|
* @return: false on failure
|
|
*/
|
|
bool hwjpeg_mem_src(hwjpeg_decompress_ptr cinfo, unsigned char *inbuffer, size_t insize, size_t dummybytes);
|
|
|
|
/*
|
|
* hwjpeg_config_image_format - configure output image format
|
|
*
|
|
* @cinfo: decompressor instance handle
|
|
* @v4l2_pix_fmt: fourcc format identifier defined in linux/videodev2.h
|
|
*/
|
|
void hwjpeg_config_image_format(hwjpeg_decompress_ptr cinfo, __u32 v4l2_pix_fmt);
|
|
|
|
/*
|
|
* hwjpeg_mem_dst - configure the buffer to store decompressed image
|
|
*
|
|
* @cinfo: decompressor instance handle
|
|
* @outbuffer: The array of addresses of the buffers to stroe decompressed image
|
|
* The maximum number of elements of @outbuffer is 3. The number of elements
|
|
* of @outbuffer depends on the image format configured by hwjpeg_config_image_format().
|
|
* @outsize: The lengths in bytes of the buffers of @outbuffer.
|
|
* @num_buffers: The number of elements in @outsizes and @outbuffer
|
|
* @return: false on failure.
|
|
*/
|
|
bool hwjpeg_mem_dst(hwjpeg_decompress_ptr cinfo, unsigned char *outbuffer[], size_t outsize[], unsigned int num_buffers);
|
|
|
|
/*
|
|
* hwjpeg_dmabuf_dst - configure the buffer to store decompressed image
|
|
*
|
|
* @cinfo: decompressor instance handle
|
|
* @outfd: The array of file descriptors exported by ION of the buffers to stroe decompressed image
|
|
* The maximum number of elements of @outfd is 3. The number of elements of @outfd depends
|
|
* on the image format configured by hwjpeg_config_image_format().
|
|
* @outsizes: The lengths in bytes of the buffers of @outfd.
|
|
* @num_buffers: The number of elements in @outsizes and @outfd
|
|
* @return: false on failure.
|
|
*/
|
|
bool hwjpeg_dmabuf_dst(hwjpeg_decompress_ptr cinfo, int outfd[], size_t outsize[], unsigned int num_buffers);
|
|
|
|
/*
|
|
* hwjpeg_set_downscale_factor - configure the downscaling factor during decompression
|
|
*
|
|
* @cinfo: decompressor instance handle
|
|
* @factor: downscaling factor. @factor should be one of 1, 2, 4 and 8.
|
|
*
|
|
* Downscaling factor is the inverse number of the downscaling ratio. @cinfo->output_width and
|
|
* @cinfo->output_height is decided by @factor.
|
|
* - @cinfo->output_width = @cinfo->image_width / @factor
|
|
* - @cinfo->output_height = @cinfo->image_height / @factor
|
|
* Note that both of @cinfo->image_width / @factor and @cinfo->image_height / @factor
|
|
* should be also integers. The results should be also even number according to the
|
|
* output image format configured by hwjpeg_config_image_format().
|
|
* Otherwise, the decompression will fail.
|
|
*/
|
|
void hwjpeg_set_downscale_factor(hwjpeg_decompress_ptr cinfo, unsigned int factor);
|
|
|
|
/*
|
|
* hwjpeg_read_header - reads the headers of the compressed JPEG stream
|
|
*
|
|
* @cinfo: decompressor instance handle
|
|
* @return: false on failure.
|
|
*
|
|
* NOTE that the fields of hwjpeg_decompression_ptr is available after hwjpeg_read_header()
|
|
* returns true.
|
|
*/
|
|
bool hwjpeg_read_header(hwjpeg_decompress_ptr cinfo);
|
|
|
|
/*
|
|
* hwjpeg_has_enough_stream_buffer - Confirm if the stream buffer is enough
|
|
*
|
|
* @cinfo: decompressor instance handle
|
|
* @return: true if the stream buffer is enough to decompress by H/W
|
|
*
|
|
* This function should be called after hwjpeg_read_header() is called
|
|
* successfully.
|
|
*/
|
|
bool hwjpeg_has_enough_stream_buffer(hwjpeg_decompress_ptr cinfo);
|
|
|
|
/*
|
|
* hwjpeg_start_decompress - starts decompression
|
|
*
|
|
* @cinfo: decompressor instance handle
|
|
* @return: false on failure.
|
|
*
|
|
* This function blocks until the decompression finishes.
|
|
*/
|
|
bool hwjpeg_start_decompress(hwjpeg_decompress_ptr cinfo);
|
|
|
|
/*
|
|
* hwjpeg_destroy_decompress - releases all resources of the decompressor instance
|
|
*
|
|
* @cinfo: decompressor instance handle to destroy
|
|
*/
|
|
void hwjpeg_destroy_decompress(hwjpeg_decompress_ptr cinfo);
|
|
|
|
}; /* extern "C" */
|
|
#endif /* __cplusplus */
|
|
|
|
#endif /*__HARDWARE_SAMSUNG_EXYNOS7420_HWJPEGDECOMPRESSOR_H__*/
|