📄 mae_interface.h
字号:
/* <LIC_AMD_STD>
* Copyright (C) 2003-2005 Advanced Micro Devices, Inc. All Rights Reserved.
*
* Unless otherwise designated in writing, this software and any related
* documentation are the confidential proprietary information of AMD.
* THESE MATERIALS ARE PROVIDED "AS IS" WITHOUT ANY
* UNLESS OTHERWISE NOTED IN WRITING, EXPRESS OR IMPLIED WARRANTY OF ANY
* KIND, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* NONINFRINGEMENT, TITLE, FITNESS FOR ANY PARTICULAR PURPOSE AND IN NO
* EVENT SHALL AMD OR ITS LICENSORS BE LIABLE FOR ANY DAMAGES WHATSOEVER.
*
* AMD does not assume any responsibility for any errors which may appear
* in the Materials nor any responsibility to support or update the
* Materials. AMD retains the right to modify the Materials at any time,
* without notice, and is not obligated to provide such modified
* Materials to you. AMD is not obligated to furnish, support, or make
* any further information available to you.
* </LIC_AMD_STD> */
/* <CTL_AMD_STD>
* </CTL_AMD_STD> */
/* <DOC_AMD_STD>
* </DOC_AMD_STD> */
#ifndef _MAE_INTERFACE_H
#define _MAE_INTERFACE_H
// Enable this flag to generate some checker files ".hw"
// (for the driver/hardware) & ".cm" (for the decoder/CModel)
//#define VALIDATION_DUMP
#if defined(WIN32) || defined(UNDER_CE)
#if defined(UNDER_DRIVER_CE)
#include "mae_types.h"
#else
#include "types.h" // in travis/env directory
#endif
#else //!WIN32 && !UNDER_CE
#include "types.h" // in travis/env directory
#include <linux/ioctl.h>
#endif //WIN32 || UNDER_CE
/* This version will be bumped on changes to MAE interface */
#define MAE_INTERFACE_VERSION 0x00010001
/* Masks can be used to check for Major or Minor version changes */
/* Major version changes if driver & mae interface compatibility diverges */
/* Minor version changes if only minor (no interface) changes */
#define MAE_INTERFACE_VERSION_MAJORMASK 0xFFFF0000
#define MAE_INTERFACE_VERSION_MINORMASK 0x0000FFFF
#ifdef UNDER_CE
#define maeIOCTLCode(f,m) \
CTL_CODE ( FILE_DEVICE_UNKNOWN, 0x800 | (f), (m), FILE_ANY_ACCESS )
#define AU1XXXMAE_INIT maeIOCTLCode(0, METHOD_BUFFERED)
#define AU1XXXMAE_REQUEST maeIOCTLCode(1, METHOD_BUFFERED)
#define AU1XXXMAE_SUBMIT maeIOCTLCode(2, METHOD_BUFFERED)
#define AU1XXXMAE_PRIME_FE maeIOCTLCode(3, METHOD_BUFFERED)
#define AU1XXXMAE_CMODEL_ISR maeIOCTLCode(4, METHOD_BUFFERED)
#define AU1XXXMAE_SETMODE maeIOCTLCode(5, METHOD_BUFFERED)
#define AU1XXXMAE_GETYUVBUFADDR maeIOCTLCode(6, METHOD_BUFFERED)
#define AU1XXXMAE_GETYUVBUF maeIOCTLCode(7, METHOD_BUFFERED)
#define AU1XXXMAE_DISPLAYSIZE maeIOCTLCode(8, METHOD_BUFFERED)
#define AU1XXXMAE_WAKEUP maeIOCTLCode(9, METHOD_BUFFERED)
#define AU1XXXMAE_GETDISPLAYSIZE maeIOCTLCode(10, METHOD_BUFFERED)
#define AU1XXXMAE_SUBMIT_BE maeIOCTLCode(11, METHOD_BUFFERED)
#define AU1XXXMAE_REQUEST_BE maeIOCTLCode(12, METHOD_BUFFERED)
#define AU1XXXMAE_UNINIT maeIOCTLCode(13, METHOD_BUFFERED)
#define AU1XXXMAE_WRITE_TIMESTAMP maeIOCTLCode(14, METHOD_BUFFERED)
#define AU1XXXMAE_SETSYNCMODE maeIOCTLCode(15, METHOD_BUFFERED)
#define AU1XXXMAE_GETSYNCMODE maeIOCTLCode(16, METHOD_BUFFERED)
#define AU1XXXMAE_GETSTATE maeIOCTLCode(17, METHOD_BUFFERED)
#define AU1XXXMAE_ENABLE_COUNT maeIOCTLCode(18, METHOD_BUFFERED)
#define AU1XXXMAE_DISABLE_COUNT maeIOCTLCode(19, METHOD_BUFFERED)
#define AU1XXXMAE_IGNORE_PTS maeIOCTLCode(20, METHOD_BUFFERED)
#define AU1XXXMAE_SETDISPLAYRECT maeIOCTLCode(21, METHOD_BUFFERED)
#define AU1XXXMAE_STOP maeIOCTLCode(22, METHOD_BUFFERED)
#define AU1XXXMAE_PAUSE maeIOCTLCode(23, METHOD_BUFFERED)
#define AU1XXXMAE_RUN maeIOCTLCode(24, METHOD_BUFFERED)
#define AU1XXXMAE_ISDISPLAYED maeIOCTLCode(25, METHOD_BUFFERED)
#define AU1XXXMAE_VIDEOROTATION maeIOCTLCode(26, METHOD_BUFFERED)
#define AU1XXXMAE_FLUSH maeIOCTLCode(27, METHOD_BUFFERED)
#define AU1XXXMAE_ENDOFSTREAM maeIOCTLCode(28, METHOD_BUFFERED)
#define AU1XXXMAE_SETMODE2 maeIOCTLCode(29, METHOD_BUFFERED)
#define AU1XXXMAE_GETDISPLAYCONFIG maeIOCTLCode(30, METHOD_BUFFERED)
#define AU1XXXMAE_GETYUVCONFIG maeIOCTLCode(31, METHOD_BUFFERED)
#define AU1XXXMAE_GETPRID maeIOCTLCode(32, METHOD_BUFFERED)
#define AU1XXXMAE_FLUSH_QUEUES maeIOCTLCode(33, METHOD_BUFFERED)
#define AU1XXXMAE_GETCURRENTSTATE maeIOCTLCode(34, METHOD_BUFFERED)
#define AU1XXXMAE_GETSCALERS maeIOCTLCode(35, METHOD_BUFFERED)
#define AU1XXXMAE_GETDIVXSTR maeIOCTLCode(36, METHOD_BUFFERED)
#define AU1XXXMAE_GETINTERRUPTSTATE maeIOCTLCode(37, METHOD_BUFFERED)
#define AU1XXXMAE_SETPLAYERRECT maeIOCTLCode(38, METHOD_BUFFERED)
#else //!UNDER_CE
#define AU1XXXMAE_IOC_MAGIC 'M'
#define AU1XXXMAE_INIT _IOW(AU1XXXMAE_IOC_MAGIC, 0, int *)
#define AU1XXXMAE_REQUEST _IOW(AU1XXXMAE_IOC_MAGIC, 1, int *)
#define AU1XXXMAE_SUBMIT _IOW(AU1XXXMAE_IOC_MAGIC, 2, int *)
#define AU1XXXMAE_PRIME_FE _IOW(AU1XXXMAE_IOC_MAGIC, 3, int *)
#define AU1XXXMAE_CMODEL_ISR _IOW(AU1XXXMAE_IOC_MAGIC, 4, int *)
#define AU1XXXMAE_SETMODE _IOW(AU1XXXMAE_IOC_MAGIC, 5, int *)
#define AU1XXXMAE_GETYUVBUFADDR _IOW(AU1XXXMAE_IOC_MAGIC, 6, int *)
#define AU1XXXMAE_GETYUVBUF _IOW(AU1XXXMAE_IOC_MAGIC, 7, int *)
#define AU1XXXMAE_DISPLAYSIZE _IOW(AU1XXXMAE_IOC_MAGIC, 8, int *)
#define AU1XXXMAE_WAKEUP _IOW(AU1XXXMAE_IOC_MAGIC, 9, int *)
#define AU1XXXMAE_GETDISPLAYSIZE _IOW(AU1XXXMAE_IOC_MAGIC, 10, int *)
#define AU1XXXMAE_SUBMIT_BE _IOW(AU1XXXMAE_IOC_MAGIC, 11, int *)
#define AU1XXXMAE_REQUEST_BE _IOW(AU1XXXMAE_IOC_MAGIC, 12, int *)
#define AU1XXXMAE_WRITE_TIMESTAMP _IOW(AU1XXXMAE_IOC_MAGIC, 13, int *)
#define AU1XXXMAE_UNINIT _IOW(AU1XXXMAE_IOC_MAGIC, 14, int *)
#define AU1XXXMAE_SETSYNCMODE _IOW(AU1XXXMAE_IOC_MAGIC, 15, int *)
#define AU1XXXMAE_GETSYNCMODE _IOW(AU1XXXMAE_IOC_MAGIC, 16, int *)
#define AU1XXXMAE_GETSTATE _IOW(AU1XXXMAE_IOC_MAGIC, 17, int *)
#endif //UNDER_CE
/* Use with AU1XXXMAE_SETSYNCMODE, AU1XXXMAE_GETSYNCMODE */
#define MAE_SYNCMODE_IGNOREPTS 0 /* No synchronization (Ignore PTS) */
#define MAE_SYNCMODE_PLAY 1 /* Synchronize to reference clock */
#define MAE_SYNCMODE_PAUSE 2 /* Pause clocks */
// MAE Driver return codes
#define MAE_OK 0
#define MAE_TIMEOUT 1
#define MAE_NO_DATA_BUFFER 2
#define MAE_NO_MAE_BUFFER 3
#define MAE_GENERAL_ERROR 4
/* Use with AU1XXXMAE_GETSTATE */
typedef struct _mae_state_struct
{
uint32 version; /* MAE_INTERFACE_VERSION */
uint32 flags; /* MAE_STATEFLAG_xxx */
uint32 timestamp_lo; /* timestamp (low 32 bits) of current frame rendered */
uint32 timestamp_hi; /* timestamp (hi 32 bits) of current frame rendered */
uint32 encoded_format;
uint32 encoded_width;
uint32 encoded_height;
uint32 reserved1; /* reserved for future use */
uint32 reserved2; /* reserved for future use */
uint32 reserved3; /* reserved for future use */
} MAE_STATE_STRUCT, *PMAE_STATE_STRUCT;
#define MAE_STATEFLAG_NONE 0x00000000
#define MAE_STATEFLAG_INIT 0x00000001 /* encoded format is known */
#define MAE_STATEFLAG_FORMATKNOWN 0x00000002 /* encoded format is known */
#define MAE_STATEFLAG_TIMEKNOWN 0x00000004 /* timestamp is known */
#define MAE_STATEFLAG_FRAMESUBMITTED 0x00000008
#define MAE_STATEFLAG_FRAMERENDERED 0x00000010
#define CONFIG0_MASK 0x00000001
#define CUR_Y_MASK 0x00000002
#define FWD_Y_TOP_MASK 0x00000004
#define BWD_Y_TOP_MASK 0x00000008
#define CUR_CB_MASK 0x00000010
#define FWD_CB_TOP_MASK 0x00000020
#define BWD_CB_TOP_MASK 0x00000040
#define CUR_CR_MASK 0x00000080
#define FWD_CR_TOP_MASK 0x00000100
#define BWD_CR_TOP_MASK 0x00000200
#define PICTURE_SIZE_MASK 0x00000400
#define INTENSITY_COMP_MASK 0x00000800
#define FWD_Y_BOT_MASK 0x00001000
#define FWD_CB_BOT_MASK 0x00002000
#define FWD_CR_BOT_MASK 0x00004000
#define BWD_Y_BOT_MASK 0x00008000
#define BWD_CB_BOT_MASK 0x00010000
#define BWD_CR_BOT_MASK 0x00020000
#define PQUANT_MASK 0x00040000
#define SEND_QUEUE 0 // Send one frame or n macroblocks at a time to MAE
#define SEND_BATCH 1 // Send the current and all accumulated MBs to MAE
#define SEND_FORCE 2 // Skip the current MB, but send the accumulated MBs to MAE
#ifndef boolean
typedef unsigned char boolean;
#endif
#define MAX_PICTURE_SIZE (720 * 576)
#ifndef WM_DATA_SIZE
#define WM_DATA_SIZE (BLOCK_SQUARE_SIZE)
#endif
#define DESCRIPTOR_ENTRY_SIZE 8 // Each descriptor entry is 64 bits
#define WRAPSKIPMVS(pWrapMB,NumWM,NumMV)\
((uint32 *)pWrapMB + (sizeof(header_words)/4) + (sizeof(Weighing_matrix)*NumWM/4) + NumMV);
// Stream Types (set by the respective decoders)
#define MAE_STREAM_TYPE_UNKNOWN 0
#define MAE_STREAM_TYPE_MPEG1 1
#define MAE_STREAM_TYPE_MPEG2 2
#define MAE_STREAM_TYPE_MPEG4 3
#define MAE_STREAM_TYPE_H263 4
#define MAE_STREAM_TYPE_DIVX 5
#define MAE_STREAM_TYPE_WMV9 6
typedef struct _mae_desc_struct
{
// MAE DMA descriptor word 0
uint32 ByteCount:22; // Number of bytes pointed to by the address pointer
uint32 reserved:6; // this must be zero
uint32 reserved2:1;
uint32 reserved3:2;
uint32 Valid:1; // Indicates if this is a valid descriptor
// MAE DMA descriptor word 1
uint32 address; // Physical address where the data is located
}mae_desc;
typedef struct _mae_disp_struct
{
uint32 display_linesize;
uint32 display_height;
uint32 rotation; /* 0=normal, 1=90 deg, 2=180 deg, 3=270 deg */
uint32 format; /* display format (i.e. 16bit, 32bit, etc.) */
}MAE_DISP_STRUCT, *PMAE_DISP_STRUCT;
typedef struct _mae_mode_struct
{
uint32 operating_mode;
uint32 playback_speed;
}MAE_MODE_STRUCT, *PMAE_MODE_STRUCT;
/* Use with AU1XXXMAE_GETDIVXSTR */
typedef struct _divx_drm_struct
{
uint32 reg30;
uint32 reg34;
uint32 reg60;
uint32 prid;
uint32 config1;
uint32 reg1000;
uint32 reg100c;
uint32 reg101c;
}DIVX_DRM_STRUCT, *PDIVX_DRM_STRUCT;
typedef struct header_word0_struct
{
uint32 dcchroma:6;
uint32 dcluma:6;
uint32 iqadd1:6;
uint32 wtchgmsk:4;
uint32 iqmul2:9;
uint32 bblk:1;
}_header_word0;
typedef struct header_word1_struct
{
uint32 iqadd2:9;
uint32 iqdiv3:3;
uint32 cbp:8;
uint32 reserved1:12;
}_header_word1;
typedef struct header_word2_struct
{
uint32 xformsize:16;
uint32 mbmode:16;
}_header_word2;
typedef struct header_word3_struct
{
uint32 ypos:8;
uint32 xpos:8;
uint32 mcprecuv:2;
uint32 mcprecy:2;
uint32 mbtype:3;
uint32 bb:1;
uint32 bt:1;
uint32 fb:1;
uint32 ft:1;
uint32 fp:1;
uint32 dctt:1;
uint32 ps:1; // picture structure replaces old tff bit
uint32 rnd:1;
uint32 reserved2:1; // must be zero
}_header_word3;
typedef struct header_words_struct
{
_header_word0 header_word0;
_header_word1 header_word1;
_header_word2 header_word2;
_header_word3 header_word3;
} header_words;
typedef struct _reg_info_struct
{
struct config0_struct
{
uint32 reserved4:11;
uint32 satiq:1; // 1-bit
uint32 smooth:1; // 1-bit
uint32 loopfilt:1; // 1-bit
uint32 reserved3:2;
uint32 mis:1; // 1-bit
uint32 codstyl:1;
uint32 picture_level_mbmode:2; // 2 bits
uint32 reserved2:4;
uint32 iqmul1:2; // 2-bits
uint32 bc:1; // 1-bit
uint32 reserved1:5;
}config0;
uint32 cur_y_frame_ptr; // 32-bits
uint32 fwd_y_top_ptr; // 32-bits
uint32 bwd_y_top_ptr; // 32-bits
uint32 cur_cb_frame_ptr; // 32-bits
uint32 fwd_cb_top_ptr; // 32-bits
uint32 bwd_cb_top_ptr; // 32-bits
uint32 cur_cr_frame_ptr; // 32-bits
uint32 fwd_cr_top_ptr; // 32-bits
uint32 bwd_cr_top_ptr; // 32-bits
struct picture_size_struct
{
uint32 linesiz:10; // 16-bits
uint32 reserved6:6;
uint32 height:10; // 16-bits
uint32 reserved5:6;
}picture_size;
struct intensity_comp_struct
{
uint32 lumscale:6; // 6-bits
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -