Home | History | Annotate | Download | only in src
      1 /*
      2  * Copyright (c) 2011 Intel Corporation. All Rights Reserved.
      3  *
      4  * Permission is hereby granted, free of charge, to any person obtaining a
      5  * copy of this software and associated documentation files (the
      6  * "Software"), to deal in the Software without restriction, including
      7  * without limitation the rights to use, copy, modify, merge, publish,
      8  * distribute, sub license, and/or sell copies of the Software, and to
      9  * permit persons to whom the Software is furnished to do so, subject to
     10  * the following conditions:
     11  *
     12  * The above copyright notice and this permission notice (including the
     13  * next paragraph) shall be included in all copies or substantial portions
     14  * of the Software.
     15  *
     16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
     17  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
     19  * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
     20  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
     21  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
     22  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     23  *
     24  * Authors:
     25  *    Binglin Chen <binglin.chen (at) intel.com>
     26  *
     27  */
     28 
     29 #ifndef _VSP_VPP_H_
     30 #define _VSP_VPP_H_
     31 
     32 #include "psb_drv_video.h"
     33 #include "vsp_fw.h"
     34 
     35 #define CONTEXT_VPP_ID 0
     36 #define CONTEXT_VP8_ID 1
     37 #define CONTEXT_COMPOSE_ID 5
     38 
     39 struct context_VPP_s {
     40 	object_context_p obj_context; /* back reference */
     41 
     42 	uint32_t profile; // ENTDEC BE_PROFILE & FE_PROFILE
     43 	uint32_t profile_idc; // BE_PROFILEIDC
     44 
     45 	struct psb_buffer_s *context_buf;
     46 	struct psb_buffer_s *intermediate_buf;
     47 
     48 	VABufferID *filters;
     49 	unsigned int num_filters;
     50 
     51 	enum vsp_format format;
     52 
     53 	object_buffer_p filter_buf[VssProcPipelineMaxNumFilters];
     54 	object_buffer_p frc_buf;
     55 
     56 	unsigned int param_sz;
     57 	unsigned int pic_param_sz;
     58 	unsigned int pic_param_offset;
     59 	unsigned int end_param_sz;
     60 	unsigned int end_param_offset;
     61 	unsigned int pipeline_param_sz;
     62 	unsigned int pipeline_param_offset;
     63 	unsigned int denoise_param_sz;
     64 	unsigned int denoise_param_offset;
     65 	unsigned int enhancer_param_sz;
     66 	unsigned int enhancer_param_offset;
     67 	unsigned int sharpen_param_sz;
     68 	unsigned int sharpen_param_offset;
     69 	unsigned int frc_param_sz;
     70 	unsigned int frc_param_offset;
     71 	unsigned int seq_param_sz;
     72 	unsigned int seq_param_offset;
     73 	unsigned int ref_param_sz;
     74 	unsigned int ref_param_offset;
     75 	unsigned int compose_param_sz;
     76 	unsigned int compose_param_offset;
     77 	struct VssProcDenoiseParameterBuffer denoise_deblock_param;
     78 	struct VssProcColorEnhancementParameterBuffer enhancer_param;
     79 	struct VssProcSharpenParameterBuffer sharpen_param;
     80 	//used for vp8 only
     81        unsigned int max_frame_size;
     82        unsigned int vp8_seq_cmd_send;
     83        unsigned int re_send_seq_params;
     84        unsigned int temporal_layer_number;
     85        unsigned int frame_rate[3];
     86         struct VssVp8encSequenceParameterBuffer vp8_seq_param;
     87 };
     88 
     89 typedef struct context_VPP_s *context_VPP_p;
     90 
     91 extern struct format_vtable_s vsp_VPP_vtable;
     92 
     93 /**
     94  * Queries video processing filters.
     95  *
     96  * This function returns the list of video processing filters supported
     97  * by the driver. The filters array is allocated by the user and
     98  * num_filters shall be initialized to the number of allocated
     99  * elements in that array. Upon successful return, the actual number
    100  * of filters will be overwritten into num_filters. Otherwise,
    101  * VA_STATUS_ERROR_MAX_NUM_EXCEEDED is returned and num_filters
    102  * is adjusted to the number of elements that would be returned if enough
    103  * space was available.
    104  *
    105  * The list of video processing filters supported by the driver shall
    106  * be ordered in the way they can be iteratively applied. This is needed
    107  * for both correctness, i.e. some filters would not mean anything if
    108  * applied at the beginning of the pipeline; but also for performance
    109  * since some filters can be applied in a single pass (e.g. noise
    110  * reduction + deinterlacing).
    111  *
    112  */
    113 VAStatus vsp_QueryVideoProcFilters(
    114         VADriverContextP    ctx,
    115         VAContextID         context,
    116         VAProcFilterType   *filters,
    117         unsigned int       *num_filters
    118 	);
    119 
    120 /**
    121  * Queries video filter capabilities.
    122  *
    123  * This function returns the list of capabilities supported by the driver
    124  * for a specific video filter. The filter_caps array is allocated by
    125  * the user and num_filter_caps shall be initialized to the number
    126  * of allocated elements in that array. Upon successful return, the
    127  * actual number of filters will be overwritten into num_filter_caps.
    128  * Otherwise, VA_STATUS_ERROR_MAX_NUM_EXCEEDED is returned and
    129  * num_filter_caps is adjusted to the number of elements that would be
    130  * returned if enough space was available.
    131  *
    132  */
    133 VAStatus vsp_QueryVideoProcFilterCaps(
    134         VADriverContextP    ctx,
    135         VAContextID         context,
    136         VAProcFilterType    type,
    137         void               *filter_caps,
    138         unsigned int       *num_filter_caps
    139 	);
    140 
    141 /**
    142  * Queries video processing pipeline capabilities.
    143  *
    144  * This function returns the video processing pipeline capabilities. The
    145  * filters array defines the video processing pipeline and is an array
    146  * of buffers holding filter parameters.
    147  *
    148  * Note: the VAProcPipelineCaps structure contains user-provided arrays.
    149  * If non-NULL, the corresponding num_* fields shall be filled in on
    150  * input with the number of elements allocated. Upon successful return,
    151  * the actual number of elements will be overwritten into the num_*
    152  * fields. Otherwise, VA_STATUS_ERROR_MAX_NUM_EXCEEDED is returned
    153  * and num_* fields are adjusted to the number of elements that would
    154  * be returned if enough space was available.
    155  *
    156  */
    157 VAStatus vsp_QueryVideoProcPipelineCaps(
    158 	VADriverContextP    ctx,
    159         VAContextID         context,
    160         VABufferID         *filters,
    161         unsigned int        num_filters,
    162         VAProcPipelineCaps *pipeline_caps
    163     );
    164 
    165 #endif /* _VSS_VPP_H_ */
    166