PageRenderTime 149ms CodeModel.GetById 137ms app.highlight 9ms RepoModel.GetById 1ms app.codeStats 0ms

/H264Dec/source/h264bsd_sei.h

http://github.com/mbebenita/Broadway
C Header | 252 lines | 185 code | 30 blank | 37 comment | 0 complexity | fd6918a22e928a01af46e6d57d7d19e1 MD5 | raw file
  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