Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5361 serge 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 
26
 *
27
 */
28
 
29
#ifndef _GEN75_VPP_VEBOX_H
30
#define _GEN75_VPP_VEBOX_H
31
 
32
#include 
33
#include 
34
#include 
35
#include 
36
#include 
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