1 2 /*! 3 *********************************************************************** 4 * \file: h264_dpb_ctl.c 5 * 6 *********************************************************************** 7 */ 8 9 //#include <limits.h> 10 11 #include "h264parse.h" 12 13 14 // --------------------------------------------------------------------------- 15 // IMPORTANT: note that in this implementation int c is an int not a char 16 // --------------------------------------------------------------------------- 17 void* h264_memset( void* buf, uint32_t c, uint32_t num ) 18 { 19 uint32_t* buf32 = buf; 20 uint32_t size32 = ( num >> 2 ); 21 uint32_t i; 22 23 for ( i = 0; i < size32; i++ ) 24 { 25 *buf32++ = c; 26 } 27 28 return buf; 29 } 30 31 32 void* h264_memcpy( void* dest, void* src, uint32_t num ) 33 { 34 int32_t* dest32 = dest; 35 int32_t* src32 = src; 36 uint32_t size32 = ( num >> 2 ); 37 uint32_t i; 38 39 for ( i = 0; i < size32; i++ ) 40 { 41 *dest32++ = *src32++; 42 } 43 44 return dest; 45 } 46 47 48 #ifndef USER_MODE 49 50 //h264_Parse_Copy_Sps_To_DDR () copy local sps to ddr mem 51 void h264_Parse_Copy_Pps_To_DDR(h264_Info* pInfo, pic_param_set_ptr PPS, uint32_t nPPSId) 52 { 53 uint32_t copy_size = sizeof(pic_param_set); 54 uint32_t pps_entry_ptr = pInfo->PPS_PADDR_GL+nPPSId*copy_size; 55 56 if(nPPSId < MAX_NUM_PPS) 57 { 58 cp_using_dma(pps_entry_ptr, (uint32_t)PPS, copy_size, 1, 0); 59 } 60 61 return; 62 63 } 64 //end of h264_Parse_Copy_Pps_To_DDR 65 66 67 // h264_Parse_Copy_Pps_From_DDR copy a pps with nPPSId from ddr mem to local PPS 68 void h264_Parse_Copy_Pps_From_DDR(h264_Info* pInfo, pic_param_set_ptr PPS, uint32_t nPPSId) 69 { 70 71 uint32_t copy_size= sizeof(pic_param_set); 72 uint32_t pps_entry_ptr = pInfo->PPS_PADDR_GL+nPPSId*copy_size; 73 74 if( nPPSId < MAX_NUM_PPS) 75 { 76 cp_using_dma(pps_entry_ptr, (uint32_t)PPS, copy_size, 0, 0); 77 } 78 79 return; 80 } 81 //end of h264_Parse_Copy_Pps_From_DDR 82 83 84 //h264_Parse_Copy_Sps_To_DDR () copy local sps to ddr mem with nSPSId 85 void h264_Parse_Copy_Sps_To_DDR(h264_Info* pInfo, seq_param_set_used_ptr SPS, uint32_t nSPSId) 86 { 87 uint32_t copy_size = sizeof(seq_param_set_used); 88 uint32_t sps_entry_ptr = pInfo->SPS_PADDR_GL+nSPSId*sizeof(seq_param_set_all); 89 90 if(nSPSId < MAX_NUM_SPS) 91 { 92 cp_using_dma(sps_entry_ptr, (uint32_t)SPS, copy_size, 1, 0); 93 } 94 95 //OS_INFO("SPS->seq_parameter_set_id = %d\n", SPS->seq_parameter_set_id); 96 97 98 return; 99 } 100 101 //end of h264_Parse_Copy_Sps_To_DDR 102 103 104 // h264_Parse_Copy_Sps_From_DDR copy a sps with nSPSId from ddr mem to local SPS 105 void h264_Parse_Copy_Sps_From_DDR(h264_Info* pInfo, seq_param_set_used_ptr SPS, uint32_t nSPSId) 106 { 107 uint32_t copy_size= sizeof(seq_param_set_used); 108 uint32_t sps_entry_ptr = pInfo->SPS_PADDR_GL+nSPSId*sizeof(seq_param_set_all); 109 110 if(nSPSId < MAX_NUM_SPS) 111 { 112 cp_using_dma(sps_entry_ptr, (uint32_t)SPS, copy_size, 0, 0); 113 } 114 115 return; 116 117 } 118 //end of h264_Parse_Copy_Sps_From_DDR 119 120 //h264_Parse_Copy_Offset_Ref_Frames_To_DDR () copy local offset_ref_frames to ddr mem with nSPSId 121 void h264_Parse_Copy_Offset_Ref_Frames_To_DDR(h264_Info* pInfo, int32_t* pOffset_ref_frames, uint32_t nSPSId) 122 { 123 uint32_t copy_size = sizeof(int32_t)*MAX_NUM_REF_FRAMES_IN_PIC_ORDER_CNT_CYCLE; 124 uint32_t offset_ref_frames_entry_ptr = pInfo->OFFSET_REF_FRAME_PADDR_GL+nSPSId*copy_size; 125 126 if(nSPSId < MAX_NUM_SPS) 127 { 128 //cp_using_dma(offset_ref_frames_entry_ptr, (uint32_t)pOffset_ref_frames, copy_size, 1, 0); 129 h264_memcpy((int32_t *)offset_ref_frames_entry_ptr,pOffset_ref_frames, copy_size); 130 } 131 132 return; 133 } 134 135 //end of h264_Parse_Copy_Offset_Ref_Frames_To_DDR 136 137 138 // h264_Parse_Copy_Offset_Ref_Frames_From_DDR copy a offset_ref_frames with nSPSId from ddr mem to local offset_ref_frames 139 void h264_Parse_Copy_Offset_Ref_Frames_From_DDR(h264_Info* pInfo, int32_t* pOffset_ref_frames, uint32_t nSPSId) 140 { 141 uint32_t copy_size= sizeof(int32_t)*MAX_NUM_REF_FRAMES_IN_PIC_ORDER_CNT_CYCLE; 142 uint32_t offset_ref_frames_entry_ptr = pInfo->OFFSET_REF_FRAME_PADDR_GL+nSPSId*copy_size; 143 144 if(nSPSId < MAX_NUM_SPS) 145 { 146 //cp_using_dma(offset_ref_frames_entry_ptr, (uint32_t)pOffset_ref_frames, copy_size, 0, 0); 147 h264_memcpy(pOffset_ref_frames, (int32_t *)offset_ref_frames_entry_ptr, copy_size); 148 } 149 150 return; 151 152 } 153 //end of h264_Parse_Copy_Offset_Ref_Frames_From_DDR 154 155 156 //h264_Parse_Check_Sps_Updated_Flag () copy local sps to ddr mem with nSPSId 157 uint32_t h264_Parse_Check_Sps_Updated_Flag(h264_Info* pInfo, uint32_t nSPSId) 158 { 159 uint32_t is_updated=0; 160 uint32_t copy_size = sizeof(uint32_t); 161 uint32_t sps_entry_ptr = pInfo->SPS_PADDR_GL+nSPSId*copy_size; 162 163 164 if(nSPSId < MAX_NUM_SPS) 165 { 166 cp_using_dma(sps_entry_ptr, (uint32_t)(&is_updated), copy_size, 1, 0); 167 } 168 169 //OS_INFO("SPS->seq_parameter_set_id = %d\n", SPS->seq_parameter_set_id); 170 171 172 return is_updated; 173 } 174 175 //end of h264_Parse_Check_Sps_Updated_Flag 176 177 178 // h264_Parse_Clear_Sps_Updated_Flag copy a sps with nSPSId from ddr mem to local SPS 179 void h264_Parse_Clear_Sps_Updated_Flag(h264_Info* pInfo, uint32_t nSPSId) 180 { 181 uint32_t is_updated=0; 182 uint32_t copy_size= sizeof(uint32_t); 183 uint32_t sps_entry_ptr = pInfo->SPS_PADDR_GL+nSPSId*copy_size; 184 185 if(nSPSId < MAX_NUM_SPS) 186 { 187 cp_using_dma(sps_entry_ptr, (uint32_t)(&is_updated), copy_size, 0, 0); 188 } 189 190 return; 191 192 } 193 //end of h264_Parse_Clear_Sps_Updated_Flag 194 195 196 #endif 197 198 199