blob: efe543a63797cc3e363332de693b09961dabdeea [file] [log] [blame]
/*
* 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 */