linux/drivers/media/platform/s5p-jpeg/jpeg-core.h
<<
>>
Prefs
   1/* linux/drivers/media/platform/s5p-jpeg/jpeg-core.h
   2 *
   3 * Copyright (c) 2011 Samsung Electronics Co., Ltd.
   4 *              http://www.samsung.com
   5 *
   6 * Author: Andrzej Pietrasiewicz <andrzej.p@samsung.com>
   7 *
   8 * This program is free software; you can redistribute it and/or modify
   9 * it under the terms of the GNU General Public License version 2 as
  10 * published by the Free Software Foundation.
  11 */
  12
  13#ifndef JPEG_CORE_H_
  14#define JPEG_CORE_H_
  15
  16#include <media/v4l2-device.h>
  17#include <media/v4l2-fh.h>
  18#include <media/v4l2-ctrls.h>
  19
  20#define S5P_JPEG_M2M_NAME               "s5p-jpeg"
  21
  22/* JPEG compression quality setting */
  23#define S5P_JPEG_COMPR_QUAL_BEST        0
  24#define S5P_JPEG_COMPR_QUAL_WORST       3
  25
  26/* JPEG RGB to YCbCr conversion matrix coefficients */
  27#define S5P_JPEG_COEF11                 0x4d
  28#define S5P_JPEG_COEF12                 0x97
  29#define S5P_JPEG_COEF13                 0x1e
  30#define S5P_JPEG_COEF21                 0x2c
  31#define S5P_JPEG_COEF22                 0x57
  32#define S5P_JPEG_COEF23                 0x83
  33#define S5P_JPEG_COEF31                 0x83
  34#define S5P_JPEG_COEF32                 0x6e
  35#define S5P_JPEG_COEF33                 0x13
  36
  37/* a selection of JPEG markers */
  38#define TEM                             0x01
  39#define SOF0                            0xc0
  40#define RST                             0xd0
  41#define SOI                             0xd8
  42#define EOI                             0xd9
  43#define DHP                             0xde
  44
  45/* Flags that indicate a format can be used for capture/output */
  46#define MEM2MEM_CAPTURE                 (1 << 0)
  47#define MEM2MEM_OUTPUT                  (1 << 1)
  48
  49/**
  50 * struct s5p_jpeg - JPEG IP abstraction
  51 * @lock:               the mutex protecting this structure
  52 * @slock:              spinlock protecting the device contexts
  53 * @v4l2_dev:           v4l2 device for mem2mem mode
  54 * @vfd_encoder:        video device node for encoder mem2mem mode
  55 * @vfd_decoder:        video device node for decoder mem2mem mode
  56 * @m2m_dev:            v4l2 mem2mem device data
  57 * @regs:               JPEG IP registers mapping
  58 * @irq:                JPEG IP irq
  59 * @clk:                JPEG IP clock
  60 * @dev:                JPEG IP struct device
  61 * @alloc_ctx:          videobuf2 memory allocator's context
  62 */
  63struct s5p_jpeg {
  64        struct mutex            lock;
  65        spinlock_t              slock;
  66
  67        struct v4l2_device      v4l2_dev;
  68        struct video_device     *vfd_encoder;
  69        struct video_device     *vfd_decoder;
  70        struct v4l2_m2m_dev     *m2m_dev;
  71
  72        void __iomem            *regs;
  73        unsigned int            irq;
  74        struct clk              *clk;
  75        struct device           *dev;
  76        void                    *alloc_ctx;
  77};
  78
  79/**
  80 * struct jpeg_fmt - driver's internal color format data
  81 * @name:       format descritpion
  82 * @fourcc:     the fourcc code, 0 if not applicable
  83 * @depth:      number of bits per pixel
  84 * @colplanes:  number of color planes (1 for packed formats)
  85 * @h_align:    horizontal alignment order (align to 2^h_align)
  86 * @v_align:    vertical alignment order (align to 2^v_align)
  87 * @types:      types of queue this format is applicable to
  88 */
  89struct s5p_jpeg_fmt {
  90        char    *name;
  91        u32     fourcc;
  92        int     depth;
  93        int     colplanes;
  94        int     h_align;
  95        int     v_align;
  96        u32     types;
  97};
  98
  99/**
 100 * s5p_jpeg_q_data - parameters of one queue
 101 * @fmt:        driver-specific format of this queue
 102 * @w:          image width
 103 * @h:          image height
 104 * @size:       image buffer size in bytes
 105 */
 106struct s5p_jpeg_q_data {
 107        struct s5p_jpeg_fmt     *fmt;
 108        u32                     w;
 109        u32                     h;
 110        u32                     size;
 111};
 112
 113/**
 114 * s5p_jpeg_ctx - the device context data
 115 * @jpeg:               JPEG IP device for this context
 116 * @mode:               compression (encode) operation or decompression (decode)
 117 * @compr_quality:      destination image quality in compression (encode) mode
 118 * @m2m_ctx:            mem2mem device context
 119 * @out_q:              source (output) queue information
 120 * @cap_fmt:            destination (capture) queue queue information
 121 * @hdr_parsed:         set if header has been parsed during decompression
 122 * @ctrl_handler:       controls handler
 123 */
 124struct s5p_jpeg_ctx {
 125        struct s5p_jpeg         *jpeg;
 126        unsigned int            mode;
 127        unsigned short          compr_quality;
 128        unsigned short          restart_interval;
 129        unsigned short          subsampling;
 130        struct v4l2_m2m_ctx     *m2m_ctx;
 131        struct s5p_jpeg_q_data  out_q;
 132        struct s5p_jpeg_q_data  cap_q;
 133        struct v4l2_fh          fh;
 134        bool                    hdr_parsed;
 135        struct v4l2_ctrl_handler ctrl_handler;
 136};
 137
 138/**
 139 * s5p_jpeg_buffer - description of memory containing input JPEG data
 140 * @size:       buffer size
 141 * @curr:       current position in the buffer
 142 * @data:       pointer to the data
 143 */
 144struct s5p_jpeg_buffer {
 145        unsigned long size;
 146        unsigned long curr;
 147        unsigned long data;
 148};
 149
 150#endif /* JPEG_CORE_H */
 151