1 /* 2 * Copyright (c) 2011 Intel Corporation. All Rights Reserved. 3 * Copyright (c) Imagination Technologies Limited, UK 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining a 6 * copy of this software and associated documentation files (the 7 * "Software"), to deal in the Software without restriction, including 8 * without limitation the rights to use, copy, modify, merge, publish, 9 * distribute, sub license, and/or sell copies of the Software, and to 10 * permit persons to whom the Software is furnished to do so, subject to 11 * the following conditions: 12 * 13 * The above copyright notice and this permission notice (including the 14 * next paragraph) shall be included in all copies or substantial portions 15 * of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 20 * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR 21 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 22 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 23 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24 * 25 * Authors: 26 * Zeng Li <zeng.li (at) intel.com> 27 * 28 */ 29 30 #include <stdio.h> 31 32 #include "H263Firmware_bin.h" 33 #include "H263FirmwareCBR_bin.h" 34 #include "H263FirmwareVBR_bin.h" 35 #include "H264Firmware_bin.h" 36 #include "H264FirmwareCBR_bin.h" 37 #include "H264FirmwareVBR_bin.h" 38 #include "H264FirmwareVCM_bin.h" 39 #include "MPG4Firmware_bin.h" 40 #include "MPG4FirmwareCBR_bin.h" 41 #include "MPG4FirmwareVBR_bin.h" 42 43 #define FW_VER 146 /* DDKv146 release */ 44 #define FW_FILE_NAME "topaz_fw.bin" 45 46 struct topaz_fw_info_item_s { 47 unsigned short ver; 48 unsigned short codec; 49 50 unsigned int text_size; 51 unsigned int data_size; 52 unsigned int data_location; 53 }; 54 typedef struct topaz_fw_info_item_s topaz_fw_info_item_t; 55 56 enum topaz_fw_codec_e { 57 FW_JPEG = 0, 58 FW_H264_NO_RC, 59 FW_H264_VBR, 60 FW_H264_CBR, 61 FW_H264_VCM, 62 FW_H263_NO_RC, 63 FW_H263_VBR, 64 FW_H263_CBR, 65 FW_MPEG4_NO_RC, 66 FW_MPEG4_VBR, 67 FW_MPEG4_CBR, 68 FW_NUM 69 }; 70 typedef enum topaz_fw_codec_e topaz_fw_codec_t; 71 72 struct fw_table_s { 73 topaz_fw_codec_t index; 74 topaz_fw_info_item_t header; 75 unsigned int *fw_text; 76 unsigned int *fw_data; 77 }; 78 typedef struct fw_table_s fw_table_t; 79 80 int main() 81 { 82 FILE *fp = NULL; 83 topaz_fw_codec_t iter = FW_H264_NO_RC; 84 unsigned int size = 0; 85 86 fw_table_t topaz_fw_table[] = { 87 /* index header 88 * { ver, codec, text_size, data_size, date_location } 89 * fw_text fw_data */ 90 { 0, {0, 0, 0, 0, 0}, NULL, NULL }, 91 { 92 FW_H264_NO_RC, 93 { 94 FW_VER, 95 FW_H264_NO_RC, 96 ui32H264_MTXTOPAZFWTextSize, 97 ui32H264_MTXTOPAZFWDataSize, 98 ui32H264_MTXTOPAZFWDataLocation 99 }, 100 aui32H264_MTXTOPAZFWText, aui32H264_MTXTOPAZFWData 101 }, 102 103 { 104 FW_H264_VBR, 105 { 106 FW_VER, 107 FW_H264_VBR, 108 ui32H264VBR_MTXTOPAZFWTextSize, 109 ui32H264VBR_MTXTOPAZFWDataSize, 110 ui32H264VBR_MTXTOPAZFWDataLocation 111 }, 112 aui32H264VBR_MTXTOPAZFWText, aui32H264VBR_MTXTOPAZFWData 113 }, 114 115 { 116 FW_H264_CBR, 117 { 118 FW_VER, 119 FW_H264_CBR, 120 ui32H264CBR_MTXTOPAZFWTextSize, 121 ui32H264CBR_MTXTOPAZFWDataSize, 122 ui32H264CBR_MTXTOPAZFWDataLocation 123 }, 124 aui32H264CBR_MTXTOPAZFWText, 125 aui32H264CBR_MTXTOPAZFWData 126 }, 127 128 { 129 FW_H264_VCM, 130 { 131 FW_VER, 132 FW_H264_VCM, 133 ui32H264VCM_MTXTOPAZFWTextSize, 134 ui32H264VCM_MTXTOPAZFWDataSize, 135 ui32H264VCM_MTXTOPAZFWDataLocation 136 }, 137 aui32H264VCM_MTXTOPAZFWText, 138 aui32H264VCM_MTXTOPAZFWData 139 }, 140 141 { 142 FW_H263_NO_RC, 143 { 144 FW_VER, 145 FW_H263_NO_RC, 146 ui32H263_MTXTOPAZFWTextSize, 147 ui32H263_MTXTOPAZFWDataSize, 148 ui32H263_MTXTOPAZFWDataLocation 149 }, 150 aui32H263_MTXTOPAZFWText, 151 aui32H263_MTXTOPAZFWData 152 }, 153 154 { 155 FW_H263_VBR, 156 { 157 FW_VER, 158 FW_H263_VBR, 159 ui32H263VBR_MTXTOPAZFWTextSize, 160 ui32H263VBR_MTXTOPAZFWDataSize, 161 ui32H263VBR_MTXTOPAZFWDataLocation 162 }, 163 aui32H263VBR_MTXTOPAZFWText, 164 aui32H263VBR_MTXTOPAZFWData 165 }, 166 167 { 168 FW_H263_CBR, 169 { 170 FW_VER, 171 FW_H263_CBR, 172 ui32H263CBR_MTXTOPAZFWTextSize, 173 ui32H263CBR_MTXTOPAZFWDataSize, 174 ui32H263CBR_MTXTOPAZFWDataLocation 175 }, 176 aui32H263CBR_MTXTOPAZFWText, 177 aui32H263CBR_MTXTOPAZFWData 178 }, 179 180 { 181 FW_MPEG4_NO_RC, 182 { 183 FW_VER, 184 FW_MPEG4_NO_RC, 185 ui32MPG4_MTXTOPAZFWTextSize, 186 ui32MPG4_MTXTOPAZFWDataSize, 187 ui32MPG4_MTXTOPAZFWDataLocation 188 }, 189 aui32MPG4_MTXTOPAZFWText, 190 aui32MPG4_MTXTOPAZFWData 191 }, 192 193 { 194 FW_MPEG4_VBR, 195 { 196 FW_VER, 197 FW_MPEG4_VBR, 198 ui32MPG4VBR_MTXTOPAZFWTextSize, 199 ui32MPG4VBR_MTXTOPAZFWDataSize, 200 ui32MPG4VBR_MTXTOPAZFWDataLocation 201 }, 202 aui32MPG4VBR_MTXTOPAZFWText, 203 aui32MPG4VBR_MTXTOPAZFWData 204 }, 205 206 { 207 FW_MPEG4_CBR, 208 { 209 FW_VER, 210 FW_MPEG4_CBR, 211 ui32MPG4CBR_MTXTOPAZFWTextSize, 212 ui32MPG4CBR_MTXTOPAZFWDataSize, 213 ui32MPG4CBR_MTXTOPAZFWDataLocation 214 }, 215 aui32MPG4CBR_MTXTOPAZFWText, 216 aui32MPG4CBR_MTXTOPAZFWData 217 } 218 }; 219 220 /* open file */ 221 fp = fopen(FW_FILE_NAME, "w"); 222 223 if (NULL == fp) 224 return -1; 225 /* write fw table into the file */ 226 while (iter < FW_NUM) { 227 /* record the size use bytes */ 228 topaz_fw_table[iter].header.data_size *= 4; 229 topaz_fw_table[iter].header.text_size *= 4; 230 231 /* write header */ 232 fwrite(&(topaz_fw_table[iter].header), sizeof(topaz_fw_table[iter].header), 1, fp); 233 234 /* write text */ 235 size = topaz_fw_table[iter].header.text_size; 236 fwrite(topaz_fw_table[iter].fw_text, 1, size, fp); 237 238 /* write data */ 239 size = topaz_fw_table[iter].header.data_size; 240 fwrite(topaz_fw_table[iter].fw_data, 1, size, fp); 241 242 ++iter; 243 } 244 245 /* close file */ 246 fclose(fp); 247 248 return 0; 249 } 250