| /* |
| * 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_*/ |