h264bsd_sei.h revision 0c1bc742181ded4930842b46e9507372f0b1b963
1/* 2 * Copyright (C) 2009 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17/*------------------------------------------------------------------------------ 18 19 Table of contents 20 21 1. Include headers 22 2. Module defines 23 3. Data types 24 4. Function prototypes 25 26------------------------------------------------------------------------------*/ 27 28#ifndef H264SWDEC_SEI_H 29#define H264SWDEC_SEI_H 30 31/*------------------------------------------------------------------------------ 32 1. Include headers 33------------------------------------------------------------------------------*/ 34 35#include "basetype.h" 36#include "h264bsd_stream.h" 37#include "h264bsd_slice_header.h" 38#include "h264bsd_seq_param_set.h" 39#include "h264bsd_vui.h" 40 41/*------------------------------------------------------------------------------ 42 2. Module defines 43------------------------------------------------------------------------------*/ 44 45#define MAX_PAN_SCAN_CNT 32 46#define MAX_NUM_SPARE_PICS 16 47#define MAX_NUM_CLOCK_TS 3 48#define MAX_NUM_SUB_SEQ_LAYERS 256 49 50/*------------------------------------------------------------------------------ 51 3. Data types 52------------------------------------------------------------------------------*/ 53 54typedef struct 55{ 56 u32 seqParameterSetId; 57 u32 initialCpbRemovalDelay[MAX_CPB_CNT]; 58 u32 initialCpbRemovalDelayOffset[MAX_CPB_CNT]; 59} seiBufferingPeriod_t; 60 61typedef struct 62{ 63 u32 cpbRemovalDelay; 64 u32 dpbOutputDelay; 65 u32 picStruct; 66 u32 clockTimeStampFlag[MAX_NUM_CLOCK_TS]; 67 u32 clockTimeStamp[MAX_NUM_CLOCK_TS]; 68 u32 ctType[MAX_NUM_CLOCK_TS]; 69 u32 nuitFieldBasedFlag[MAX_NUM_CLOCK_TS]; 70 u32 countingType[MAX_NUM_CLOCK_TS]; 71 u32 fullTimeStampFlag[MAX_NUM_CLOCK_TS]; 72 u32 discontinuityFlag[MAX_NUM_CLOCK_TS]; 73 u32 cntDroppedFlag[MAX_NUM_CLOCK_TS]; 74 u32 nFrames[MAX_NUM_CLOCK_TS]; 75 u32 secondsFlag[MAX_NUM_CLOCK_TS]; 76 u32 secondsValue[MAX_NUM_CLOCK_TS]; 77 u32 minutesFlag[MAX_NUM_CLOCK_TS]; 78 u32 minutesValue[MAX_NUM_CLOCK_TS]; 79 u32 hoursFlag[MAX_NUM_CLOCK_TS]; 80 u32 hoursValue[MAX_NUM_CLOCK_TS]; 81 i32 timeOffset[MAX_NUM_CLOCK_TS]; 82} seiPicTiming_t; 83 84typedef struct 85{ 86 u32 panScanRectId; 87 u32 panScanRectCancelFlag; 88 u32 panScanCnt; 89 i32 panScanRectLeftOffset[MAX_PAN_SCAN_CNT]; 90 i32 panScanRectRightOffset[MAX_PAN_SCAN_CNT]; 91 i32 panScanRectTopOffset[MAX_PAN_SCAN_CNT]; 92 i32 panScanRectBottomOffset[MAX_PAN_SCAN_CNT]; 93 u32 panScanRectRepetitionPeriod; 94} seiPanScanRect_t; 95 96typedef struct 97{ 98 u32 ituTT35CountryCode; 99 u32 ituTT35CountryCodeExtensionByte; 100 u8 *ituTT35PayloadByte; 101 u32 numPayloadBytes; 102} seiUserDataRegisteredItuTT35_t; 103 104typedef struct 105{ 106 u32 uuidIsoIec11578[4]; 107 u8 *userDataPayloadByte; 108 u32 numPayloadBytes; 109} seiUserDataUnregistered_t; 110 111typedef struct 112{ 113 u32 recoveryFrameCnt; 114 u32 exactMatchFlag; 115 u32 brokenLinkFlag; 116 u32 changingSliceGroupIdc; 117} seiRecoveryPoint_t; 118 119typedef struct 120{ 121 u32 originalIdrFlag; 122 u32 originalFrameNum; 123 decRefPicMarking_t decRefPicMarking; 124} seiDecRefPicMarkingRepetition_t; 125 126typedef struct 127{ 128 u32 targetFrameNum; 129 u32 spareFieldFlag; 130 u32 targetBottomFieldFlag; 131 u32 numSparePics; 132 u32 deltaSpareFrameNum[MAX_NUM_SPARE_PICS]; 133 u32 spareBottomFieldFlag[MAX_NUM_SPARE_PICS]; 134 u32 spareAreaIdc[MAX_NUM_SPARE_PICS]; 135 u32 *spareUnitFlag[MAX_NUM_SPARE_PICS]; 136 u32 *zeroRunLength[MAX_NUM_SPARE_PICS]; 137} seiSparePic_t; 138 139typedef struct 140{ 141 u32 sceneInfoPresentFlag; 142 u32 sceneId; 143 u32 sceneTransitionType; 144 u32 secondSceneId; 145} seiSceneInfo_t; 146 147typedef struct 148{ 149 u32 subSeqLayerNum; 150 u32 subSeqId; 151 u32 firstRefPicFlag; 152 u32 leadingNonRefPicFlag; 153 u32 lastPicFlag; 154 u32 subSeqFrameNumFlag; 155 u32 subSeqFrameNum; 156} seiSubSeqInfo_t; 157 158typedef struct 159{ 160 u32 numSubSeqLayers; 161 u32 accurateStatisticsFlag[MAX_NUM_SUB_SEQ_LAYERS]; 162 u32 averageBitRate[MAX_NUM_SUB_SEQ_LAYERS]; 163 u32 averageFrameRate[MAX_NUM_SUB_SEQ_LAYERS]; 164} seiSubSeqLayerCharacteristics_t; 165 166typedef struct 167{ 168 u32 subSeqLayerNum; 169 u32 subSeqId; 170 u32 durationFlag; 171 u32 subSeqDuration; 172 u32 averageRateFlag; 173 u32 accurateStatisticsFlag; 174 u32 averageBitRate; 175 u32 averageFrameRate; 176 u32 numReferencedSubseqs; 177 u32 refSubSeqLayerNum[MAX_NUM_SUB_SEQ_LAYERS]; 178 u32 refSubSeqId[MAX_NUM_SUB_SEQ_LAYERS]; 179 u32 refSubSeqDirection[MAX_NUM_SUB_SEQ_LAYERS]; 180} seiSubSeqCharacteristics_t; 181 182typedef struct 183{ 184 u32 fullFrameFreezeRepetitionPeriod; 185} seiFullFrameFreeze_t; 186 187typedef struct 188{ 189 u32 snapShotId; 190} seiFullFrameSnapshot_t; 191 192typedef struct 193{ 194 u32 progressiveRefinementId; 195 u32 numRefinementSteps; 196} seiProgressiveRefinementSegmentStart_t; 197 198typedef struct 199{ 200 u32 progressiveRefinementId; 201} seiProgressiveRefinementSegmentEnd_t; 202 203typedef struct 204{ 205 u32 numSliceGroupsInSet; 206 u32 sliceGroupId[MAX_NUM_SLICE_GROUPS]; 207 u32 exactSampleValueMatchFlag; 208 u32 panScanRectFlag; 209 u32 panScanRectId; 210} seiMotionConstrainedSliceGroupSet_t; 211 212typedef struct 213{ 214 u8 *reservedSeiMessagePayloadByte; 215 u32 numPayloadBytes; 216} seiReservedSeiMessage_t; 217 218typedef struct 219{ 220 u32 payloadType; 221 seiBufferingPeriod_t bufferingPeriod; 222 seiPicTiming_t picTiming; 223 seiPanScanRect_t panScanRect; 224 seiUserDataRegisteredItuTT35_t userDataRegisteredItuTT35; 225 seiUserDataUnregistered_t userDataUnregistered; 226 seiRecoveryPoint_t recoveryPoint; 227 seiDecRefPicMarkingRepetition_t decRefPicMarkingRepetition; 228 seiSparePic_t sparePic; 229 seiSceneInfo_t sceneInfo; 230 seiSubSeqInfo_t subSeqInfo; 231 seiSubSeqLayerCharacteristics_t subSeqLayerCharacteristics; 232 seiSubSeqCharacteristics_t subSeqCharacteristics; 233 seiFullFrameFreeze_t fullFrameFreeze; 234 seiFullFrameSnapshot_t fullFrameSnapshot; 235 seiProgressiveRefinementSegmentStart_t progressiveRefinementSegmentStart; 236 seiProgressiveRefinementSegmentEnd_t progressiveRefinementSegmentEnd; 237 seiMotionConstrainedSliceGroupSet_t motionConstrainedSliceGroupSet; 238 seiReservedSeiMessage_t reservedSeiMessage; 239} seiMessage_t; 240 241/*------------------------------------------------------------------------------ 242 4. Function prototypes 243------------------------------------------------------------------------------*/ 244 245u32 h264bsdDecodeSeiMessage( 246 strmData_t *pStrmData, 247 seqParamSet_t *pSeqParamSet, 248 seiMessage_t *pSeiMessage, 249 u32 numSliceGroups); 250 251#endif /* #ifdef H264SWDEC_SEI_H */ 252 253