Statistics
| Branch: | Revision:

ffmpeg / libavcodec / xvmc.h @ 058bcd7b

History | View | Annotate | Download (5.91 KB)

1
/*
2
 * Copyright (C) 2003 Ivan Kalvachev
3
 *
4
 * This file is part of FFmpeg.
5
 *
6
 * FFmpeg is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU Lesser General Public
8
 * License as published by the Free Software Foundation; either
9
 * version 2.1 of the License, or (at your option) any later version.
10
 *
11
 * FFmpeg is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
 * Lesser General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU Lesser General Public
17
 * License along with FFmpeg; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
 */
20

    
21
#ifndef AVCODEC_XVMC_H
22
#define AVCODEC_XVMC_H
23

    
24
#include <X11/extensions/XvMC.h>
25

    
26
#include "avcodec.h"
27

    
28
#if LIBAVCODEC_VERSION_MAJOR < 53
29
#define AV_XVMC_STATE_DISPLAY_PENDING          1  /**  the surface should be shown, the video driver manipulates this */
30
#define AV_XVMC_STATE_PREDICTION               2  /**  the surface is needed for prediction, the codec manipulates this */
31
#define AV_XVMC_STATE_OSD_SOURCE               4  /**  the surface is needed for subpicture rendering */
32
#endif
33
#define AV_XVMC_ID                    0x1DC711C0  /**< special value to ensure that regular pixel routines haven't corrupted the struct
34
                                                       the number is 1337 speak for the letters IDCT MCo (motion compensation) */
35

    
36
struct xvmc_pix_fmt {
37
/** Set by the calling application.
38
    Once set these values are not supposed to be modified.
39
*/
40
//@{
41
    /** The field contains the special constant value AV_XVMC_ID.
42
        It is used as test whenever the application knows the calling API,
43
        and that there is no corruption caused by pixel routines.
44
        - application - set during initialization
45
        - libavcodec  - unchanged
46
    */
47
    int             xvmc_id;
48

    
49
    /** Pointer to the block array allocated by XvMCCreateBlocks()
50
        it contins differential pixel data (in MoCo mode)
51
        or coefficients for IDCT.
52
        - application - set during initialization
53
        - libavcodec  - unchanged
54
    */
55
    short*          data_blocks;
56

    
57
    /** Pointer to the macroblock description array allocated by XvMCCreateMacroBlocks().
58
        - application - set during initialization
59
        - libavcodec  - unchanged
60
    */
61
    XvMCMacroBlock* mv_blocks;
62

    
63
    /** Number of all MB descriptions that could be stored in the mv_blocks array.
64
        - application - set during initialization
65
        - libavcodec  - unchanged
66
    */
67
    int             total_number_of_mv_blocks;
68

    
69
    /** Number of all blocks that could be stored at once in the data_blocks array.
70
        - application - set during initialization
71
        - libavcodec  - unchanged
72
    */
73
    int             total_number_of_data_blocks;
74

    
75
    /** Indicates that the hardware would interpret data_blocks as IDCT coefficients
76
        and perform IDCT on them.
77
        - application - set during initialization
78
        - libavcodec  - unchanged
79
    */
80
    int             idct;
81

    
82
    /** In MoCo mode it indicates that Intra MB are assumed to be in unsigned format
83
        Same as XVMC_INTRA_UNSIGNED flag.
84
        - application - set during initialization
85
        - libavcodec  - unchanged
86
    */
87
    int             unsigned_intra;
88

    
89
    /** Pointer to the surface allocated by XvMCCreateSurface().
90
        It identifies the frame on the video hardware and its state.
91
        - application - set during initialization
92
        - libavcodec  - unchanged
93
    */
94
    XvMCSurface*    p_surface;
95
//}@
96

    
97
/** Set by the decoder before calling draw_horiz_band(),
98
    needed by the XvMCRenderSurface function. */
99
//@{
100
    /** Pointer to the surface used as past reference
101
        - application - unchanged
102
        - libavcodec  - set
103
    */
104
    XvMCSurface*    p_past_surface;
105

    
106
    /** Pointer to the surface used as future reference
107
        - application - unchanged
108
        - libavcodec  - set
109
    */
110
    XvMCSurface*    p_future_surface;
111

    
112
    /** top/bottom field or frame
113
        - application - unchanged
114
        - libavcodec  - set
115
    */
116
    unsigned int    picture_structure;
117

    
118
    /** XVMC_SECOND_FIELD - 1st or 2nd field in the sequence
119
        - application - unchanged
120
        - libavcodec  - set
121
    */
122
    unsigned int    flags;
123
//}@
124

    
125
    /** Offset in the mv array for the current slice.
126
        Macroblocks described before that offset are assumed to be already passed to the hardware.
127
        - application - zeros it on get_buffer().
128
                        A successful draw_horiz_band() may increment it
129
                        with filled_mb_block_num or zero both.
130
        - libavcodec  - unchanged
131
    */
132
    int             start_mv_blocks_num;
133

    
134
    /** Number of mv blocks that are filled by libavcodec and have to be passed to the hardware.
135
        - application - zeros it on get_buffer() or after successful draw_horiz_band()
136
        - libavcodec  - increment with one of each stored MB
137
    */
138
    int             filled_mv_blocks_num;
139

    
140
    /** Offset to the next free data block. The mv_blocks hold a number pointing to the data blocks.
141
        - application - zeroes it on get_buffer() and after successful draw_horizx_band()
142
        - libvcodec   - each macroblock increases it with the number of coded blocks in it.
143
    */
144
    int             next_free_data_block_num;
145

    
146
/** extensions may be placed here */
147
#if LIBAVCODEC_VERSION_MAJOR < 53
148
//@{
149
    /** State - used to work around limitations in the MPlayer video system.
150
        0   - Surface is not used.
151
        1   - Surface is still held in application to be displayed or is still visible.
152
        2   - Surface is still held in libavcodec buffer for prediction.
153
    */
154
    int             state;
155
    void*           p_osd_target_surface_render;  ///< pointer to the surface where the subpicture is rendered
156
//}@
157
#endif
158
};
159

    
160
#endif /* AVCODEC_XVMC_H */