Commit | Line | Data |
---|---|---|
ef4d08ac DB |
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 | ||
98790382 SS |
21 | #ifndef AVCODEC_XVMC_RENDER_H |
22 | #define AVCODEC_XVMC_RENDER_H | |
699b3f99 | 23 | |
7fade368 IK |
24 | #include <X11/Xlib.h> |
25 | #include <X11/Xutil.h> | |
26 | #include <X11/Xatom.h> | |
27 | #include <X11/extensions/Xv.h> | |
28 | #include <X11/extensions/Xvlib.h> | |
29 | #include <X11/extensions/XvMClib.h> | |
30 | ||
31 | ||
ab4e14be | 32 | //the surface should be shown, video driver manipulates this |
7fade368 | 33 | #define MP_XVMC_STATE_DISPLAY_PENDING 1 |
ab4e14be | 34 | //the surface is needed for prediction, codec manipulates this |
7fade368 | 35 | #define MP_XVMC_STATE_PREDICTION 2 |
d215d07a IK |
36 | //this surface is needed for subpicture rendering |
37 | #define MP_XVMC_STATE_OSD_SOURCE 4 | |
7fade368 IK |
38 | // 1337 IDCT MCo |
39 | #define MP_XVMC_RENDER_MAGIC 0x1DC711C0 | |
40 | ||
41 | typedef struct{ | |
ab4e14be | 42 | //these are not changed by the decoder! |
7fade368 IK |
43 | int magic; |
44 | ||
45 | short * data_blocks; | |
46 | XvMCMacroBlock * mv_blocks; | |
47 | int total_number_of_mv_blocks; | |
48 | int total_number_of_data_blocks; | |
49 | int mc_type;//XVMC_MPEG1/2/4,XVMC_H263 without XVMC_IDCT | |
ab4e14be | 50 | int idct;//Do we use IDCT acceleration? |
7fade368 IK |
51 | int chroma_format;//420,422,444 |
52 | int unsigned_intra;//+-128 for intra pictures after clip | |
7fade368 IK |
53 | XvMCSurface* p_surface;//pointer to rendered surface, never changed |
54 | ||
55 | //these are changed by decoder | |
56 | //used by XvMCRenderSurface function | |
57 | XvMCSurface* p_past_surface;//pointer to the past surface | |
58 | XvMCSurface* p_future_surface;//pointer to the future prediction surface | |
59 | ||
ab4e14be | 60 | unsigned int picture_structure;//top/bottom fields or frame! |
7fade368 | 61 | unsigned int flags;//XVMC_SECOND_FIELD - 1'st or 2'd field in the sequence |
115329f1 | 62 | unsigned int display_flags; //1,2 or 1+2 fields for XvMCPutSurface, |
7fade368 | 63 | |
ab4e14be DB |
64 | //these are internal communication ones |
65 | int state;//0-free, 1 Waiting to Display, 2 Waiting for prediction | |
66 | int start_mv_blocks_num;//offset in the array for the current slice, updated by vo | |
67 | int filled_mv_blocks_num;//processed mv block in this slice, changed by decoder | |
115329f1 | 68 | |
7fade368 | 69 | int next_free_data_block_num;//used in add_mv_block, pointer to next free block |
d215d07a IK |
70 | //extensions |
71 | void * p_osd_target_surface_render;//pointer to the surface where subpicture is rendered | |
7fade368 IK |
72 | |
73 | } xvmc_render_state_t; | |
699b3f99 | 74 | |
98790382 | 75 | #endif /* AVCODEC_XVMC_RENDER_H */ |