| /* |
| * Copyright (C) 2009 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| /*------------------------------------------------------------------------------ |
| |
| Table of contents |
| |
| 1. Include headers |
| 2. Module defines |
| 3. Data types |
| 4. Function prototypes |
| |
| ------------------------------------------------------------------------------*/ |
| |
| #ifndef H264SWDEC_SEI_H |
| #define H264SWDEC_SEI_H |
| |
| /*------------------------------------------------------------------------------ |
| 1. Include headers |
| ------------------------------------------------------------------------------*/ |
| |
| #include "basetype.h" |
| #include "h264bsd_stream.h" |
| #include "h264bsd_slice_header.h" |
| #include "h264bsd_seq_param_set.h" |
| #include "h264bsd_vui.h" |
| |
| /*------------------------------------------------------------------------------ |
| 2. Module defines |
| ------------------------------------------------------------------------------*/ |
| |
| #define MAX_PAN_SCAN_CNT 32 |
| #define MAX_NUM_SPARE_PICS 16 |
| #define MAX_NUM_CLOCK_TS 3 |
| #define MAX_NUM_SUB_SEQ_LAYERS 256 |
| |
| /*------------------------------------------------------------------------------ |
| 3. Data types |
| ------------------------------------------------------------------------------*/ |
| |
| typedef struct |
| { |
| u32 seqParameterSetId; |
| u32 initialCpbRemovalDelay[MAX_CPB_CNT]; |
| u32 initialCpbRemovalDelayOffset[MAX_CPB_CNT]; |
| } seiBufferingPeriod_t; |
| |
| typedef struct |
| { |
| u32 cpbRemovalDelay; |
| u32 dpbOutputDelay; |
| u32 picStruct; |
| u32 clockTimeStampFlag[MAX_NUM_CLOCK_TS]; |
| u32 clockTimeStamp[MAX_NUM_CLOCK_TS]; |
| u32 ctType[MAX_NUM_CLOCK_TS]; |
| u32 nuitFieldBasedFlag[MAX_NUM_CLOCK_TS]; |
| u32 countingType[MAX_NUM_CLOCK_TS]; |
| u32 fullTimeStampFlag[MAX_NUM_CLOCK_TS]; |
| u32 discontinuityFlag[MAX_NUM_CLOCK_TS]; |
| u32 cntDroppedFlag[MAX_NUM_CLOCK_TS]; |
| u32 nFrames[MAX_NUM_CLOCK_TS]; |
| u32 secondsFlag[MAX_NUM_CLOCK_TS]; |
| u32 secondsValue[MAX_NUM_CLOCK_TS]; |
| u32 minutesFlag[MAX_NUM_CLOCK_TS]; |
| u32 minutesValue[MAX_NUM_CLOCK_TS]; |
| u32 hoursFlag[MAX_NUM_CLOCK_TS]; |
| u32 hoursValue[MAX_NUM_CLOCK_TS]; |
| i32 timeOffset[MAX_NUM_CLOCK_TS]; |
| } seiPicTiming_t; |
| |
| typedef struct |
| { |
| u32 panScanRectId; |
| u32 panScanRectCancelFlag; |
| u32 panScanCnt; |
| i32 panScanRectLeftOffset[MAX_PAN_SCAN_CNT]; |
| i32 panScanRectRightOffset[MAX_PAN_SCAN_CNT]; |
| i32 panScanRectTopOffset[MAX_PAN_SCAN_CNT]; |
| i32 panScanRectBottomOffset[MAX_PAN_SCAN_CNT]; |
| u32 panScanRectRepetitionPeriod; |
| } seiPanScanRect_t; |
| |
| typedef struct |
| { |
| u32 ituTT35CountryCode; |
| u32 ituTT35CountryCodeExtensionByte; |
| u8 *ituTT35PayloadByte; |
| u32 numPayloadBytes; |
| } seiUserDataRegisteredItuTT35_t; |
| |
| typedef struct |
| { |
| u32 uuidIsoIec11578[4]; |
| u8 *userDataPayloadByte; |
| u32 numPayloadBytes; |
| } seiUserDataUnregistered_t; |
| |
| typedef struct |
| { |
| u32 recoveryFrameCnt; |
| u32 exactMatchFlag; |
| u32 brokenLinkFlag; |
| u32 changingSliceGroupIdc; |
| } seiRecoveryPoint_t; |
| |
| typedef struct |
| { |
| u32 originalIdrFlag; |
| u32 originalFrameNum; |
| decRefPicMarking_t decRefPicMarking; |
| } seiDecRefPicMarkingRepetition_t; |
| |
| typedef struct |
| { |
| u32 targetFrameNum; |
| u32 spareFieldFlag; |
| u32 targetBottomFieldFlag; |
| u32 numSparePics; |
| u32 deltaSpareFrameNum[MAX_NUM_SPARE_PICS]; |
| u32 spareBottomFieldFlag[MAX_NUM_SPARE_PICS]; |
| u32 spareAreaIdc[MAX_NUM_SPARE_PICS]; |
| u32 *spareUnitFlag[MAX_NUM_SPARE_PICS]; |
| u32 *zeroRunLength[MAX_NUM_SPARE_PICS]; |
| } seiSparePic_t; |
| |
| typedef struct |
| { |
| u32 sceneInfoPresentFlag; |
| u32 sceneId; |
| u32 sceneTransitionType; |
| u32 secondSceneId; |
| } seiSceneInfo_t; |
| |
| typedef struct |
| { |
| u32 subSeqLayerNum; |
| u32 subSeqId; |
| u32 firstRefPicFlag; |
| u32 leadingNonRefPicFlag; |
| u32 lastPicFlag; |
| u32 subSeqFrameNumFlag; |
| u32 subSeqFrameNum; |
| } seiSubSeqInfo_t; |
| |
| typedef struct |
| { |
| u32 numSubSeqLayers; |
| u32 accurateStatisticsFlag[MAX_NUM_SUB_SEQ_LAYERS]; |
| u32 averageBitRate[MAX_NUM_SUB_SEQ_LAYERS]; |
| u32 averageFrameRate[MAX_NUM_SUB_SEQ_LAYERS]; |
| } seiSubSeqLayerCharacteristics_t; |
| |
| typedef struct |
| { |
| u32 subSeqLayerNum; |
| u32 subSeqId; |
| u32 durationFlag; |
| u32 subSeqDuration; |
| u32 averageRateFlag; |
| u32 accurateStatisticsFlag; |
| u32 averageBitRate; |
| u32 averageFrameRate; |
| u32 numReferencedSubseqs; |
| u32 refSubSeqLayerNum[MAX_NUM_SUB_SEQ_LAYERS]; |
| u32 refSubSeqId[MAX_NUM_SUB_SEQ_LAYERS]; |
| u32 refSubSeqDirection[MAX_NUM_SUB_SEQ_LAYERS]; |
| } seiSubSeqCharacteristics_t; |
| |
| typedef struct |
| { |
| u32 fullFrameFreezeRepetitionPeriod; |
| } seiFullFrameFreeze_t; |
| |
| typedef struct |
| { |
| u32 snapShotId; |
| } seiFullFrameSnapshot_t; |
| |
| typedef struct |
| { |
| u32 progressiveRefinementId; |
| u32 numRefinementSteps; |
| } seiProgressiveRefinementSegmentStart_t; |
| |
| typedef struct |
| { |
| u32 progressiveRefinementId; |
| } seiProgressiveRefinementSegmentEnd_t; |
| |
| typedef struct |
| { |
| u32 numSliceGroupsInSet; |
| u32 sliceGroupId[MAX_NUM_SLICE_GROUPS]; |
| u32 exactSampleValueMatchFlag; |
| u32 panScanRectFlag; |
| u32 panScanRectId; |
| } seiMotionConstrainedSliceGroupSet_t; |
| |
| typedef struct |
| { |
| u8 *reservedSeiMessagePayloadByte; |
| u32 numPayloadBytes; |
| } seiReservedSeiMessage_t; |
| |
| typedef struct |
| { |
| u32 payloadType; |
| seiBufferingPeriod_t bufferingPeriod; |
| seiPicTiming_t picTiming; |
| seiPanScanRect_t panScanRect; |
| seiUserDataRegisteredItuTT35_t userDataRegisteredItuTT35; |
| seiUserDataUnregistered_t userDataUnregistered; |
| seiRecoveryPoint_t recoveryPoint; |
| seiDecRefPicMarkingRepetition_t decRefPicMarkingRepetition; |
| seiSparePic_t sparePic; |
| seiSceneInfo_t sceneInfo; |
| seiSubSeqInfo_t subSeqInfo; |
| seiSubSeqLayerCharacteristics_t subSeqLayerCharacteristics; |
| seiSubSeqCharacteristics_t subSeqCharacteristics; |
| seiFullFrameFreeze_t fullFrameFreeze; |
| seiFullFrameSnapshot_t fullFrameSnapshot; |
| seiProgressiveRefinementSegmentStart_t progressiveRefinementSegmentStart; |
| seiProgressiveRefinementSegmentEnd_t progressiveRefinementSegmentEnd; |
| seiMotionConstrainedSliceGroupSet_t motionConstrainedSliceGroupSet; |
| seiReservedSeiMessage_t reservedSeiMessage; |
| } seiMessage_t; |
| |
| /*------------------------------------------------------------------------------ |
| 4. Function prototypes |
| ------------------------------------------------------------------------------*/ |
| |
| u32 h264bsdDecodeSeiMessage( |
| strmData_t *pStrmData, |
| seqParamSet_t *pSeqParamSet, |
| seiMessage_t *pSeiMessage, |
| u32 numSliceGroups); |
| |
| #endif /* #ifdef H264SWDEC_SEI_H */ |
| |