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_IECP_STD_STE   0x00000100
  47. #define VPP_IECP_ACE       0x00000200
  48. #define VPP_IECP_TCC       0x00000400
  49. #define VPP_IECP_PRO_AMP   0x00000800
  50. #define VPP_IECP_CSC       0x00001000
  51. #define VPP_IECP_AOI       0x00002000
  52. #define MAX_FILTER_SUM     8
  53.  
  54. #define PRE_FORMAT_CONVERT      0x01
  55. #define POST_FORMAT_CONVERT     0x02
  56. #define POST_SCALING_CONVERT    0x04
  57. #define POST_COPY_CONVERT       0x08
  58.  
  59. enum {
  60.     FRAME_IN_CURRENT = 0,
  61.     FRAME_IN_PREVIOUS,
  62.     FRAME_IN_STMM,
  63.     FRAME_OUT_STMM,
  64.     FRAME_OUT_CURRENT_DN,
  65.     FRAME_OUT_CURRENT,
  66.     FRAME_OUT_PREVIOUS,
  67.     FRAME_OUT_STATISTIC,
  68.     FRAME_STORE_SUM,
  69. };
  70.  
  71. enum SURFACE_FORMAT{
  72.     YCRCB_NORMAL = 0,
  73.     YCRCB_SWAPUVY,
  74.     YCRCB_SWAPUV,
  75.     YCRCB_SWAPY,
  76.     PLANAR_420_8,  //NV12
  77.     PACKED_444A_8,
  78.     PACKED_422_16,
  79.     R10G10B10A2_UNORM_SRGB,
  80.     R8G8B8A8_UNORM_SRGB,
  81.     PACKED_444_16,
  82.     PLANAR_422_16,
  83.     Y8_UNORM,
  84.     PLANAR_420_16,
  85.     R16G16B16A16,
  86.     SURFACE_FORMAT_SUM
  87. };
  88.  
  89. typedef struct veb_frame_store {
  90.     VASurfaceID surface_id;
  91.     unsigned int is_internal_surface;
  92.     struct object_surface *obj_surface;
  93. } VEBFrameStore;
  94.  
  95. typedef struct veb_buffer {
  96.     dri_bo  *bo;
  97.     void *  ptr;
  98.     unsigned char  valid;
  99. } VEBBuffer;
  100.  
  101. struct intel_vebox_context
  102. {
  103.     struct intel_batchbuffer *batch;
  104.  
  105.     struct object_surface *surface_input_object;
  106.     struct object_surface *surface_output_object;
  107.     VASurfaceID surface_input_vebox;
  108.     struct object_surface *surface_input_vebox_object;    
  109.     VASurfaceID surface_output_vebox;
  110.     struct object_surface *surface_output_vebox_object;
  111.     VASurfaceID surface_output_scaled;
  112.     struct object_surface *surface_output_scaled_object;
  113.  
  114.     unsigned int fourcc_input;
  115.     unsigned int fourcc_output;
  116.  
  117.     int width_input;
  118.     int height_input;
  119.     int width_output;
  120.     int height_output;
  121.  
  122.     VEBFrameStore frame_store[FRAME_STORE_SUM];
  123.  
  124.     VEBBuffer dndi_state_table;
  125.     VEBBuffer iecp_state_table;
  126.     VEBBuffer gamut_state_table;
  127.     VEBBuffer vertex_state_table;
  128.  
  129.     unsigned int  filters_mask;
  130.     int frame_order;
  131.     int current_output;
  132.  
  133.     VAProcPipelineParameterBuffer * pipeline_param;
  134.     void * filter_dn;
  135.     void * filter_di;
  136.     void * filter_iecp_std;
  137.     void * filter_iecp_ace;
  138.     void * filter_iecp_tcc;
  139.     void * filter_iecp_amp;
  140.  
  141.     unsigned int  filter_iecp_amp_num_elements;
  142.     unsigned char format_convert_flags;
  143. };
  144.  
  145. VAStatus gen75_vebox_process_picture(VADriverContextP ctx,
  146.                          struct intel_vebox_context *proc_ctx);
  147.  
  148. void gen75_vebox_context_destroy(VADriverContextP ctx,
  149.                           struct intel_vebox_context *proc_ctx);
  150.  
  151. struct intel_vebox_context * gen75_vebox_context_init(VADriverContextP ctx);
  152.  
  153. VAStatus gen8_vebox_process_picture(VADriverContextP ctx,
  154.                          struct intel_vebox_context *proc_ctx);
  155.  
  156. #endif
  157.