| /* |
| * Copyright (c) 2011 Intel Corporation. All Rights Reserved. |
| * Copyright (c) Imagination Technologies Limited, UK |
| * |
| * Permission is hereby granted, free of charge, to any person obtaining a |
| * copy of this software and associated documentation files (the |
| * "Software"), to deal in the Software without restriction, including |
| * without limitation the rights to use, copy, modify, merge, publish, |
| * distribute, sub license, and/or sell copies of the Software, and to |
| * permit persons to whom the Software is furnished to do so, subject to |
| * the following conditions: |
| * |
| * The above copyright notice and this permission notice (including the |
| * next paragraph) shall be included in all copies or substantial portions |
| * of the Software. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. |
| * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR |
| * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
| * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
| * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
| * |
| * Authors: |
| * Elaine Wang <elaine.wang@intel.com> |
| * Zeng Li <zeng.li@intel.com> |
| * |
| */ |
| |
| /* |
| * Description DMA code for mtx Platform : Generic |
| */ |
| |
| #ifndef _PNW_HOSTHEADER_H_ |
| #define _PNW_HOSTHEADER_H_ |
| |
| |
| #include "img_types.h" |
| |
| /* Structure contains QP parameters, used with the DoHeader() routine */ |
| typedef struct { |
| IMG_UINT32 H264_QP; |
| IMG_UINT32 H263_MPG4_FrameQ_scale; |
| IMG_UINT32 H263_MPG4_SliceQ_scale; |
| } MTX_QP_INFO; |
| |
| /* #include "topaz_vlc_regs.h" */ |
| |
| /* Allocating 32 words (128 bytes aligned to 8 bytes) */ |
| #define MAX_HEADERSIZEWORDS (32) |
| |
| typedef enum { |
| ELEMENT_STARTCODE_RAWDATA = 0,/* Rawdata that includes a start code */ |
| ELEMENT_RAWDATA, /* Rawdata */ |
| ELEMENT_QP, /* Insert the H264 Picture Header QP parameter (no rawdata) */ |
| ELEMENT_SQP, /* Insert the H264 Slice Header QP parameter (no rawdata) */ |
| ELEMENT_FRAMEQSCALE, /* Insert the H263/MPEG4 Frame Q_scale parameter (vob_quant field) (no rawdata) */ |
| ELEMENT_SLICEQSCALE, /* Insert the H263/MPEG4 Slice Q_scale parameter (quant_scale field) (no rawdata) */ |
| ELEMENT_INSERTBYTEALIGN_H264,/* Insert the byte align field (no rawdata) */ |
| ELEMENT_INSERTBYTEALIGN_MPG4, /* Insert the byte align field (no rawdata) */ |
| |
| /*SEI_INSERTION*/ |
| BPH_SEI_NAL_INITIAL_CPB_REMOVAL_DELAY, |
| BPH_SEI_NAL_INITIAL_CPB_REMOVAL_DELAY_OFFSET, |
| PTH_SEI_NAL_CPB_REMOVAL_DELAY, |
| PTH_SEI_NAL_DPB_OUTPUT_DELAY |
| } HEADER_ELEMENT_TYPE; |
| |
| |
| typedef struct _MTX_HEADER_ELEMENT_ { |
| HEADER_ELEMENT_TYPE Element_Type; |
| IMG_UINT8 Size; |
| IMG_UINT8 Bits; |
| } MTX_HEADER_ELEMENT; |
| |
| |
| typedef struct _MTX_HEADER_PARAMS_ { |
| IMG_UINT32 Elements; |
| MTX_HEADER_ELEMENT asElementStream[MAX_HEADERSIZEWORDS-1]; |
| } MTX_HEADER_PARAMS; |
| |
| #define ELEMENTS_EMPTY 9999 |
| |
| /* H264 Structures |
| */ |
| |
| /* Define some constants for the variable elements in the header stream */ |
| typedef enum _SHPROFILES { |
| SH_PROFILE_BP = 0, |
| SH_PROFILE_MP = 1, |
| SH_PROFILE_HP = 2, |
| } SH_PROFILE_TYPE; |
| |
| /* Level number definitions (integer level numbers, non-intermediary only.. except level 1b) */ |
| typedef enum _SHLEVELS { |
| SH_LEVEL_1 = 10, |
| SH_LEVEL_1B = 11, |
| SH_LEVEL_11 = 11, |
| SH_LEVEL_12 = 12, |
| SH_LEVEL_13 = 13, |
| SH_LEVEL_2 = 20, |
| SH_LEVEL_21 = 21, |
| SH_LEVEL_22 = 22, |
| SH_LEVEL_3 = 30, |
| SH_LEVEL_31 = 31, |
| SH_LEVEL_32 = 32, |
| SH_LEVEL_4 = 40, |
| SH_LEVEL_41 = 41, |
| SH_LEVEL_42 = 42, |
| SH_LEVEL_5 = 50, |
| SH_LEVEL_51 = 51 |
| } SH_LEVEL_TYPE; |
| |
| |
| typedef enum _SLHP_SLICEFRAME_TYPE_ { |
| SLHP_P_SLICEFRAME_TYPE, |
| SLHP_B_SLICEFRAME_TYPE, |
| SLHP_I_SLICEFRAME_TYPE, |
| SLHP_SP_SLICEFRAME_TYPE, |
| SLHP_SI_SLICEFRAME_TYPE, |
| |
| SLHP_IDR_SLICEFRAME_TYPE |
| |
| } SLHP_SLICEFRAME_TYPE; |
| |
| |
| /* Input parameters for the header generation |
| * Some of the following data structures may have fields that are actually static.. |
| * may want to prune them down a bit later. |
| */ |
| typedef struct _H264_VUI_PARAMS_STRUC { |
| IMG_BOOL aspect_ratio_info_present_flag; |
| IMG_UINT8 aspect_ratio_idc; |
| IMG_UINT16 sar_width; |
| IMG_UINT16 sar_height; |
| IMG_UINT32 Time_Scale; |
| IMG_UINT32 num_units_in_tick; |
| IMG_UINT32 bit_rate_value_minus1; /* bitrate/64)-1 */ |
| IMG_UINT32 cbp_size_value_minus1; /* (bitrate*1.5)/16 */ |
| IMG_UINT8 CBR; |
| IMG_UINT8 initial_cpb_removal_delay_length_minus1; |
| IMG_UINT8 cpb_removal_delay_length_minus1; |
| IMG_UINT8 dpb_output_delay_length_minus1; |
| IMG_UINT8 time_offset_length; |
| } H264_VUI_PARAMS; |
| |
| typedef struct _H264_CROP_PARAMS_STRUCT_ { |
| IMG_BOOL bClip; |
| IMG_UINT16 LeftCropOffset; |
| IMG_UINT16 RightCropOffset; |
| IMG_UINT16 TopCropOffset; |
| IMG_UINT16 BottomCropOffset; |
| } H264_CROP_PARAMS; |
| |
| typedef struct _H264_SEQUENCE_HEADER_PARAMS_STRUC { |
| SH_PROFILE_TYPE ucProfile; |
| SH_LEVEL_TYPE ucLevel; |
| IMG_UINT8 ucWidth_in_mbs_minus1; |
| IMG_UINT8 ucHeight_in_maps_units_minus1; |
| IMG_UINT8 gaps_in_frame_num_value; |
| IMG_UINT8 ucFrame_mbs_only_flag; |
| IMG_UINT8 VUI_Params_Present; |
| H264_VUI_PARAMS VUI_Params; |
| } H264_SEQUENCE_HEADER_PARAMS; |
| |
| |
| typedef struct _H264_SLICE_HEADER_PARAMS_STRUC { |
| IMG_UINT8 Start_Code_Prefix_Size_Bytes; |
| SLHP_SLICEFRAME_TYPE SliceFrame_Type; |
| IMG_UINT32 First_MB_Address; |
| IMG_UINT8 Frame_Num_DO; |
| IMG_UINT8 Picture_Num_DO; |
| IMG_BOOL UsesLongTermRef; |
| IMG_BOOL IsLongTermRef; |
| IMG_UINT8 Disable_Deblocking_Filter_Idc; |
| IMG_INT8 iDebAlphaOffsetDiv2; |
| IMG_INT8 iDebBetaOffsetDiv2; |
| } H264_SLICE_HEADER_PARAMS; |
| |
| |
| |
| /* MPEG4 Structures |
| */ |
| typedef enum _MPEG4_PROFILE { |
| SP = 1, |
| ASP = 3 |
| } MPEG4_PROFILE_TYPE; |
| |
| typedef enum _FIXED_VOP_TIME_ENUM { |
| _30FPS = 1, |
| _15FPS = 2, |
| _10FPS = 3 |
| } FIXED_VOP_TIME_TYPE; |
| |
| typedef struct _VBVPARAMS_STRUC { |
| IMG_UINT32 First_half_bit_rate; |
| IMG_UINT32 Latter_half_bit_rate; |
| IMG_UINT32 First_half_vbv_buffer_size; |
| IMG_UINT32 Latter_half_vbv_buffer_size; |
| IMG_UINT32 First_half_vbv_occupancy; |
| IMG_UINT32 Latter_half_vbv_occupancy; |
| } VBVPARAMS; |
| |
| |
| /* |
| * H263 Structures |
| */ |
| |
| typedef enum _VOP_CODING_ENUM { |
| I_FRAME = 0, |
| P_FRAME = 1 |
| } VOP_CODING_TYPE, H263_PICTURE_CODING_TYPE; |
| |
| typedef enum _SEARCH_RANGE_ENUM { |
| PLUSMINUS_32 = 2, |
| PLUSMINUS_64 = 3, |
| FCODE_EQ_4 = 4 |
| } SEARCH_RANGE_TYPE; |
| |
| typedef enum _H263_SOURCE_FORMAT_ENUM { |
| _128x96_SubQCIF = 1, |
| _176x144_QCIF = 2, |
| _352x288_CIF = 3, |
| _704x576_4CIF = 4 |
| } H263_SOURCE_FORMAT_TYPE; |
| |
| |
| #define SIZEINBITS(a) (sizeof(a)*8) |
| |
| /* H264 header preparation */ |
| void pnw__H264_prepare_sequence_header( |
| unsigned char *pHeaderMemory, |
| IMG_UINT32 uiPicWidthInMbs, |
| IMG_UINT32 uiPicHeightInMbs, |
| IMG_BOOL VUI_present, H264_VUI_PARAMS *VUI_params, |
| H264_CROP_PARAMS *psCropParams, |
| IMG_UINT8 uiLevel, |
| IMG_UINT8 uiProfile); |
| |
| void pnw__H264_prepare_picture_header(unsigned char *pHeaderMemory, IMG_BOOL bCabacEnaled, IMG_INT8 CQPOffset); |
| |
| void pnw__H264_prepare_slice_header( |
| unsigned char *pHeaderMemory, |
| IMG_BOOL bIntraSlice, |
| IMG_UINT32 uiDisableDeblockingFilterIDC, |
| IMG_UINT32 uiFrameNumber, |
| IMG_UINT32 uiFirst_MB_Address, |
| IMG_UINT32 uiMBSkipRun, |
| IMG_BOOL bCabacEnabled, |
| IMG_BOOL bForceIDR, |
| IMG_BOOL bUsesLongTermRef, |
| IMG_BOOL bIsLOngTermRef, |
| IMG_UINT16 uiIdrPicId); |
| |
| void pnw__H264_prepare_eodofstream_header(unsigned char *pHeaderMemory); |
| void pnw__H264_prepare_endofpicture_header(unsigned char *pHeaderMemory); |
| void pnw__H264_prepare_endofsequence_header(unsigned char *pHeaderMemory); |
| |
| |
| /* MPEG4 header preparation */ |
| void pnw__MPEG4_prepare_sequence_header( |
| unsigned char *pHeaderMemory, |
| IMG_BOOL bBFrame, |
| MPEG4_PROFILE_TYPE sProfile, |
| IMG_UINT8 Profile_and_level_indication, |
| FIXED_VOP_TIME_TYPE sFixed_vop_time_increment, |
| IMG_UINT32 Picture_Width_Pixels, |
| IMG_UINT32 Picture_Height_Pixels, |
| VBVPARAMS * psVBVParams, |
| IMG_UINT32 VopTimeResolution); |
| |
| void pnw__MPEG4_prepare_vop_header( |
| unsigned char *pHeaderMem, |
| IMG_BOOL bIsVOP_coded, |
| IMG_UINT32 VOP_time_increment, |
| IMG_UINT8 sSearch_range, |
| IMG_UINT8 eVop_Coding_Type, |
| IMG_UINT32 VopTimeResolution); |
| |
| |
| /* H263 header preparation */ |
| void pnw__H263_prepare_sequence_header( |
| unsigned char *pHeaderMem, |
| IMG_UINT8 Profile_and_level_indication); |
| |
| void pnw__H263_prepare_picture_header( |
| unsigned char *pHeaderMem, |
| IMG_UINT8 Temporal_Ref, |
| H263_PICTURE_CODING_TYPE PictureCodingType, |
| H263_SOURCE_FORMAT_TYPE SourceFormatType, |
| IMG_UINT8 FrameRate, |
| IMG_UINT16 PictureWidth, |
| IMG_UINT16 PictureHeigth); |
| |
| void pnw__H263_prepare_GOBslice_header( |
| unsigned char *pHeaderMem, |
| IMG_UINT8 GOBNumber, |
| IMG_UINT8 GOBFrameId); |
| |
| void pnw__H264_prepare_SEI_buffering_period_header( |
| MTX_HEADER_PARAMS * pMTX_Header, |
| IMG_UINT8 ui8NalHrdBpPresentFlag, |
| IMG_UINT8 ui8nal_cpb_cnt_minus1, |
| IMG_UINT8 ui8nal_initial_cpb_removal_delay_length, |
| IMG_UINT32 ui32nal_initial_cpb_removal_delay, |
| IMG_UINT32 ui32nal_initial_cpb_removal_delay_offset, |
| IMG_UINT8 ui8VclHrdBpPresentFlag, |
| IMG_UINT8 ui8vcl_cpb_cnt_minus1, |
| IMG_UINT32 ui32vcl_initial_cpb_removal_delay, |
| IMG_UINT32 ui32vcl_initial_cpb_removal_delay_offset); |
| |
| void pnw__H264_prepare_SEI_picture_timing_header( |
| MTX_HEADER_PARAMS * pMTX_Header, |
| IMG_UINT8 ui8CpbDpbDelaysPresentFlag, |
| IMG_UINT32 ui32cpb_removal_delay_length_minus1, |
| IMG_UINT32 ui32dpb_output_delay_length_minus1, |
| IMG_UINT32 ui32cpb_removal_delay, |
| IMG_UINT32 ui32dpb_output_delay, |
| IMG_UINT8 ui8pic_struct_present_flag, |
| IMG_UINT8 ui8pic_struct, |
| IMG_UINT8 ui8NumClockTS, |
| IMG_UINT8 *aui8clock_timestamp_flag, |
| IMG_UINT8 ui8full_timestamp_flag, |
| IMG_UINT8 ui8seconds_flag, |
| IMG_UINT8 ui8minutes_flag, |
| IMG_UINT8 ui8hours_flag, |
| IMG_UINT8 ui8seconds_value, |
| IMG_UINT8 ui8minutes_value, |
| IMG_UINT8 ui8hours_value, |
| IMG_UINT8 ui8ct_type, |
| IMG_UINT8 ui8nuit_field_based_flag, |
| IMG_UINT8 ui8counting_type, |
| IMG_UINT8 ui8discontinuity_flag, |
| IMG_UINT8 ui8cnt_dropped_flag, |
| IMG_UINT8 ui8n_frames, |
| IMG_UINT8 ui8time_offset_length, |
| IMG_INT32 i32time_offset); |
| |
| |
| #endif /* _PNW_HOSTHEADER_H_ */ |
| |
| |
| |
| |