/*
 * Copyright (C) 2009 The Android Open Source Project
 * Modified for use by h264bsd standalone library
 *
 * 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_VUI_H
#define H264SWDEC_VUI_H

/*------------------------------------------------------------------------------
    1. Include headers
------------------------------------------------------------------------------*/

#include "basetype.h"
#include "h264bsd_stream.h"

/*------------------------------------------------------------------------------
    2. Module defines
------------------------------------------------------------------------------*/

#define MAX_CPB_CNT 32

/*------------------------------------------------------------------------------
    3. Data types
------------------------------------------------------------------------------*/

/* enumerated sample aspect ratios, ASPECT_RATIO_M_N means M:N */
enum
{
    ASPECT_RATIO_UNSPECIFIED = 0,
    ASPECT_RATIO_1_1,
    ASPECT_RATIO_12_11,
    ASPECT_RATIO_10_11,
    ASPECT_RATIO_16_11,
    ASPECT_RATIO_40_33,
    ASPECT_RATIO_24_11,
    ASPECT_RATIO_20_11,
    ASPECT_RATIO_32_11,
    ASPECT_RATIO_80_33,
    ASPECT_RATIO_18_11,
    ASPECT_RATIO_15_11,
    ASPECT_RATIO_64_33,
    ASPECT_RATIO_160_99,
    ASPECT_RATIO_EXTENDED_SAR = 255
};

/* structure to store Hypothetical Reference Decoder (HRD) parameters */
typedef struct
{
    u32 cpbCnt;
    u32 bitRateScale;
    u32 cpbSizeScale;
    u32 bitRateValue[MAX_CPB_CNT];
    u32 cpbSizeValue[MAX_CPB_CNT];
    u32 cbrFlag[MAX_CPB_CNT];
    u32 initialCpbRemovalDelayLength;
    u32 cpbRemovalDelayLength;
    u32 dpbOutputDelayLength;
    u32 timeOffsetLength;
} hrdParameters_t;

/* storage for VUI parameters */
typedef struct
{
    u32 aspectRatioPresentFlag;
    u32 aspectRatioIdc;
    u32 sarWidth;
    u32 sarHeight;
    u32 overscanInfoPresentFlag;
    u32 overscanAppropriateFlag;
    u32 videoSignalTypePresentFlag;
    u32 videoFormat;
    u32 videoFullRangeFlag;
    u32 colourDescriptionPresentFlag;
    u32 colourPrimaries;
    u32 transferCharacteristics;
    u32 matrixCoefficients;
    u32 chromaLocInfoPresentFlag;
    u32 chromaSampleLocTypeTopField;
    u32 chromaSampleLocTypeBottomField;
    u32 timingInfoPresentFlag;
    u32 numUnitsInTick;
    u32 timeScale;
    u32 fixedFrameRateFlag;
    u32 nalHrdParametersPresentFlag;
    hrdParameters_t nalHrdParameters;
    u32 vclHrdParametersPresentFlag;
    hrdParameters_t vclHrdParameters;
    u32 lowDelayHrdFlag;
    u32 picStructPresentFlag;
    u32 bitstreamRestrictionFlag;
    u32 motionVectorsOverPicBoundariesFlag;
    u32 maxBytesPerPicDenom;
    u32 maxBitsPerMbDenom;
    u32 log2MaxMvLengthHorizontal;
    u32 log2MaxMvLengthVertical;
    u32 numReorderFrames;
    u32 maxDecFrameBuffering;
} vuiParameters_t;

/*------------------------------------------------------------------------------
    4. Function prototypes
------------------------------------------------------------------------------*/

u32 h264bsdDecodeVuiParameters(strmData_t *pStrmData,
    vuiParameters_t *pVuiParameters);

#endif /* #ifdef H264SWDEC_VUI_H */

