You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
174 lines
6.4 KiB
174 lines
6.4 KiB
;/* *************************************************************************
|
|
;** INTEL Corporation Proprietary Information
|
|
;**
|
|
;** This listing is supplied under the terms of a license
|
|
;** agreement with INTEL Corporation and may not be copied
|
|
;** nor disclosed except in accordance with the terms of
|
|
;** that agreement.
|
|
;**
|
|
;** Copyright (c) 1995 Intel Corporation.
|
|
;** All Rights Reserved.
|
|
;**
|
|
;** *************************************************************************
|
|
;*/
|
|
|
|
;////////////////////////////////////////////////////////////////////////////
|
|
;//
|
|
;// $Header: R:\h26x\h26x\src\enc\e3mbad.inv 1.10 04 Oct 1996 08:47:58 BNICKERS $
|
|
;// $Log: R:\h26x\h26x\src\enc\e3mbad.inv $
|
|
;//
|
|
;// Rev 1.10 04 Oct 1996 08:47:58 BNICKERS
|
|
;// Add EMV.
|
|
;//
|
|
;// Rev 1.9 14 May 1996 12:18:46 BNICKERS
|
|
;// Initial debugging of MMx B-Frame ME.
|
|
;//
|
|
;// Rev 1.8 02 May 1996 13:41:08 BNICKERS
|
|
;// started integration of MMX PB-frames
|
|
;//
|
|
;// Rev 1.7 22 Feb 1996 15:02:38 BNICKERS
|
|
;// Add unionized field for MMx implementation.
|
|
;//
|
|
;// Rev 1.6 22 Jan 1996 17:13:44 BNICKERS
|
|
;// Add MBEdgeType to MacroBlock Action Descriptor.
|
|
;//
|
|
;// Rev 1.5 27 Dec 1995 15:33:00 RMCKENZX
|
|
;// Added copyright notice
|
|
;//
|
|
;////////////////////////////////////////////////////////////////////////////
|
|
|
|
IFDEF _ENDMBAD_INC_
|
|
ELSE
|
|
_ENDMBAD_INC = 1
|
|
|
|
;
|
|
; Fields for MacroBlock Action Stream Descriptors for the H26x encoder.
|
|
;
|
|
|
|
|
|
T_Blk STRUCT
|
|
BlkOffset DWORD ? ; 0 -- Offset from upper left viewable pel of Y
|
|
; plane to upper left pel of block.
|
|
UNION
|
|
PastRef DWORD ? ; 4 -- Addr of 8*8 reference block, passed from
|
|
; P-Frame ME to P-Frame frame differencing.
|
|
STRUCT
|
|
CandidateHMVf BYTE ? ; 4 -- Scratch area for figuring BestHMVf values.
|
|
CandidateVMVf BYTE ? ; 5 -- Must be 4 bytes after Best...
|
|
CandidateHMVb BYTE ? ; 6
|
|
CandidateVMVb BYTE ? ; 7
|
|
ENDS
|
|
CandidateBiDiMVs DWORD ? ; 4
|
|
ENDS
|
|
UNION
|
|
STRUCT
|
|
BestHMVf BYTE ? ; 8 -- "Real" MVs for B-Frame block, passed from
|
|
BestVMVf BYTE ? ; 9 -- B-Frame ME to P-Frame frame differencing.
|
|
BestHMVb BYTE ? ; 10 -- (Biased by 060H)
|
|
BestVMVb BYTE ? ; 11
|
|
ENDS
|
|
BestBiDiMVs DWORD ? ; 8
|
|
ENDS
|
|
UNION
|
|
STRUCT
|
|
PHMV BYTE ? ; 12 -- Horz motion vector for P frame ref blk.
|
|
PVMV BYTE ? ; 13 -- Vert motion vector for P frame ref blk.
|
|
BHMV BYTE ? ; 14 -- Horz motion vector adjustment for B frm.
|
|
BVMV BYTE ? ; 15 -- Vert motion vector adjustment for B frame.
|
|
ENDS
|
|
MVs DWORD ? ; 12
|
|
ENDS
|
|
T_Blk ENDS
|
|
|
|
; Symbolic offsets for MMx version:
|
|
|
|
T_MacroBlockActionDescr STRUCT
|
|
BlockType BYTE ? ; 0 -- See Block Types below.
|
|
MBEdgeType BYTE ? ; 1 -- 1 left | 2 right | 4 top | 8 bottom
|
|
Unassigned1 BYTE ?
|
|
FirstMEState BYTE ? ; 3 -- First State Num for Motion Estimation engine.
|
|
UNION
|
|
STRUCT
|
|
CodedBlocks BYTE ? ; 4 -- [6] End-Of-Stream indicator
|
|
; [0] indicates Y1 non-empty.
|
|
; [1..5] indicate Y2, Y3, Y4, U, V non-empty.
|
|
; Other bits zero.
|
|
CodedBlocksB BYTE ? ; 5 -- [0..5] like CodedBlocks, but for B frame.
|
|
; Set 0 for non-bi-di prediction.
|
|
BestFullPelMBHMV BYTE ? ; 6 -- Best full pel HMV at macroblock level.
|
|
BestFullPelMBVMV BYTE ? ; 7 -- Best full pel VMV at macroblock level.
|
|
ENDS
|
|
BestFullPelMBMVs DWORD ? ; 4
|
|
ENDS
|
|
SWD DWORD ? ; 8 -- Sum of weighted diffs, from motion estimation.
|
|
SWDB DWORD ? ; 12 -- Sum of weighted diffs, from ME for B frame.
|
|
BlkY1 T_Blk { }
|
|
Blk EQU BlkY1
|
|
BlkY2 T_Blk { }
|
|
BlkY3 T_Blk { }
|
|
BlkY4 T_Blk { }
|
|
BlkU T_Blk { }
|
|
BlkV T_Blk { }
|
|
Unassigned4 BYTE 16 DUP (?) ; pad out 16 bytes to 128 bytes total to match C struct
|
|
T_MacroBlockActionDescr ENDS
|
|
T_MBAD TEXTEQU <T_MacroBlockActionDescr>
|
|
|
|
IF SIZEOF T_MacroBlockActionDescr-128
|
|
**** Size of T_MacroBlockActionDescr MUST BE a power of 2 bytes long.
|
|
ENDIF
|
|
|
|
IF 3*SIZEOF T_MBAD-PITCH
|
|
**** Next instr works if PITCH==384 and SizeOf T_MacroBlockActionDescr==128.
|
|
**** Here and throughout this file.
|
|
ELSE
|
|
BlkLvlSWD TEXTEQU <BestBiDiMVs>
|
|
CandBlkLvlSWD TEXTEQU <[CONST_384*1-128+CandidateBiDiMVs]>
|
|
BestBlkLvlSWD TEXTEQU <[CONST_384*1-128+BestBiDiMVs]>
|
|
BlkLvlSWD0Delta TEXTEQU <[CONST_384*1-128+MVs]>
|
|
CandBiDiMVs TEXTEQU <[CONST_384*1+CandidateBiDiMVs]>
|
|
CandHMVf TEXTEQU <[CONST_384*1+CandidateHMVf]>
|
|
CandVMVf TEXTEQU <[CONST_384*1+CandidateVMVf]>
|
|
CandHMVb TEXTEQU <[CONST_384*1+CandidateHMVb]>
|
|
CandVMVb TEXTEQU <[CONST_384*1+CandidateVMVb]>
|
|
BiDiMVs0Delta TEXTEQU <[CONST_384*1+BestBiDiMVs]>
|
|
HMVf0Delta TEXTEQU <[CONST_384*1+BestHMVf]>
|
|
VMVf0Delta TEXTEQU <[CONST_384*1+BestVMVf]>
|
|
HMVb0Delta TEXTEQU <[CONST_384*1+BestHMVb]>
|
|
VMVb0Delta TEXTEQU <[CONST_384*1+BestVMVb]>
|
|
ENDIF
|
|
|
|
; Memory layout constraints:
|
|
;
|
|
; T_MacroBlockActionDescr structure must be 16-byte aligned.
|
|
; Each T_Blk structure must be 16-byte aligned.
|
|
; FirstMEState must be 3rd byte of a DWORD.
|
|
; CodedBlocks must be DWORD aligned.
|
|
; CodedBlocksB must be CodedBlocks plus one.
|
|
; CodedBlocks & CodedBlocksB should be in different memory bank than BlockType.
|
|
; Offset must be 16-byte aligned.
|
|
; PastRef must be at Targ plus four.
|
|
; Candidate MVs must be at DWORD before Best MVs. MVs must be in order given.
|
|
;
|
|
|
|
; Block Types
|
|
;
|
|
; Only INTER, INTRA, and INTERSLF used for H261.
|
|
; Only INTER1MV, INTRA, INTER4MV used presently for H263.
|
|
|
|
INTER1MV = 0
|
|
INTER = INTER1MV
|
|
INTRA = 1
|
|
INTERBIDI = 2
|
|
INTRABIDI = 3
|
|
INTER4MV = 4
|
|
INTERSLF = 2
|
|
|
|
IsINTRA = 1 ; Mask to check for INTRA or INTER
|
|
IsBIDI = 2 ; Mask to check for BIDI or not
|
|
Is4MV = 4 ; Mask to check for 4 motion vectors or just 1.
|
|
|
|
LeftEdge = 1 ; Mask to indicate MB is at left edge of picture.
|
|
RightEdge = 2 ; Mask to indicate MB is at right edge of picture.
|
|
TopEdge = 4 ; Mask to indicate MB is at top edge of picture.
|
|
BottomEdge = 8 ; Mask to indicate MB is at bottom edge of picture.
|
|
ENDIF
|