| /* |
| * 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 <edward.lin@intel.com> |
| * |
| */ |
| #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_ |