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 unsigned int i; 86 87 fw_table_t topaz_fw_table[] = { 88 /* index header 89 * { ver, codec, text_size, data_size, date_location } 90 * fw_text fw_data */ 91 { 0, {0, 0, 0, 0, 0}, NULL, NULL }, 92 { 93 FW_H264_NO_RC, 94 { 95 FW_VER, 96 FW_H264_NO_RC, 97 ui32H264_MTXTOPAZFWTextSize, 98 ui32H264_MTXTOPAZFWDataSize, 99 ui32H264_MTXTOPAZFWDataLocation 100 }, 101 aui32H264_MTXTOPAZFWText, aui32H264_MTXTOPAZFWData 102 }, 103 104 { 105 FW_H264_VBR, 106 { 107 FW_VER, 108 FW_H264_VBR, 109 ui32H264VBR_MTXTOPAZFWTextSize, 110 ui32H264VBR_MTXTOPAZFWDataSize, 111 ui32H264VBR_MTXTOPAZFWDataLocation 112 }, 113 aui32H264VBR_MTXTOPAZFWText, aui32H264VBR_MTXTOPAZFWData 114 }, 115 116 { 117 FW_H264_CBR, 118 { 119 FW_VER, 120 FW_H264_CBR, 121 ui32H264CBR_MTXTOPAZFWTextSize, 122 ui32H264CBR_MTXTOPAZFWDataSize, 123 ui32H264CBR_MTXTOPAZFWDataLocation 124 }, 125 aui32H264CBR_MTXTOPAZFWText, 126 aui32H264CBR_MTXTOPAZFWData 127 }, 128 129 { 130 FW_H264_VCM, 131 { 132 FW_VER, 133 FW_H264_VCM, 134 ui32H264VCM_MTXTOPAZFWTextSize, 135 ui32H264VCM_MTXTOPAZFWDataSize, 136 ui32H264VCM_MTXTOPAZFWDataLocation 137 }, 138 aui32H264VCM_MTXTOPAZFWText, 139 aui32H264VCM_MTXTOPAZFWData 140 }, 141 142 { 143 FW_H263_NO_RC, 144 { 145 FW_VER, 146 FW_H263_NO_RC, 147 ui32H263_MTXTOPAZFWTextSize, 148 ui32H263_MTXTOPAZFWDataSize, 149 ui32H263_MTXTOPAZFWDataLocation 150 }, 151 aui32H263_MTXTOPAZFWText, 152 aui32H263_MTXTOPAZFWData 153 }, 154 155 { 156 FW_H263_VBR, 157 { 158 FW_VER, 159 FW_H263_VBR, 160 ui32H263VBR_MTXTOPAZFWTextSize, 161 ui32H263VBR_MTXTOPAZFWDataSize, 162 ui32H263VBR_MTXTOPAZFWDataLocation 163 }, 164 aui32H263VBR_MTXTOPAZFWText, 165 aui32H263VBR_MTXTOPAZFWData 166 }, 167 168 { 169 FW_H263_CBR, 170 { 171 FW_VER, 172 FW_H263_CBR, 173 ui32H263CBR_MTXTOPAZFWTextSize, 174 ui32H263CBR_MTXTOPAZFWDataSize, 175 ui32H263CBR_MTXTOPAZFWDataLocation 176 }, 177 aui32H263CBR_MTXTOPAZFWText, 178 aui32H263CBR_MTXTOPAZFWData 179 }, 180 181 { 182 FW_MPEG4_NO_RC, 183 { 184 FW_VER, 185 FW_MPEG4_NO_RC, 186 ui32MPG4_MTXTOPAZFWTextSize, 187 ui32MPG4_MTXTOPAZFWDataSize, 188 ui32MPG4_MTXTOPAZFWDataLocation 189 }, 190 aui32MPG4_MTXTOPAZFWText, 191 aui32MPG4_MTXTOPAZFWData 192 }, 193 194 { 195 FW_MPEG4_VBR, 196 { 197 FW_VER, 198 FW_MPEG4_VBR, 199 ui32MPG4VBR_MTXTOPAZFWTextSize, 200 ui32MPG4VBR_MTXTOPAZFWDataSize, 201 ui32MPG4VBR_MTXTOPAZFWDataLocation 202 }, 203 aui32MPG4VBR_MTXTOPAZFWText, 204 aui32MPG4VBR_MTXTOPAZFWData 205 }, 206 207 { 208 FW_MPEG4_CBR, 209 { 210 FW_VER, 211 FW_MPEG4_CBR, 212 ui32MPG4CBR_MTXTOPAZFWTextSize, 213 ui32MPG4CBR_MTXTOPAZFWDataSize, 214 ui32MPG4CBR_MTXTOPAZFWDataLocation 215 }, 216 aui32MPG4CBR_MTXTOPAZFWText, 217 aui32MPG4CBR_MTXTOPAZFWData 218 } 219 }; 220 221 /* open file */ 222 fp = fopen(FW_FILE_NAME, "w"); 223 224 if (NULL == fp) 225 return -1; 226 /* write fw table into the file */ 227 while (iter < FW_NUM) { 228 /* record the size use bytes */ 229 topaz_fw_table[iter].header.data_size *= 4; 230 topaz_fw_table[iter].header.text_size *= 4; 231 232 /* write header */ 233 fwrite(&(topaz_fw_table[iter].header), sizeof(topaz_fw_table[iter].header), 1, fp); 234 235 /* write text */ 236 size = topaz_fw_table[iter].header.text_size; 237 fwrite(topaz_fw_table[iter].fw_text, 1, size, fp); 238 239 /* write data */ 240 size = topaz_fw_table[iter].header.data_size; 241 fwrite(topaz_fw_table[iter].fw_data, 1, size, fp); 242 243 ++iter; 244 } 245 246 /* close file */ 247 fclose(fp); 248 249 return 0; 250 } 251