Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright © 2010 Intel Corporation
  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.  *    Li Xiaowei <xiaowei.a.li@intel.com>
  26.  *
  27.  */
  28.  
  29. #ifndef _GEN75_VPP_VEBOX_H
  30. #define _GEN75_VPP_VEBOX_H
  31.  
  32. #include <xf86drm.h>
  33. #include <drm.h>
  34. #include <i915_drm.h>
  35. #include <intel_bufmgr.h>
  36. #include <va/va_vpp.h>
  37. #include "i965_drv_video.h"
  38.  
  39. #include "i965_post_processing.h"
  40.  
  41. #define INPUT_SURFACE  0
  42. #define OUTPUT_SURFACE 1
  43.  
  44. #define VPP_DNDI_DN        0x00000001
  45. #define VPP_DNDI_DI        0x00000002
  46. #define VPP_DNDI_MASK      0x000000ff
  47. #define VPP_IECP_STD_STE   0x00000100
  48. #define VPP_IECP_ACE       0x00000200
  49. #define VPP_IECP_TCC       0x00000400
  50. #define VPP_IECP_PRO_AMP   0x00000800
  51. #define VPP_IECP_CSC       0x00001000
  52. #define VPP_IECP_AOI       0x00002000
  53. #define VPP_IECP_MASK      0x0000ff00
  54. #define MAX_FILTER_SUM     8
  55.  
  56. #define PRE_FORMAT_CONVERT      0x01
  57. #define POST_FORMAT_CONVERT     0x02
  58. #define POST_SCALING_CONVERT    0x04
  59. #define POST_COPY_CONVERT       0x08
  60.  
  61. enum {
  62.     FRAME_IN_CURRENT = 0,
  63.     FRAME_IN_PREVIOUS,
  64.     FRAME_IN_STMM,
  65.     FRAME_OUT_STMM,
  66.     FRAME_OUT_CURRENT_DN,
  67.     FRAME_OUT_CURRENT,
  68.     FRAME_OUT_PREVIOUS,
  69.     FRAME_OUT_STATISTIC,
  70.     FRAME_STORE_COUNT,
  71. };
  72.  
  73. enum SURFACE_FORMAT{
  74.     YCRCB_NORMAL = 0,
  75.     YCRCB_SWAPUVY,
  76.     YCRCB_SWAPUV,
  77.     YCRCB_SWAPY,
  78.     PLANAR_420_8,  //NV12
  79.     PACKED_444A_8,
  80.     PACKED_422_16,
  81.     R10G10B10A2_UNORM_SRGB,
  82.     R8G8B8A8_UNORM_SRGB,
  83.     PACKED_444_16,
  84.     PLANAR_422_16,
  85.     Y8_UNORM,
  86.     PLANAR_420_16,
  87.     R16G16B16A16,
  88.     SURFACE_FORMAT_SUM
  89. };
  90.  
  91. typedef struct veb_frame_store {
  92.     struct object_surface *obj_surface;
  93.     VASurfaceID surface_id; /* always relative to the input surface */
  94.     unsigned int is_internal_surface : 1;
  95.     unsigned int is_scratch_surface : 1;
  96. } VEBFrameStore;
  97.  
  98. typedef struct veb_buffer {
  99.     dri_bo  *bo;
  100.     void *  ptr;
  101.     unsigned char  valid;
  102. } VEBBuffer;
  103.  
  104. struct intel_vebox_context
  105. {
  106.     struct intel_batchbuffer *batch;
  107.  
  108.     struct object_surface *surface_input_object;
  109.     struct object_surface *surface_output_object;
  110.     VASurfaceID surface_input_vebox;
  111.     struct object_surface *surface_input_vebox_object;    
  112.     VASurfaceID surface_output_vebox;
  113.     struct object_surface *surface_output_vebox_object;
  114.     VASurfaceID surface_output_scaled;
  115.     struct object_surface *surface_output_scaled_object;
  116.  
  117.     unsigned int fourcc_input;
  118.     unsigned int fourcc_output;
  119.  
  120.     int width_input;
  121.     int height_input;
  122.     int width_output;
  123.     int height_output;
  124.  
  125.     VEBFrameStore frame_store[FRAME_STORE_COUNT];
  126.  
  127.     VEBBuffer dndi_state_table;
  128.     VEBBuffer iecp_state_table;
  129.     VEBBuffer gamut_state_table;
  130.     VEBBuffer vertex_state_table;
  131.  
  132.     unsigned int  filters_mask;
  133.     int current_output;
  134.     int current_output_type; /* 0:Both, 1:Previous, 2:Current */
  135.  
  136.     VAProcPipelineParameterBuffer * pipeline_param;
  137.     void * filter_dn;
  138.     void * filter_di;
  139.     void * filter_iecp_std;
  140.     void * filter_iecp_ace;
  141.     void * filter_iecp_tcc;
  142.     void * filter_iecp_amp;
  143.  
  144.     unsigned int  filter_iecp_amp_num_elements;
  145.     unsigned char format_convert_flags;
  146.  
  147.     /* Temporary flags live until the current picture is processed */
  148.     unsigned int is_iecp_enabled        : 1;
  149.     unsigned int is_dn_enabled          : 1;
  150.     unsigned int is_di_enabled          : 1;
  151.     unsigned int is_di_adv_enabled      : 1;
  152.     unsigned int is_first_frame         : 1;
  153.     unsigned int is_second_field        : 1;
  154. };
  155.  
  156. VAStatus gen75_vebox_process_picture(VADriverContextP ctx,
  157.                          struct intel_vebox_context *proc_ctx);
  158.  
  159. void gen75_vebox_context_destroy(VADriverContextP ctx,
  160.                           struct intel_vebox_context *proc_ctx);
  161.  
  162. struct intel_vebox_context * gen75_vebox_context_init(VADriverContextP ctx);
  163.  
  164. VAStatus gen8_vebox_process_picture(VADriverContextP ctx,
  165.                          struct intel_vebox_context *proc_ctx);
  166.  
  167. VAStatus gen9_vebox_process_picture(VADriverContextP ctx,
  168.                          struct intel_vebox_context *proc_ctx);
  169.  
  170. #endif
  171.