ef4d08ac |
/*
* Copyright (C) 2003 Ivan Kalvachev
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
|
af28efa2 |
#ifndef AVCODEC_XVMC_H
#define AVCODEC_XVMC_H |
699b3f99 |
|
c97dffbc |
#include <X11/extensions/XvMC.h> |
7fade368 |
|
5d6c1110 |
#include "avcodec.h"
|
4e30fa6e |
#define AV_XVMC_ID 0x1DC711C0 /**< special value to ensure that regular pixel routines haven't corrupted the struct |
e98b4755 |
the number is 1337 speak for the letters IDCT MCo (motion compensation) */ |
117f9234 |
|
f602b044 |
struct xvmc_pix_fmt { |
058bcd7b |
/** The field contains the special constant value AV_XVMC_ID. |
2f953883 |
It is used as a test that the application correctly uses the API, |
ad0405fc |
and that there is no corruption caused by pixel routines.
- application - set during initialization
- libavcodec - unchanged
*/
int xvmc_id; |
7fade368 |
|
e7de624b |
/** Pointer to the block array allocated by XvMCCreateBlocks(). |
9ba8bc01 |
The array has to be freed by XvMCDestroyBlocks().
Each group of 64 values represents one data block of differential
pixel information (in MoCo mode) or coefficients for IDCT. |
e7de624b |
- application - set the pointer during initialization
- libavcodec - fills coefficients/pixel data into the array |
ad0405fc |
*/ |
6b6ea1df |
short* data_blocks; |
ad0405fc |
|
df9d2e04 |
/** Pointer to the macroblock description array allocated by |
e7de624b |
XvMCCreateMacroBlocks() and freed by XvMCDestroyMacroBlocks().
- application - set the pointer during initialization
- libavcodec - fills description data into the array |
ad0405fc |
*/ |
6b6ea1df |
XvMCMacroBlock* mv_blocks; |
ad0405fc |
|
037f13fe |
/** Number of macroblock descriptions that can be stored in the mv_blocks
array. |
ad0405fc |
- application - set during initialization
- libavcodec - unchanged
*/ |
cad1928f |
int allocated_mv_blocks; |
ad0405fc |
|
037f13fe |
/** Number of blocks that can be stored at once in the data_blocks array. |
ad0405fc |
- application - set during initialization
- libavcodec - unchanged
*/ |
cad1928f |
int allocated_data_blocks; |
ad0405fc |
|
49bd8e4b |
/** Indicate that the hardware would interpret data_blocks as IDCT |
df9d2e04 |
coefficients and perform IDCT on them. |
ad0405fc |
- application - set during initialization
- libavcodec - unchanged
*/
int idct;
|
037f13fe |
/** In MoCo mode it indicates that intra macroblocks are assumed to be in
unsigned format; same as the XVMC_INTRA_UNSIGNED flag. |
ad0405fc |
- application - set during initialization
- libavcodec - unchanged
*/
int unsigned_intra;
|
058bcd7b |
/** Pointer to the surface allocated by XvMCCreateSurface(). |
9ba8bc01 |
It has to be freed by XvMCDestroySurface() on application exit. |
037f13fe |
It identifies the frame and its state on the video hardware. |
ad0405fc |
- application - set during initialization
- libavcodec - unchanged
*/
XvMCSurface* p_surface; |
7fade368 |
|
8f66518d |
/** Set by the decoder before calling ff_draw_horiz_band(), |
1909fade |
needed by the XvMCRenderSurface function. */ |
6785e509 |
//@{ |
ad0405fc |
/** Pointer to the surface used as past reference
- application - unchanged
- libavcodec - set
*/
XvMCSurface* p_past_surface;
|
058bcd7b |
/** Pointer to the surface used as future reference |
ad0405fc |
- application - unchanged
- libavcodec - set
*/
XvMCSurface* p_future_surface; |
7fade368 |
|
ad0405fc |
/** top/bottom field or frame
- application - unchanged
- libavcodec - set
*/
unsigned int picture_structure;
|
058bcd7b |
/** XVMC_SECOND_FIELD - 1st or 2nd field in the sequence |
ad0405fc |
- application - unchanged
- libavcodec - set
*/
unsigned int flags; |
6785e509 |
//}@ |
7fade368 |
|
9ba8bc01 |
/** Number of macroblock descriptions in the mv_blocks array |
e7de624b |
that have already been passed to the hardware. |
2f953883 |
- application - zeroes it on get_buffer(). |
8f66518d |
A successful ff_draw_horiz_band() may increment it |
72d38a74 |
with filled_mb_block_num or zero both.
- libavcodec - unchanged
*/
int start_mv_blocks_num;
|
9ba8bc01 |
/** Number of new macroblock descriptions in the mv_blocks array (after
start_mv_blocks_num) that are filled by libavcodec and have to be
passed to the hardware. |
df9d2e04 |
- application - zeroes it on get_buffer() or after successful
ff_draw_horiz_band(). |
72d38a74 |
- libavcodec - increment with one of each stored MB
*/
int filled_mv_blocks_num;
|
9ba8bc01 |
/** Number of the the next free data block; one data block consists of
64 short values in the data_blocks array. |
b91813b6 |
All blocks before this one have already been claimed by placing their
position into the corresponding block description structure field,
that are part of the mv_blocks array. |
e7de624b |
- application - zeroes it on get_buffer().
A successful ff_draw_horiz_band() may zero it together
with start_mb_blocks_num. |
9ba8bc01 |
- libavcodec - each decoded macroblock increases it by the number |
648410c1 |
of coded blocks it contains. |
72d38a74 |
*/
int next_free_data_block_num; |
c96da3ed |
}; |
699b3f99 |
|
af28efa2 |
#endif /* AVCODEC_XVMC_H */ |