OSDN Git Service

Add vdenc common commands for CNL
[android-x86/hardware-intel-common-vaapi.git] / src / i965_decoder.h
1 /*
2  * Copyright (C) 2012 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
25 #ifndef I965_DECODER_H
26 #define I965_DECODER_H
27
28 #include <stdint.h>
29 #include <stdlib.h>
30
31 #include <va/va.h>
32 #include <va/va_dec_vp8.h>
33 #include <va/va_dec_hevc.h>
34 #include <intel_bufmgr.h>
35
36 #define MAX_GEN_REFERENCE_FRAMES 16
37 #define MAX_GEN_HCP_REFERENCE_FRAMES    8
38
39 #define ALLOC_GEN_BUFFER(gen_buffer, string, size) do {         \
40         dri_bo_unreference(gen_buffer->bo);                     \
41         gen_buffer->bo = dri_bo_alloc(i965->intel.bufmgr,       \
42                                       string,                   \
43                                       size,                     \
44                                       0x1000);                  \
45         assert(gen_buffer->bo);                                 \
46         gen_buffer->valid = 1;                                  \
47     } while (0);
48
49 #define FREE_GEN_BUFFER(gen_buffer) do {        \
50         dri_bo_unreference(gen_buffer->bo);     \
51         gen_buffer->bo = NULL;                  \
52         gen_buffer->valid = 0;                  \
53     } while (0)
54
55 typedef struct gen_frame_store GenFrameStore;
56 struct gen_frame_store {
57     VASurfaceID surface_id;
58     int         frame_store_id;
59     struct      object_surface *obj_surface;
60
61     /* This represents the time when this frame store was last used to
62        hold a reference frame. This is not connected to a presentation
63        timestamp (PTS), and this is not a common decoding time stamp
64        (DTS) either. It serves the purpose of tracking retired
65        reference frame candidates.
66
67        This is only used for H.264 decoding on platforms before Haswell */
68     uint64_t    ref_age;
69 };
70
71 typedef struct gen_frame_store_context GenFrameStoreContext;
72 struct gen_frame_store_context {
73     uint64_t    age;
74     int         prev_poc;
75 };
76
77 typedef struct gen_buffer GenBuffer;
78 struct gen_buffer {
79     dri_bo     *bo;
80     int         valid;
81 };
82
83 struct hw_context *
84 gen75_dec_hw_context_init(VADriverContextP ctx, struct object_config *obj_config);
85
86 extern struct hw_context *
87 gen8_dec_hw_context_init(VADriverContextP ctx, struct object_config *obj_config);
88 #endif /* I965_DECODER_H */