⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mae_interface.h

📁 AU1200嵌入式处理器媒体加速引擎(mae)的驱动
💻 H
📖 第 1 页 / 共 2 页
字号:
/* <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 + -