root/include/video/imx-ipu-image-convert.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0-or-later */
   2 /*
   3  * Copyright (C) 2012-2016 Mentor Graphics Inc.
   4  *
   5  * i.MX Queued image conversion support, with tiling and rotation.
   6  */
   7 #ifndef __IMX_IPU_IMAGE_CONVERT_H__
   8 #define __IMX_IPU_IMAGE_CONVERT_H__
   9 
  10 #include <video/imx-ipu-v3.h>
  11 
  12 struct ipu_image_convert_ctx;
  13 
  14 /**
  15  * struct ipu_image_convert_run - image conversion run request struct
  16  *
  17  * @ctx:        the conversion context
  18  * @in_phys:    dma addr of input image buffer for this run
  19  * @out_phys:   dma addr of output image buffer for this run
  20  * @status:     completion status of this run
  21  */
  22 struct ipu_image_convert_run {
  23         struct ipu_image_convert_ctx *ctx;
  24 
  25         dma_addr_t in_phys;
  26         dma_addr_t out_phys;
  27 
  28         int status;
  29 
  30         /* internal to image converter, callers don't touch */
  31         struct list_head list;
  32 };
  33 
  34 /**
  35  * ipu_image_convert_cb_t - conversion callback function prototype
  36  *
  37  * @run:        the completed conversion run pointer
  38  * @ctx:        a private context pointer for the callback
  39  */
  40 typedef void (*ipu_image_convert_cb_t)(struct ipu_image_convert_run *run,
  41                                        void *ctx);
  42 
  43 /**
  44  * ipu_image_convert_enum_format() - enumerate the image converter's
  45  *      supported input and output pixel formats.
  46  *
  47  * @index:      pixel format index
  48  * @fourcc:     v4l2 fourcc for this index
  49  *
  50  * Returns 0 with a valid index and fills in v4l2 fourcc, -EINVAL otherwise.
  51  *
  52  * In V4L2, drivers can call ipu_image_enum_format() in .enum_fmt.
  53  */
  54 int ipu_image_convert_enum_format(int index, u32 *fourcc);
  55 
  56 /**
  57  * ipu_image_convert_adjust() - adjust input/output images to IPU restrictions.
  58  *
  59  * @in:         input image format, adjusted on return
  60  * @out:        output image format, adjusted on return
  61  * @rot_mode:   rotation mode
  62  *
  63  * In V4L2, drivers can call ipu_image_convert_adjust() in .try_fmt.
  64  */
  65 void ipu_image_convert_adjust(struct ipu_image *in, struct ipu_image *out,
  66                               enum ipu_rotate_mode rot_mode);
  67 
  68 /**
  69  * ipu_image_convert_verify() - verify that input/output image formats
  70  *         and rotation mode meet IPU restrictions.
  71  *
  72  * @in:         input image format
  73  * @out:        output image format
  74  * @rot_mode:   rotation mode
  75  *
  76  * Returns 0 if the formats and rotation mode meet IPU restrictions,
  77  * -EINVAL otherwise.
  78  */
  79 int ipu_image_convert_verify(struct ipu_image *in, struct ipu_image *out,
  80                              enum ipu_rotate_mode rot_mode);
  81 
  82 /**
  83  * ipu_image_convert_prepare() - prepare a conversion context.
  84  *
  85  * @ipu:        the IPU handle to use for the conversions
  86  * @ic_task:    the IC task to use for the conversions
  87  * @in:         input image format
  88  * @out:        output image format
  89  * @rot_mode:   rotation mode
  90  * @complete:   run completion callback
  91  * @complete_context:   a context pointer for the completion callback
  92  *
  93  * Returns an opaque conversion context pointer on success, error pointer
  94  * on failure. The input/output formats and rotation mode must already meet
  95  * IPU retrictions.
  96  *
  97  * In V4L2, drivers should call ipu_image_convert_prepare() at streamon.
  98  */
  99 struct ipu_image_convert_ctx *
 100 ipu_image_convert_prepare(struct ipu_soc *ipu, enum ipu_ic_task ic_task,
 101                           struct ipu_image *in, struct ipu_image *out,
 102                           enum ipu_rotate_mode rot_mode,
 103                           ipu_image_convert_cb_t complete,
 104                           void *complete_context);
 105 
 106 /**
 107  * ipu_image_convert_unprepare() - unprepare a conversion context.
 108  *
 109  * @ctx: the conversion context pointer to unprepare
 110  *
 111  * Aborts any active or pending conversions for this context and
 112  * frees the context. Any currently active or pending runs belonging
 113  * to this context are returned via the completion callback with an
 114  * error run status.
 115  *
 116  * In V4L2, drivers should call ipu_image_convert_unprepare() at
 117  * streamoff.
 118  */
 119 void ipu_image_convert_unprepare(struct ipu_image_convert_ctx *ctx);
 120 
 121 /**
 122  * ipu_image_convert_queue() - queue a conversion run
 123  *
 124  * @run: the run request pointer
 125  *
 126  * ipu_image_convert_run must be dynamically allocated (_not_ as a local
 127  * var) by callers and filled in with a previously prepared conversion
 128  * context handle and the dma addr's of the input and output image buffers
 129  * for this conversion run.
 130  *
 131  * When this conversion completes, the run pointer is returned via the
 132  * completion callback. The caller is responsible for freeing the run
 133  * object after it completes.
 134  *
 135  * In V4L2, drivers should call ipu_image_convert_queue() while
 136  * streaming to queue the conversion of a received input buffer.
 137  * For example mem2mem devices this would be called in .device_run.
 138  */
 139 int ipu_image_convert_queue(struct ipu_image_convert_run *run);
 140 
 141 /**
 142  * ipu_image_convert_abort() - abort conversions
 143  *
 144  * @ctx: the conversion context pointer
 145  *
 146  * This will abort any active or pending conversions for this context.
 147  * Any currently active or pending runs belonging to this context are
 148  * returned via the completion callback with an error run status.
 149  */
 150 void ipu_image_convert_abort(struct ipu_image_convert_ctx *ctx);
 151 
 152 /**
 153  * ipu_image_convert() - asynchronous image conversion request
 154  *
 155  * @ipu:        the IPU handle to use for the conversion
 156  * @ic_task:    the IC task to use for the conversion
 157  * @in:         input image format
 158  * @out:        output image format
 159  * @rot_mode:   rotation mode
 160  * @complete:   run completion callback
 161  * @complete_context:   a context pointer for the completion callback
 162  *
 163  * Request a single image conversion. Returns the run that has been queued.
 164  * A conversion context is automatically created and is available in run->ctx.
 165  * As with ipu_image_convert_prepare(), the input/output formats and rotation
 166  * mode must already meet IPU retrictions.
 167  *
 168  * On successful return the caller can queue more run requests if needed, using
 169  * the prepared context in run->ctx. The caller is responsible for unpreparing
 170  * the context when no more conversion requests are needed.
 171  */
 172 struct ipu_image_convert_run *
 173 ipu_image_convert(struct ipu_soc *ipu, enum ipu_ic_task ic_task,
 174                   struct ipu_image *in, struct ipu_image *out,
 175                   enum ipu_rotate_mode rot_mode,
 176                   ipu_image_convert_cb_t complete,
 177                   void *complete_context);
 178 
 179 /**
 180  * ipu_image_convert_sync() - synchronous single image conversion request
 181  *
 182  * @ipu:        the IPU handle to use for the conversion
 183  * @ic_task:    the IC task to use for the conversion
 184  * @in:         input image format
 185  * @out:        output image format
 186  * @rot_mode:   rotation mode
 187  *
 188  * Carry out a single image conversion. Returns when the conversion
 189  * completes. The input/output formats and rotation mode must already
 190  * meet IPU retrictions. The created context is automatically unprepared
 191  * and the run freed on return.
 192  */
 193 int ipu_image_convert_sync(struct ipu_soc *ipu, enum ipu_ic_task ic_task,
 194                            struct ipu_image *in, struct ipu_image *out,
 195                            enum ipu_rotate_mode rot_mode);
 196 
 197 
 198 #endif /* __IMX_IPU_IMAGE_CONVERT_H__ */

/* [<][>][^][v][top][bottom][index][help] */