/* * 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: * Edward Lin * */ #ifndef _TNG_PICMGMT_H_ #define _TNG_PICMGMT_H_ #include "img_types.h" #include "tng_hostcode.h" #define SHIFT_MTX_MSG_PICMGMT_SUBTYPE (0) #define MASK_MTX_MSG_PICMGMT_SUBTYPE (0xff << SHIFT_MTX_MSG_PICMGMT_SUBTYPE) #define SHIFT_MTX_MSG_PICMGMT_DATA (8) #define MASK_MTX_MSG_PICMGMT_DATA (0xffffff << SHIFT_MTX_MSG_PICMGMT_DATA) #define SHIFT_MTX_MSG_RC_UPDATE_QP (0) #define MASK_MTX_MSG_RC_UPDATE_QP (0x3f << SHIFT_MTX_MSG_RC_UPDATE_QP) #define SHIFT_MTX_MSG_RC_UPDATE_BITRATE (6) #define MASK_MTX_MSG_RC_UPDATE_BITRATE (0x03ffffff << SHIFT_MTX_MSG_RC_UPDATE_BITRATE) #define SHIFT_MTX_MSG_PROVIDE_REF_BUFFER_USE (0) #define MASK_MTX_MSG_PROVIDE_REF_BUFFER_USE (0xff << SHIFT_MTX_MSG_PROVIDE_REF_BUFFER_USE) #define SHIFT_MTX_MSG_PROVIDE_REF_BUFFER_SLOT (8) #define MASK_MTX_MSG_PROVIDE_REF_BUFFER_SLOT (0xff << SHIFT_MTX_MSG_PROVIDE_REF_BUFFER_SLOT) #define SHIFT_MTX_MSG_PROVIDE_REF_BUFFER_LT (16) #define MASK_MTX_MSG_PROVIDE_REF_BUFFER_LT (0xff << SHIFT_MTX_MSG_PROVIDE_REF_BUFFER_LT) #define SHIFT_MTX_MSG_PROVIDE_CODED_BUFFER_SLOT (0) #define MASK_MTX_MSG_PROVIDE_CODED_BUFFER_SLOT (0x0f << SHIFT_MTX_MSG_PROVIDE_CODED_BUFFER_SLOT) #define SHIFT_MTX_MSG_PROVIDE_CODED_BUFFER_SIZE (4) #define MASK_MTX_MSG_PROVIDE_CODED_BUFFER_SIZE (0x0fffffff << SHIFT_MTX_MSG_PROVIDE_CODED_BUFFER_SLOT) typedef enum _pic_mgmt_type_ { IMG_PICMGMT_REF_TYPE=0, IMG_PICMGMT_GOP_STRUCT, IMG_PICMGMT_SKIP_FRAME, IMG_PICMGMT_EOS, IMG_PICMGMT_FLUSH, IMG_PICMGMT_QUANT, } IMG_PICMGMT_TYPE; /*! *********************************************************************************** * * Description : PIC_MGMT - SetNextRefType parameters * ************************************************************************************/ typedef struct tag_IMG_PICMGMT_REF_DATA { IMG_FRAME_TYPE eFrameType; //!< Type of the next reference frame (IDR, I, P) } IMG_PICMGMT_REF_DATA; /*! *********************************************************************************** * * Description : PIC_MGMT - IMG_V_SetGopStructure parameters * ************************************************************************************/ typedef struct tag_IMG_PICMGMT_GOP_DATA { IMG_UINT8 ui8BFramePeriod; //!< B-period IMG_UINT32 ui32IFramePeriod; //!< I-period } IMG_PICMGMT_GOP_DATA; /*! *********************************************************************************** * * Description : PIC_MGMT - IMG_V_SkipFrame parameters * ************************************************************************************/ typedef struct tag_IMG_PICMGMT_SKIP_DATA { IMG_BOOL8 b8Process; //!< Process skipped frame (to update MV) ? } IMG_PICMGMT_SKIP_DATA; /*! *********************************************************************************** * * Description : PIC_MGMT - IMG_V_EndOfStream parameters * ************************************************************************************/ typedef struct tag_IMG_PICMGMT_EOS_DATA { IMG_UINT32 ui32FrameCount; //!< Number of frames in the stream (incl. skipped) } IMG_PICMGMT_EOS_DATA; /*! *********************************************************************************** * * Description : PIC_MGMT - IMG_V_RCUpdate parameters * ************************************************************************************/ typedef struct tag_IMG_PICMGMT_RC_UPDATE_DATA { IMG_UINT32 ui32BitsPerFrame; //!< Number of bits in a frame IMG_UINT8 ui8VCMIFrameQP; //!< VCM I frame QP } IMG_PICMGMT_RC_UPDATE_DATA; /*! *********************************************************************************** * * Description : PIC_MGMT - IMG_V_FlushStream parameters * ************************************************************************************/ typedef struct tag_IMG_PICMGMT_FLUSH_STREAM_DATA { IMG_UINT32 ui32FlushAtFrame; //!< Frame Idx to flush the encoder } IMG_PICMGMT_FLUSH_STREAM_DATA; /*! *********************************************************************************** * * Description : PIC_MGMT - IMG_V_SetCustomScalingValues parameters * ************************************************************************************/ typedef struct tag_IMG_PICMGMT_CUSTOM_QUANT_DATA { IMG_UINT32 ui32Values; //!< Address of custom quantization values IMG_UINT32 ui32Regs4x4Sp; //!< Address of custom quantization register values for 4x4 Sp IMG_UINT32 ui32Regs8x8Sp; //!< Address of custom quantization register values for 8x8 Sp IMG_UINT32 ui32Regs4x4Q; //!< Address of custom quantization register values for 4x4 Q IMG_UINT32 ui32Regs8x8Q; //!< Address of custom quantization register values for 8x8 Q } IMG_PICMGMT_CUSTOM_QUANT_DATA; /*! *********************************************************************************** @Description : PROVIDE_BUFFER - Details of the source picture buffer ************************************************************************************/ typedef struct tag_IMG_SOURCE_BUFFER_PARAMS { IMG_UINT32 ui32PhysAddrYPlane_Field0; //!< Source pic phys addr (Y plane, Field 0) IMG_UINT32 ui32PhysAddrUPlane_Field0; //!< Source pic phys addr (U plane, Field 0) IMG_UINT32 ui32PhysAddrVPlane_Field0; //!< Source pic phys addr (V plane, Field 0) IMG_UINT32 ui32PhysAddrYPlane_Field1; //!< Source pic phys addr (Y plane, Field 1) IMG_UINT32 ui32PhysAddrUPlane_Field1; //!< Source pic phys addr (U plane, Field 1) IMG_UINT32 ui32PhysAddrVPlane_Field1; //!< Source pic phys addr (V plane, Field 1) IMG_UINT32 ui32HostContext; //!< Host context value IMG_UINT8 ui8DisplayOrderNum; //!< Number of frames in the stream (incl. skipped) IMG_UINT8 ui8SlotNum; //!< Number of frames in the stream (incl. skipped) IMG_UINT8 uiReserved1; IMG_UINT8 uiReserved2; } IMG_SOURCE_BUFFER_PARAMS; /*! *********************************************************************************** @Description : PROVIDE_BUFFER - Details of the reference picture buffer ************************************************************************************/ typedef struct tag_IMG_BUFFER_REF_DATA { IMG_INT8 i8HeaderSlotNum; //!< Slot from which to read the slice header (-1 if none) IMG_BOOL8 b8LongTerm; //!< Flag identifying the reference as long-term } IMG_BUFFER_REF_DATA; /*! *********************************************************************************** @Description : PROVIDE_BUFFER - Details of the coded buffer ************************************************************************************/ typedef struct tag_IMG_BUFFER_CODED_DATA { IMG_UINT32 ui32Size; //!< Size of coded buffer in bytes IMG_UINT8 ui8SlotNum; //!< Slot in firmware that this coded buffer should occupy } IMG_BUFFER_CODED_DATA; /*! * ***************************************************************************** * @details PROVIDE_REF_BUFFER - Purpose of the reference buffer * @brief Purpose of the reference buffer *****************************************************************************/ typedef enum _buffer_type_ { IMG_BUFFER_REF0 = 0, IMG_BUFFER_REF1, IMG_BUFFER_RECON, } IMG_REF_BUFFER_TYPE; /*********************************************************************************** @PICMGMT - functions ************************************************************************************/ VAStatus tng_picmgmt_update(context_ENC_p ctx, IMG_PICMGMT_TYPE eType, unsigned int ref); /*********************************************************************************** @PROVIDE_BUFFER - functions ************************************************************************************/ IMG_UINT32 tng_send_codedbuf(context_ENC_p ctx, IMG_UINT32 ui32SlotIndex); IMG_UINT32 tng_send_source_frame(context_ENC_p ctx, IMG_UINT32 ui32SlotIndex, IMG_UINT32 ui32DisplayOrder); IMG_UINT32 tng_send_rec_frames(context_ENC_p ctx, IMG_INT8 i8HeaderSlotNum, IMG_BOOL bLongTerm); IMG_UINT32 tng_send_ref_frames(context_ENC_p ctx, IMG_UINT32 ui32RefIndex, IMG_BOOL bLongTerm); #endif //_TNG_PICMGMT_H_