/* * Copyright (c) 2022, Intel Corporation * * 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, sublicense, * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS 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. */ //! //! \file codechal_oca_debug.h //! \brief Defines the oca debug interface shared by codec only. //! \details The debug interface dumps output from Media based on in input config file. //! #ifndef __CODEC_OCA_DEBUG_H__ #define __CODEC_OCA_DEBUG_H__ #include "codec_def_decode_avc.h" #include "codec_def_decode_hevc.h" #define CODECHAL_OCA_DECODE_MAX_SLICE_NUM 100 struct CODECHAL_OCA_LOG_HEADER { uint32_t size; //!< Size of valid data occupied, which is used when filling OCA buffer uint32_t allocSize; }; struct CODECHAL_OCA_DECODE_HEADER { CODECHAL_OCA_LOG_HEADER Header; MOS_COMPONENT Component; //!< DDI component uint32_t numSlices; bool shortFormatInUse; //HEVC only }; struct CODECHAL_OCA_DECODE_AVC_PIC_PARAM { struct { bool bValid; CODEC_AVC_PIC_PARAMS params; } picParams; }; struct CODECHAL_OCA_DECODE_AVC_SLICE_PARAM { bool bValid; struct { uint32_t slice_data_size; //!< Number of bytes in the bitstream buffer for this slice. uint32_t slice_data_offset; //!< The offset to the NAL start code for this slice. // Long format specific uint16_t slice_data_bit_offset; //!< Bit offset from NAL start code to the beginning of slice data. uint16_t first_mb_in_slice; //!< Same as AVC syntax element. uint16_t NumMbsForSlice; //!< Number of MBs in the bitstream associated with this slice. uint8_t slice_type; //!< Same as AVC syntax element. uint8_t direct_spatial_mv_pred_flag; //!< Same as AVC syntax element. uint8_t num_ref_idx_l0_active_minus1; //!< Same as AVC syntax element. uint8_t num_ref_idx_l1_active_minus1; //!< Same as AVC syntax element. uint8_t cabac_init_idc; //!< Same as AVC syntax element. char slice_qp_delta; //!< Same as AVC syntax element. uint8_t disable_deblocking_filter_idc; //!< Same as AVC syntax element. char slice_alpha_c0_offset_div2; //!< Same as AVC syntax element. char slice_beta_offset_div2; //!< Same as AVC syntax element. uint16_t slice_id; //!< Same as AVC syntax element. uint16_t first_mb_in_next_slice; } sliceParams; }; struct CODECHAL_OCA_DECODE_HEVC_PIC_PARAM { struct { bool bValid; CODEC_HEVC_PIC_PARAMS params; } picParams; struct { bool bValid; CODEC_HEVC_EXT_PIC_PARAMS params; } extPicParams; struct { bool bValid; CODEC_HEVC_SCC_PIC_PARAMS params; } sccPicParams; }; struct CODECHAL_OCA_DECODE_HEVC_SLICE_PARAM { bool bValid; struct { uint32_t slice_data_size; uint32_t slice_data_offset; uint16_t NumEmuPrevnBytesInSliceHdr; uint32_t ByteOffsetToSliceData; struct { uint32_t LastSliceOfPic : 1; //!< Specifies if current slice is the last slice of picture. uint32_t dependent_slice_segment_flag : 1; //!< Same as HEVC syntax element uint32_t slice_type : 2; //!< Same as HEVC syntax element uint32_t color_plane_id : 2; //!< Same as HEVC syntax element uint32_t slice_sao_luma_flag : 1; //!< Same as HEVC syntax element uint32_t slice_sao_chroma_flag : 1; //!< Same as HEVC syntax element uint32_t mvd_l1_zero_flag : 1; //!< Same as HEVC syntax element uint32_t cabac_init_flag : 1; //!< Same as HEVC syntax element uint32_t slice_temporal_mvp_enabled_flag : 1; //!< Same as HEVC syntax element uint32_t slice_deblocking_filter_disabled_flag : 1; //!< Same as HEVC syntax element uint32_t collocated_from_l0_flag : 1; //!< Same as HEVC syntax element uint32_t slice_loop_filter_across_slices_enabled_flag : 1; //!< Same as HEVC syntax element uint32_t reserved : 18; //!< Value is used for alignemnt and has no meaning, set to 0. }LongSliceFlags; uint8_t collocated_ref_idx; uint8_t num_ref_idx_l0_active_minus1; uint8_t num_ref_idx_l1_active_minus1; } sliceParams; }; class CodechalOcaDumper { public: CodechalOcaDumper(); virtual ~CodechalOcaDumper(); void AllocateBufferSize(uint32_t allocSize); void SetAvcDecodeParam( PCODEC_AVC_PIC_PARAMS picParams, PCODEC_AVC_SLICE_PARAMS sliceParams, uint32_t numSlices); void SetHevcDecodeParam( PCODEC_HEVC_PIC_PARAMS picParams, PCODEC_HEVC_EXT_PIC_PARAMS extPicParams, PCODEC_HEVC_SCC_PIC_PARAMS sccPicParams, PCODEC_HEVC_SLICE_PARAMS sliceParams, PCODEC_HEVC_EXT_SLICE_PARAMS extSliceParams, uint32_t numSlices, bool shortFormatInUse); CODECHAL_OCA_DECODE_HEADER *GetDecodeParam() { return m_pOcaDecodeParam; } static void Delete(void *&p); public: CODECHAL_OCA_DECODE_HEADER *m_pOcaDecodeParam = nullptr; MEDIA_CLASS_DEFINE_END(CodechalOcaDumper) }; #endif /* __MEDIA_OCA_DEBUG_H__ */