mirror of https://github.com/intel/libva-utils.git
189 lines
7.1 KiB
C
Executable File
189 lines
7.1 KiB
C
Executable File
/*
|
|
* Copyright (c) 2018 Intel Corporation. All Rights Reserved.
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
* copy of this software and associated documentation files (the
|
|
* "Software"), to deal in the Software without restriction, including
|
|
* without limitation the rights to use, copy, modify, merge, publish,
|
|
* distribute, sub license, and/or sell copies of the Software, and to
|
|
* permit persons to whom the Software is furnished to do so, subject to
|
|
* the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice (including the
|
|
* next paragraph) shall be included in all copies or substantial portions
|
|
* of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
|
|
* IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
|
|
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
*/
|
|
|
|
/**
|
|
* \file avcstreamoutdemo.h
|
|
*
|
|
* This file contains the decode streamout layout.
|
|
*/
|
|
|
|
#ifndef _AVC_STREAMOUT_DEMO_H_
|
|
#define _AVC_STREAMOUT_DEMO_H_
|
|
|
|
typedef signed dw;
|
|
|
|
/*
|
|
* avc streamout layout
|
|
*/
|
|
typedef struct {
|
|
// dw 0
|
|
union {
|
|
struct {
|
|
dw InterMbMode : 2; // Valid only if IntraMbFlag is inter.
|
|
dw MbSkipFlag : 1; // Cuurently always set to 0
|
|
dw : 1; // MBZ
|
|
dw IntraMbMode : 2; // Valid for Inter MB, Used in conjunction with MbType
|
|
dw : 1; // MBZ
|
|
dw MbPolarity : 1; // FieldMB polarity
|
|
dw MbType5Bits : 5; // Matches best MB mode. In H.264 spec: Table 7-11 for Intra; Table 7-14 for Inter.
|
|
dw IntraMbFlag : 1; // Set if MB is intra, unset if MB is inter
|
|
dw MbFieldFlag : 1; // Set if field MB, unset if frame MB
|
|
dw Transform8x8Flag : 1; // Set if current MB uses 8x8 transforms
|
|
dw : 1; // MBZ
|
|
dw CodedPatternDC : 3; // AVC Only. Indicates whether DC coeffs are sent. Y is most significant bit.
|
|
dw EdgeFilterFlag : 3; // AVC.
|
|
dw : 1; // MBZ
|
|
dw PackedMvNum : 8; // Debug only. Specifies number of MVs in packed motion vector form
|
|
};
|
|
struct {
|
|
dw Value;
|
|
};
|
|
} DW0;
|
|
|
|
// dw 1
|
|
union {
|
|
struct {
|
|
dw MbXCnt : 16; // Horizontal Origin of MB in dest piture in units of MBs
|
|
dw MbYCnt : 16; // Vertical Origin of MB in dest piture in units of MBs
|
|
};
|
|
struct {
|
|
dw Value;
|
|
};
|
|
} DW1;
|
|
|
|
// dw 2
|
|
union {
|
|
struct {
|
|
dw CbpAcY : 16; // Coded block pattern for Y.
|
|
dw CbpAcU : 4; // Coded block pattern for U
|
|
dw CbpAcV : 4; // Coded block pattern for V
|
|
dw : 6; // Reserved
|
|
dw LastMBOfSliceFlag : 1; // Indicates current MB is last in slice. Data not right
|
|
dw ConcealMBFlag : 1; // Specifies in MB is a conceal MB.
|
|
};
|
|
struct {
|
|
dw Value;
|
|
};
|
|
} DW2;
|
|
|
|
// dw 3
|
|
union {
|
|
struct {
|
|
dw QpPrimeY : 7; // AVC: Per-MB QP for luma.
|
|
dw QScaleType : 1; // MPEG2 only
|
|
dw MbClock16 : 8; // MB compute clocks in 16-clock units
|
|
dw NzCoefCountMB : 9; // All coded coefficients in MB
|
|
dw : 3; // Reserved
|
|
dw Skip8x8Pattern : 4; // AVC Only. Indicates which of the 8x8 sub-blocks uses predicted MVs
|
|
};
|
|
struct {
|
|
dw Value;
|
|
};
|
|
} DW3;
|
|
|
|
|
|
// dw 4
|
|
union {
|
|
struct {
|
|
dw LumaIntraPredModes0 : 16; // AVC only
|
|
dw LumaIntraPredModes1 : 16; // AVC only
|
|
} Intra;
|
|
struct {
|
|
dw SubMbShape : 8; // Indicates sub-block partitioning for each 8x8 sub-block
|
|
dw SubMbPredModes : 8; // Indicates prediction mode for each 8x8 sub-block
|
|
dw : 16; // Reserved
|
|
} Inter;
|
|
struct {
|
|
dw Value;
|
|
};
|
|
} DW4;
|
|
|
|
// dw 5
|
|
union {
|
|
struct {
|
|
dw LumaIntraPredModes2 : 16; // AVC only
|
|
dw LumaIntraPredModes3 : 16; // AVC only
|
|
} Intra;
|
|
struct {
|
|
dw FrameStorIDL0_0 : 8;
|
|
dw FrameStorIDL0_1 : 8;
|
|
dw FrameStorIDL0_2 : 8;
|
|
dw FrameStorIDL0_3 : 8;
|
|
} Inter;
|
|
struct {
|
|
dw Value;
|
|
};
|
|
} DW5;
|
|
|
|
// dw 6
|
|
union {
|
|
struct {
|
|
dw MbIntraStruct : 8; // Indicates which neighbours can be used for intra-prediction
|
|
dw : 24; // Reserved
|
|
} Intra;
|
|
struct {
|
|
dw FrameStorIDL1_0 : 8;
|
|
dw FrameStorIDL1_1 : 8;
|
|
dw FrameStorIDL1_2 : 8;
|
|
dw FrameStorIDL1_3 : 8;
|
|
} Inter;
|
|
struct {
|
|
dw Value;
|
|
};
|
|
} DW6;
|
|
|
|
// dw 7
|
|
union {
|
|
struct {
|
|
dw SubBlockCodeTypeY0 : 2; // VC-1. Specifies if 8x8, 8x4, 4x8, 4x4
|
|
dw SubBlockCodeTypeY1 : 2; // VC-1. Specifies if 8x8, 8x4, 4x8, 4x4
|
|
dw SubBlockCodeTypeY2 : 2; // VC-1. Specifies if 8x8, 8x4, 4x8, 4x4
|
|
dw SubBlockCodeTypeY3 : 2; // VC-1. Specifies if 8x8, 8x4, 4x8, 4x4
|
|
dw SubBlockCodeTypeU : 2; // VC-1. Specifies if 8x8, 8x4, 4x8, 4x4
|
|
dw SubBlockCodeTypeV : 2; // VC-1. Specifies if 8x8, 8x4, 4x8, 4x4
|
|
dw : 8;
|
|
dw MvFieldSelect : 4; // Field polatity for VC-1 and MPEG2
|
|
dw : 8;
|
|
};
|
|
struct {
|
|
dw Value;
|
|
};
|
|
} DW7;
|
|
|
|
// dw 8-15 for inter MBs only
|
|
union {
|
|
struct {
|
|
dw MvFwd_x : 16; // x-component of fwd MV for 8x8 or 4x4 sub-block
|
|
dw MvFwd_y : 16; // y-component of fwd MV for 8x8 or 4x4 sub-block
|
|
dw MvBwd_x : 16; // x-component of bwd MV for 8x8 or 4x4 sub-block
|
|
dw MvBwd_y : 16; // y-component of bwd MV for 8x8 or 4x4 sub-block
|
|
};
|
|
struct {
|
|
dw Value[2];
|
|
};
|
|
} QW8[4];
|
|
|
|
} VADecStreamOutData;
|
|
#endif /*_AVC_STREAMOUT_DEMO_H_*/
|