www.pudn.com > modifyencini.rar > CODEC_GetDevParam.h
// must use g++ to compile #ifndef _CODEC_GET_DEV_PARAM_H_ #define _CODEC_GET_DEV_PARAM_H_ #include "./CODEC_API.h" #include "./CodecParamStruct.h" #include "./ConfigParamStruct.h" #include "./ComParamStruct.h" #include "./types.h" #include// string class #include // strcpy #include using namespace std; /**initialize Struct*/ void API_InitDevParamStruct (LPVOID pParam) { printf("++API_InitDevParamStruct()\n"); DevParamStruct *param = (DevParamStruct *) pParam; memset(param, 0, sizeof(DevParamStruct)); } void API_InitConfigParamStruct(LPVOID pParam) { printf("++API_InitConfigParamStruct()\n"); ConfigParamStruct *param = (ConfigParamStruct *)pParam; memset(param, 0, sizeof(ConfigParamStruct)); } void API_InitCodecParamStruct(LPVOID pParam) { printf("++API_InitCodecParamStruct()\n"); CodecParamStruct *param = (CodecParamStruct *)pParam; memset(param, 0, sizeof(CodecParamStruct)); } void API_InitComConfigStruct(LPVOID pParam) { printf("++API_InitComConfigStruct()\n"); ComConfigStruct *param = (ComConfigStruct *)pParam; memset(param, 0, sizeof(ComConfigStruct)); } /** given an entry in the format of = , parse it accordingly */ int API_ParseEntry(const string &entry, string &name, string &val) { int eq_pos = entry.find("="); // check to see if entry is valid, can't find "=" if (eq_pos == string::npos) { // entry.c_str() Conversion to C Style Strings printf("expected = entry, got %s instead\n",entry.c_str()); return FAILURE; } // get name name.assign(entry,0,eq_pos); // get value, return the substring behind index eq_pos val = entry.substr(eq_pos+1); return SUCCESS; } /** given a val in the format of ipaddr:port,parse it accordingly */ int API_ParseColon (const string &val, char *pIpaddr, int &port) { string val_ipaddr, val_port; int colon_pos = val.find(":"); // check to see if entry is valid, can't find "=" if (colon_pos == string::npos) { // entry.c_str() Conversion to C Style Strings printf("expected ipaddr:port entry, got %s instead\n",val.c_str()); return FAILURE; } // get ipaddr and port val_ipaddr.assign(val,0,colon_pos); val_port = val.substr(colon_pos+1); sscanf(val_ipaddr.c_str(), "%s", pIpaddr); sscanf(val_port.c_str(), "%d", &port); return SUCCESS; } /** Given an entry in the format of = , ... parse it accordingly.*/ int API_ParseArray( const string &val_num,Net_Addr *pSendlist,int &send_nums) { string val = val_num; int colon_pos = val.find(":"); // check to see if entry is valid if (colon_pos == string::npos) { printf("expected name:value entry, got %s instead\n",val.c_str()); return FAILURE; } string str; send_nums = 0; int semicolon_pos = colon_pos; // init !=0 while (semicolon_pos != string::npos && send_nums < MAX_UCAST_LIST) { semicolon_pos = val.find(","); str.assign(val, 0, semicolon_pos); API_ParseColon(str,pSendlist[send_nums].sIP,pSendlist[send_nums].nPort); send_nums++; val = val.substr(semicolon_pos+1); } // printf("it finds %d destinations in send target list.\n",send_nums); return SUCCESS; } /** parse a given config file */ int API_ParseConfigFile(const char* filename, ConfigParamStruct *pParam) { printf("++API_ParseConfigFile()\n"); FILE *file = fopen(filename, "r"); // open the config file if (file==NULL) { printf("Cannot find config file: %s\n",filename); return FAILURE; } ConfigParamStruct *appparam = NULL; appparam = pParam; string line, name,val,valTemp1,valTemp2; char lineTemp[8*1024]; // read the file content line by line // fgets() return when encounter enter while (fgets(lineTemp, sizeof(lineTemp), file)!=NULL) { if (lineTemp[strlen(lineTemp)-1]=='\n') lineTemp[strlen(lineTemp)-1] = '\0'; // string class: add "using namespace std" and include // member func: swap(),erase(),insert(),clear(),replace()... line.erase(); // clear character string line.insert(0, lineTemp); // insert character string on position index 0 // find function returns the index. If nothing's found, string::npos returned if (line.find_first_not_of(" \t\n\r")==string::npos) continue; // skip ahead if line is empty if (line[0]=='#') continue; // skip ahead if the line is a comment API_ParseEntry(line,name,val); // use line informaton to splits up name and value if (name=="device_type") { if (val == "CODEC") { appparam->DevType=DEV_CODEC; } else if (val == "ENCODER"){ appparam->DevType=DEV_ENCODER; } else if (val == "DECODER"){ appparam->DevType=DEV_DECODER; } else { printf("unknow device type definition detected!\n"); continue; } } else if (name=="device_ID") { sscanf(val.c_str(), "%d", &appparam->DevID); } else if (name=="media_type") { if (val == "VES") { appparam->MediaType = MEDIA_VES; } else if (val == "PS") { appparam->MediaType = MEDIA_PS; } else if (val == "TS") { appparam->MediaType = MEDIA_TS; } else { printf("unknow media type definition detected!\n"); continue; } } else if (name=="transport_protocol") { if (val == "UDP") { appparam->TransProto=PROTO_UDP; } else if (val == "RTP"){ appparam->TransProto=PROTO_RTP; } else { printf("unknow transport protocol definition detected!\n"); continue; } } else if (name=="local_network_ipaddr") { strcpy(appparam->local_network_ipaddr,val.c_str()); } else if (name=="local_network_mask") { strcpy(appparam->local_network_mask,val.c_str()); } else if (name=="local_network_gateway") { strcpy(appparam->local_network_gateway,val.c_str()); } else if (name=="my_port") { sscanf(val.c_str(), "%d", &appparam->my_port); } else if (name=="server_address") { API_ParseColon (val,appparam->server_address.sIP,appparam->server_address.nPort); } else if (name=="control_ipaddr") { strcpy(appparam->control_ipaddr,val.c_str()); } else if (name=="doMulticast") { appparam->doMulticast=(val=="TRUE") || (val=="true"); } else if (name=="multicast_address") { API_ParseColon (val,appparam->multicast_address.sIP,appparam->multicast_address.nPort); } else if (name=="doNetSend") { appparam->doNetSend=(val=="TRUE") || (val=="true"); } else if (name=="send_target_list") { API_ParseArray(val,appparam->send_target_list,appparam->iSendNum); } else if (name=="doFileWrite") { appparam->doFileWrite=(val=="TRUE") || (val=="true"); } else { continue; } } if (fclose(file)!=0) printf("Cannot close config file\n"); return SUCCESS; } /** parse a given codec file */ int API_ParseCodecFile(const char* filename, CodecParamStruct *pParam) { printf("++API_ParseCodecFile()\n"); FILE *file = fopen(filename, "r"); // open the config file if (file==NULL) { printf("Cannot find codec file: %s\n",filename); return FAILURE; } bool bPsFile=false, bTsFile=false,bEsFile=false; if(strstr(filename,"ps")!=NULL) { bPsFile=true; } else if (strstr(filename,"ts")!=NULL) { bTsFile=true; } else if (strstr(filename,"es")!=NULL) { bEsFile=true; } else { printf("codec file name format uncorrect, e.g codec_ps.ini\n"); return FAILURE; } CodecParamStruct *appparam = NULL; appparam = pParam; string line, name,val,valTemp1,valTemp2; char lineTemp[8*1024]; // read the file content line by line // fgets() return when encounter enter while (fgets(lineTemp, sizeof(lineTemp), file)!=NULL) { if (lineTemp[strlen(lineTemp)-1]=='\n') lineTemp[strlen(lineTemp)-1] = '\0'; // string class: add "using namespace std" and include // member func: swap(),erase(),insert(),clear(),replace()... line.erase(); // clear character string line.insert(0, lineTemp); // insert character string on position index 0 // find function returns the index. If nothing's found, string::npos returned if (line.find_first_not_of(" \t\n\r")==string::npos) continue; // skip ahead if line is empty if (line[0]=='#') continue; // skip ahead if the line is a comment API_ParseEntry(line,name,val); // use line informaton to splits up name and value if (bPsFile || bEsFile) { if (name=="vid_horizontal_size_value") { sscanf(val.c_str(), "%d", &appparam->HResolu); } else if (name=="vid_vertical_size_value") { sscanf(val.c_str(), "%d", &appparam->VResolu); } else if (name=="vid_bit_rate") { sscanf(val.c_str(), "%d", &appparam->VidBitRate); } else if (name=="vid_vbv_buffer_size") { sscanf(val.c_str(), "%d", &appparam->VBVSize); } else if (name=="vid_video_format") { sscanf(val.c_str(), "%d", &appparam->VidFmt); } else if (name=="vid_stream_type") { sscanf(val.c_str(), "%d", &appparam->VidMpeg); } else if (name=="aud_sampling_rate") { sscanf(val.c_str(), "%d", &appparam->AudSamRate); } else if (name=="aud_bit_rate") { sscanf(val.c_str(), "%d", &appparam->AudBitRate); } else if (name=="aud_mode") { sscanf(val.c_str(), "%d", &appparam->AudChnMode); } else { continue; } } else { if (name=="video_horizontal_size") { sscanf(val.c_str(), "%d", &appparam->HResolu); } else if (name=="video_vertical_size") { sscanf(val.c_str(), "%d", &appparam->VResolu); } else if (name=="video_bit_rate") { sscanf(val.c_str(), "%d", &appparam->VidBitRate); } else if (name=="video_vbv_buffer_size") { sscanf(val.c_str(), "%d", &appparam->VBVSize); } else if (name=="vid_video_format") { sscanf(val.c_str(), "%d", &appparam->VidFmt); } else if (name=="mux_mpeg_coding_standard") { sscanf(val.c_str(), "%d", &appparam->VidMpeg); } else if (name=="audio_sampling_rate") { sscanf(val.c_str(), "%d", &appparam->AudSamRate); } else if (name=="audio_bit_rate") { sscanf(val.c_str(), "%d", &appparam->AudBitRate); } else if (name=="audio_channel") { sscanf(val.c_str(), "%d", &appparam->AudChnMode); } else { continue; } } } if (fclose(file)!=0) printf("Cannot close file\n"); return SUCCESS; } /** parse a given com config file */ int API_ParseComConfigFile(const char* filename, ComConfigStruct *pParam) { printf("++API_ParseComConfigFile()\n"); FILE *file = fopen(filename, "r"); // open the config file if (file==NULL) { printf("Cannot find com config file: %s\n",filename); return FAILURE; } ComConfigStruct *appparam = NULL; appparam = pParam; string line, name,val,valTemp1,valTemp2; char lineTemp[8*1024]; // read the file content line by line // fgets() return when encounter enter while (fgets(lineTemp, sizeof(lineTemp), file)!=NULL) { if (lineTemp[strlen(lineTemp)-1]=='\n') lineTemp[strlen(lineTemp)-1] = '\0'; // string class: add "using namespace std" and include // member func: swap(),erase(),insert(),clear(),replace()... line.erase(); // clear character string line.insert(0, lineTemp); // insert character string on position index 0 // find function returns the index. If nothing's found, string::npos returned if (line.find_first_not_of(" \t\n\r")==string::npos) continue; // skip ahead if line is empty if (line[0]=='#') continue; // skip ahead if the line is a comment API_ParseEntry(line,name,val); // use line informaton to splits up name and value if (name=="com1_baud_rate") { sscanf(val.c_str(), "%d", &appparam->COM1.BaudRate); } else if (name=="com1_parity_type") { sscanf(val.c_str(), "%c", &appparam->COM1.ParityType); } else if (name=="com1_data_bit") { sscanf(val.c_str(), "%d", &appparam->COM1.DataBitLen); } else if (name=="com1_stop_bit") { sscanf(val.c_str(), "%d", &appparam->COM1.StopBitLen); } else if (name=="com1_hard_flow_ctrl") { appparam->COM1.bHardFlowCtrl=(val=="TRUE") || (val=="true"); } else if (name=="com1_soft_flow_ctrl") { appparam->COM1.bSoftFlowCtrl=(val=="TRUE") || (val=="true"); } else if (name=="com2_baud_rate") { sscanf(val.c_str(), "%d", &appparam->COM2.BaudRate); } else if (name=="com2_parity_type") { sscanf(val.c_str(), "%c", &appparam->COM2.ParityType); } else if (name=="com2_data_bit") { sscanf(val.c_str(), "%d", &appparam->COM2.DataBitLen); } else if (name=="com2_stop_bit") { sscanf(val.c_str(), "%d", &appparam->COM2.StopBitLen); } else if (name=="com2_hard_flow_ctrl") { appparam->COM2.bHardFlowCtrl=(val=="TRUE") || (val=="true"); } else if (name=="com2_soft_flow_ctrl") { appparam->COM2.bSoftFlowCtrl=(val=="TRUE") || (val=="true"); } else if (name=="local_alarm_com") { sscanf(val.c_str(), "%d", &appparam->LocalAlarmCom); } else if (name=="com_remote_address") { API_ParseColon (val,appparam->ComRemoteAddr.sIP,appparam->ComRemoteAddr.nPort); } else { continue; } } if (fclose(file)!=0) printf("Cannot close com config file\n"); return SUCCESS; } /** get config info from config.ini @pParam = pointer to Struct @returen SUCCESS or FAILURE */ int CODEC_GetDevParam (LPVOID pParam) { printf("++CODEC_GetDevParam()\n"); DevParamStruct *dev_param = (DevParamStruct *)pParam; ConfigParamStruct cfg_param; CodecParamStruct codec_param; ComConfigStruct com_cfg; int reval; // initialization API_InitDevParamStruct(dev_param); API_InitConfigParamStruct(&cfg_param); API_InitCodecParamStruct(&codec_param); API_InitComConfigStruct(&com_cfg); // get config param reval = API_ParseConfigFile("./conf/config.ini", &cfg_param); if(reval == FAILURE) { printf("parse config file error, quiting...\n"); return FAILURE; } // get codec param _MEDIA_TYPE_ media_type; char filename[MAX_FILE_NAME_LEN]; media_type = cfg_param.MediaType; if (MEDIA_VES == media_type) { strcpy(filename,"./conf/codec_es.ini"); } else if (MEDIA_PS == media_type) { strcpy(filename,"./conf/codec_ps.ini"); } else if (MEDIA_TS == media_type) { strcpy(filename,"./conf/codec_ts.ini"); } else { printf("CODEC_GetDevParam(): check media type unmatch\n"); return FAILURE; } reval = API_ParseCodecFile(filename, &codec_param); if(reval == FAILURE) { printf("parse codec file error, quiting...\n"); return FAILURE; } // get com config param reval = API_ParseComConfigFile("./conf/config.ini", &com_cfg); if(reval == FAILURE) { printf("parse com config file error, quiting...\n"); return FAILURE; } // get device param // config param dev_param->DevType = cfg_param.DevType; dev_param->DevID = cfg_param.DevID; dev_param->MediaType = cfg_param.MediaType; dev_param->TransProto = cfg_param.TransProto; strcpy(dev_param->local_network_ipaddr ,cfg_param.local_network_ipaddr); strcpy(dev_param->local_network_mask ,cfg_param.local_network_mask); strcpy(dev_param->local_network_gateway,cfg_param.local_network_gateway); dev_param->my_port = cfg_param.my_port; memcpy(&(dev_param->server_address), (char *)&(cfg_param.server_address),sizeof(Net_Addr)); strcpy(dev_param->control_ipaddr, cfg_param.control_ipaddr); dev_param->doMulticast = cfg_param.doMulticast; memcpy(&(dev_param->multicast_address), (char *)&(cfg_param.multicast_address),sizeof(Net_Addr)); dev_param->doNetSend = cfg_param.doNetSend; dev_param->iSendNum = cfg_param.iSendNum; memcpy(&(dev_param->send_target_list), (char *)&(cfg_param.send_target_list), sizeof(cfg_param.send_target_list)); dev_param->doFileWrite = cfg_param.doFileWrite; // video/audio param dev_param->HResolu = codec_param.HResolu; dev_param->VResolu = codec_param.VResolu; dev_param->VidBitRate = codec_param.VidBitRate; dev_param->VBVSize = codec_param.VBVSize; dev_param->VidFmt = codec_param.VidFmt; dev_param->VidMpeg = codec_param.VidMpeg; dev_param->AudSamRate = codec_param.AudSamRate; dev_param->AudBitRate = codec_param.AudBitRate; dev_param->AudChnMode = codec_param.AudChnMode; // com config param dev_param->com1_baud_rate = com_cfg.COM1.BaudRate; dev_param->com1_parity_type = com_cfg.COM1.ParityType; dev_param->com1_data_bit = com_cfg.COM1.DataBitLen; dev_param->com1_stop_bit = com_cfg.COM1.StopBitLen; dev_param->com2_baud_rate = com_cfg.COM2.BaudRate; dev_param->com2_parity_type = com_cfg.COM2.ParityType; dev_param->com2_data_bit = com_cfg.COM2.DataBitLen; dev_param->com2_stop_bit = com_cfg.COM2.StopBitLen; dev_param->local_alarm_com = com_cfg.LocalAlarmCom; memcpy(&(dev_param->com_remote_address), (char *)&(com_cfg.ComRemoteAddr), sizeof(Net_Addr)); return SUCCESS; } #endif