/*
* 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:
* Elaine Wang <elaine.wang@intel.com>
*
*/
#include <stdio.h>
#include "JPEGMasterFirmware_bin.h"
#include "JPEGSlaveFirmware_bin.h"
#include "H263MasterFirmware_bin.h"
#include "H263MasterFirmwareCBR_bin.h"
#include "H263MasterFirmwareVBR_bin.h"
#include "H264MasterFirmware_bin.h"
#include "H264MasterFirmwareCBR_bin.h"
#include "H264MasterFirmwareVCM_bin.h"
#include "H264MasterFirmwareVBR_bin.h"
#include "MPG4MasterFirmware_bin.h"
#include "MPG4MasterFirmwareCBR_bin.h"
#include "MPG4MasterFirmwareVBR_bin.h"
#include "H263SlaveFirmware_bin.h"
#include "H263SlaveFirmwareCBR_bin.h"
#include "H263SlaveFirmwareVBR_bin.h"
#include "H264SlaveFirmware_bin.h"
#include "H264SlaveFirmwareCBR_bin.h"
#include "H264SlaveFirmwareVBR_bin.h"
#include "H264SlaveFirmwareVCM_bin.h"
#include "MPG4SlaveFirmware_bin.h"
#include "MPG4SlaveFirmwareCBR_bin.h"
#include "MPG4SlaveFirmwareVBR_bin.h"
#define FW_VER 0x60
#define FW_FILE_NAME "topazsc_fw.bin"
#define FW_MASTER_INFO(codec,prefix) \
{ FW_MASTER_##codec,\
{ FW_VER,\
FW_MASTER_##codec,\
ui32##prefix##_MasterMTXTOPAZFWTextSize,\
ui32##prefix##_MasterMTXTOPAZFWDataSize,\
ui32##prefix##_MasterMTXTOPAZFWDataOrigin\
},\
aui32##prefix##_MasterMTXTOPAZFWText, aui32##prefix##_MasterMTXTOPAZFWData \
}
#define FW_SLAVE_INFO(codec,prefix) \
{ FW_SLAVE_##codec,\
{ FW_VER,\
FW_SLAVE_##codec,\
ui32##prefix##_SlaveMTXTOPAZFWTextSize,\
ui32##prefix##_SlaveMTXTOPAZFWDataSize,\
ui32##prefix##_SlaveMTXTOPAZFWDataOrigin\
},\
aui32##prefix##_SlaveMTXTOPAZFWText, aui32##prefix##_SlaveMTXTOPAZFWData \
}
struct topaz_fw_info_item_s {
unsigned short ver;
unsigned short codec;
unsigned int text_size;
unsigned int data_size;
unsigned int data_location;
};
typedef struct topaz_fw_info_item_s topaz_fw_info_item_t;
enum topaz_fw_codec_e {
FW_MASTER_JPEG = 0,
FW_SLAVE_JPEG,
FW_MASTER_H264_NO_RC,
FW_SLAVE_H264_NO_RC,
FW_MASTER_H264_VBR,
FW_SLAVE_H264_VBR,
FW_MASTER_H264_CBR,
FW_SLAVE_H264_CBR,
FW_MASTER_H263_NO_RC,
FW_SLAVE_H263_NO_RC,
FW_MASTER_H263_VBR,
FW_SLAVE_H263_VBR,
FW_MASTER_H263_CBR,
FW_SLAVE_H263_CBR,
FW_MASTER_MPEG4_NO_RC,
FW_SLAVE_MPEG4_NO_RC,
FW_MASTER_MPEG4_VBR,
FW_SLAVE_MPEG4_VBR,
FW_MASTER_MPEG4_CBR,
FW_SLAVE_MPEG4_CBR,
FW_MASTER_H264_VCM,
FW_SLAVE_H264_VCM,
FW_NUM
};
typedef enum topaz_fw_codec_e topaz_fw_codec_t;
struct fw_table_s {
topaz_fw_codec_t index;
topaz_fw_info_item_t header;
unsigned int *fw_text;
unsigned int *fw_data;
};
typedef struct fw_table_s fw_table_t;
int main()
{
FILE *fp = NULL;
topaz_fw_codec_t iter = FW_MASTER_JPEG;
unsigned int size = 0;
fw_table_t topaz_fw_table[] = {
/* index header
* { ver, codec, text_size, data_size, date_location }
* fw_text fw_data */
FW_MASTER_INFO(JPEG, JPEG),
FW_SLAVE_INFO(JPEG, JPEG),
FW_MASTER_INFO(H264_NO_RC, H264),
FW_SLAVE_INFO(H264_NO_RC, H264),
FW_MASTER_INFO(H264_VBR, H264VBR),
FW_SLAVE_INFO(H264_VBR, H264VBR),
FW_MASTER_INFO(H264_CBR, H264CBR),
FW_SLAVE_INFO(H264_CBR, H264CBR),
FW_MASTER_INFO(H263_NO_RC, H263),
FW_SLAVE_INFO(H263_NO_RC, H263),
FW_MASTER_INFO(H263_VBR, H263VBR),
FW_SLAVE_INFO(H263_VBR, H263VBR),
FW_MASTER_INFO(H263_CBR, H263CBR),
FW_SLAVE_INFO(H263_CBR, H263CBR),
FW_MASTER_INFO(MPEG4_NO_RC, MPG4),
FW_SLAVE_INFO(MPEG4_NO_RC, MPG4),
FW_MASTER_INFO(MPEG4_VBR, MPG4VBR),
FW_SLAVE_INFO(MPEG4_VBR, MPG4VBR),
FW_MASTER_INFO(MPEG4_CBR, MPG4CBR),
FW_SLAVE_INFO(MPEG4_CBR, MPG4CBR),
FW_MASTER_INFO(H264_VCM, H264VCM),
FW_SLAVE_INFO(H264_VCM, H264VCM),
};
/* open file */
fp = fopen(FW_FILE_NAME, "w");
if (NULL == fp)
return -1;
/* write fw table into the file */
while (iter < FW_NUM) {
/* record the size use bytes */
topaz_fw_table[iter].header.data_size *= 4;
topaz_fw_table[iter].header.text_size *= 4;
/* write header */
fwrite(&(topaz_fw_table[iter].header), sizeof(topaz_fw_table[iter].header), 1, fp);
/* write text */
size = topaz_fw_table[iter].header.text_size;
fwrite(topaz_fw_table[iter].fw_text, 1, size, fp);
/* write data */
size = topaz_fw_table[iter].header.data_size;
fwrite(topaz_fw_table[iter].fw_data, 1, size, fp);
++iter;
}
/* close file */
fclose(fp);
return 0;
}