⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 config.c

📁 这是一个新的知识的运用我还看不懂
💻 C
📖 第 1 页 / 共 5 页
字号:
		for (i=0; i<sizeof(video_fps_list)/sizeof(named_float_t); i++)			SendDlgItemMessage(hDlg, IDC_BITRATE_FPS, CB_ADDSTRING, 0, (LPARAM)video_fps_list[i].name);		for (i=0; i<sizeof(audio_type_list)/sizeof(named_int_t); i++)			SendDlgItemMessage(hDlg, IDC_BITRATE_AFORMAT, CB_ADDSTRING, 0, (LPARAM)audio_type_list[i].name);		SendDlgItemMessage(hDlg, IDC_BITRATE_ARATE, CB_ADDSTRING, 0, (LPARAM)"32");		SendDlgItemMessage(hDlg, IDC_BITRATE_ARATE, CB_ADDSTRING, 0, (LPARAM)"56");		SendDlgItemMessage(hDlg, IDC_BITRATE_ARATE, CB_ADDSTRING, 0, (LPARAM)"64");		SendDlgItemMessage(hDlg, IDC_BITRATE_ARATE, CB_ADDSTRING, 0, (LPARAM)"96");		SendDlgItemMessage(hDlg, IDC_BITRATE_ARATE, CB_ADDSTRING, 0, (LPARAM)"112");		SendDlgItemMessage(hDlg, IDC_BITRATE_ARATE, CB_ADDSTRING, 0, (LPARAM)"128");		SendDlgItemMessage(hDlg, IDC_BITRATE_ARATE, CB_ADDSTRING, 0, (LPARAM)"160");		SendDlgItemMessage(hDlg, IDC_BITRATE_ARATE, CB_ADDSTRING, 0, (LPARAM)"192");		SendDlgItemMessage(hDlg, IDC_BITRATE_ARATE, CB_ADDSTRING, 0, (LPARAM)"224");		SendDlgItemMessage(hDlg, IDC_BITRATE_ARATE, CB_ADDSTRING, 0, (LPARAM)"256");		SendDlgItemMessage(hDlg, IDC_BITRATE_ARATE, CB_ADDSTRING, 0, (LPARAM)"384");		SendDlgItemMessage(hDlg, IDC_BITRATE_ARATE, CB_ADDSTRING, 0, (LPARAM)"448");		SendDlgItemMessage(hDlg, IDC_BITRATE_ARATE, CB_ADDSTRING, 0, (LPARAM)"512");		break;	case IDD_ZONE :		EnableDlgWindow(hDlg, IDC_ZONE_FETCH, config->ci_valid);		break;	case IDD_MOTION :		SendDlgItemMessage(hDlg, IDC_MOTION, CB_ADDSTRING, 0, (LPARAM)"0 - None");		SendDlgItemMessage(hDlg, IDC_MOTION, CB_ADDSTRING, 0, (LPARAM)"1 - Very Low");		SendDlgItemMessage(hDlg, IDC_MOTION, CB_ADDSTRING, 0, (LPARAM)"2 - Low");		SendDlgItemMessage(hDlg, IDC_MOTION, CB_ADDSTRING, 0, (LPARAM)"3 - Medium");		SendDlgItemMessage(hDlg, IDC_MOTION, CB_ADDSTRING, 0, (LPARAM)"4 - High");		SendDlgItemMessage(hDlg, IDC_MOTION, CB_ADDSTRING, 0, (LPARAM)"5 - Very High");		SendDlgItemMessage(hDlg, IDC_MOTION, CB_ADDSTRING, 0, (LPARAM)"6 - Ultra High");		SendDlgItemMessage(hDlg, IDC_VHQ, CB_ADDSTRING, 0, (LPARAM)"0 - Off");		SendDlgItemMessage(hDlg, IDC_VHQ, CB_ADDSTRING, 0, (LPARAM)"1 - Mode Decision");		SendDlgItemMessage(hDlg, IDC_VHQ, CB_ADDSTRING, 0, (LPARAM)"2 - Limited Search");		SendDlgItemMessage(hDlg, IDC_VHQ, CB_ADDSTRING, 0, (LPARAM)"3 - Medium Search");		SendDlgItemMessage(hDlg, IDC_VHQ, CB_ADDSTRING, 0, (LPARAM)"4 - Wide Search");		break;	case IDD_DEBUG :		/* force threads disabled */		EnableWindow(GetDlgItem(hDlg, IDC_NUMTHREADS_STATIC), FALSE);		EnableWindow(GetDlgItem(hDlg, IDC_NUMTHREADS), FALSE);		SendDlgItemMessage(hDlg, IDC_FOURCC, CB_ADDSTRING, 0, (LPARAM)"XVID");		SendDlgItemMessage(hDlg, IDC_FOURCC, CB_ADDSTRING, 0, (LPARAM)"DIVX");		SendDlgItemMessage(hDlg, IDC_FOURCC, CB_ADDSTRING, 0, (LPARAM)"DX50");		break;	}}/* enable/disable controls based on encoder-mode or user selection */static void adv_mode(HWND hDlg, int idd, CONFIG * config){	int profile;	int weight_en, quant_en;	int cpu_force;	int custom_quant, bvops;	int ar_mode, ar_par;	switch(idd) {	case IDD_PROFILE :		profile = SendDlgItemMessage(hDlg, IDC_PROFILE_PROFILE, CB_GETCURSEL, 0, 0);		EnableDlgWindow(hDlg, IDC_BVOP, profiles[profile].flags&PROFILE_BVOP);		EnableDlgWindow(hDlg, IDC_QUANTTYPE_S, profiles[profile].flags&PROFILE_MPEGQUANT);		EnableDlgWindow(hDlg, IDC_QUANTTYPE_S, profiles[profile].flags&PROFILE_MPEGQUANT);		EnableDlgWindow(hDlg, IDC_QUANTTYPE, profiles[profile].flags&PROFILE_MPEGQUANT);		custom_quant = (profiles[profile].flags&PROFILE_MPEGQUANT) && SendDlgItemMessage(hDlg, IDC_QUANTTYPE, CB_GETCURSEL, 0, 0)==QUANT_MODE_CUSTOM;		EnableDlgWindow(hDlg, IDC_QUANTMATRIX, custom_quant);		EnableDlgWindow(hDlg, IDC_LUMMASK, profiles[profile].flags&PROFILE_ADAPTQUANT);		EnableDlgWindow(hDlg, IDC_INTERLACING, profiles[profile].flags&PROFILE_INTERLACE);		EnableDlgWindow(hDlg, IDC_QPEL, profiles[profile].flags&PROFILE_QPEL);		EnableDlgWindow(hDlg, IDC_GMC, profiles[profile].flags&PROFILE_GMC);		EnableDlgWindow(hDlg, IDC_REDUCED, profiles[profile].flags&PROFILE_REDUCED);		bvops = (profiles[profile].flags&PROFILE_BVOP) && IsDlgChecked(hDlg, IDC_BVOP);		EnableDlgWindow(hDlg, IDC_MAXBFRAMES,	   bvops);		EnableDlgWindow(hDlg, IDC_BQUANTRATIO,	  bvops);		EnableDlgWindow(hDlg, IDC_BQUANTOFFSET,	 bvops);		EnableDlgWindow(hDlg, IDC_MAXBFRAMES_S,	 bvops);		EnableDlgWindow(hDlg, IDC_BQUANTRATIO_S,	bvops);		EnableDlgWindow(hDlg, IDC_BQUANTOFFSET_S,   bvops);		EnableDlgWindow(hDlg, IDC_PACKED,		   bvops);		EnableDlgWindow(hDlg, IDC_CLOSEDGOV,		bvops);		break;	case IDD_AR:		ar_mode = IsDlgChecked(hDlg, IDC_PAR);		EnableDlgWindow(hDlg, IDC_ASPECT_RATIO, ar_mode);		ar_par = SendDlgItemMessage(hDlg, IDC_ASPECT_RATIO, CB_GETCURSEL, 0, 0);		if (ar_par == 5) { /* custom par */			SetDlgItemInt(hDlg, IDC_PARY, config->par_y, FALSE);			SetDlgItemInt(hDlg, IDC_PARX, config->par_x, FALSE);			EnableDlgWindow(hDlg, IDC_PARX, ar_mode);			EnableDlgWindow(hDlg, IDC_PARY, ar_mode);		} else {			SetDlgItemInt(hDlg, IDC_PARX, PARS[ar_par][0], FALSE);			SetDlgItemInt(hDlg, IDC_PARY, PARS[ar_par][1], FALSE);			EnableDlgWindow(hDlg, IDC_PARX, FALSE);			EnableDlgWindow(hDlg, IDC_PARY, FALSE);		}		ar_mode = IsDlgChecked(hDlg, IDC_AR);		config->ar_x = config_get_uint(hDlg, IDC_ARX, config->ar_x);		config->ar_y = config_get_uint(hDlg, IDC_ARY, config->ar_y);		EnableDlgWindow(hDlg, IDC_ARX, ar_mode);		EnableDlgWindow(hDlg, IDC_ARY, ar_mode);		break;	case IDD_LEVEL :		profile = SendDlgItemMessage(hDlg, IDC_LEVEL_PROFILE, CB_GETCURSEL, 0, 0);		SetDlgItemInt(hDlg, IDC_LEVEL_WIDTH, profiles[profile].width, FALSE);		SetDlgItemInt(hDlg, IDC_LEVEL_HEIGHT, profiles[profile].height, FALSE);		SetDlgItemInt(hDlg, IDC_LEVEL_FPS, profiles[profile].fps, FALSE);		SetDlgItemInt(hDlg, IDC_LEVEL_VMV, profiles[profile].max_vmv_buffer_sz, FALSE);		SetDlgItemInt(hDlg, IDC_LEVEL_VCV, profiles[profile].vcv_decoder_rate, FALSE);		SetDlgItemInt(hDlg, IDC_LEVEL_VBV, profiles[profile].max_vbv_size, FALSE);		SetDlgItemInt(hDlg, IDC_LEVEL_BITRATE, profiles[profile].max_bitrate, FALSE);		break;	case IDD_BITRATE :		{			int ctype = SendDlgItemMessage(hDlg, IDC_BITRATE_CFORMAT, CB_GETCURSEL, 0, 0);			int target_size = config_get_cbuint(hDlg, IDC_BITRATE_TSIZE, 0);			int subtitle_size = config_get_uint(hDlg, IDC_BITRATE_SSIZE, 0);			int fps = SendDlgItemMessage(hDlg, IDC_BITRATE_FPS, CB_GETCURSEL, 0, 0);			int duration = 				3600 * config_get_uint(hDlg, IDC_BITRATE_HOURS, 0) +				60 * config_get_uint(hDlg, IDC_BITRATE_MINUTES, 0) +				config_get_uint(hDlg, IDC_BITRATE_SECONDS, 0);			int audio_type = SendDlgItemMessage(hDlg, IDC_BITRATE_AFORMAT, CB_GETCURSEL, 0, 0);			int audio_mode = IsDlgChecked(hDlg, IDC_BITRATE_AMODE_SIZE);			int audio_rate = config_get_cbuint(hDlg, IDC_BITRATE_ARATE, 0);			int audio_size = config_get_uint(hDlg, IDC_BITRATE_ASIZE, 0);			int frames;			int overhead;			int vsize;			if (duration == 0) 				break;			if (fps < 0 || fps >= sizeof(video_fps_list)/sizeof(named_float_t)) {				fps = 0;			}			if (audio_type < 0 || audio_type >= sizeof(audio_type_list)/sizeof(named_int_t)) {				audio_type = 0;			}			EnableDlgWindow(hDlg, IDC_BITRATE_AMODE_RATE, audio_type!=NO_AUDIO);			EnableDlgWindow(hDlg, IDC_BITRATE_AMODE_SIZE, audio_type!=NO_AUDIO);			EnableDlgWindow(hDlg, IDC_BITRATE_ARATE, audio_type!=NO_AUDIO && !audio_mode);			EnableDlgWindow(hDlg, IDC_BITRATE_ASIZE, audio_type!=NO_AUDIO && audio_mode);			EnableDlgWindow(hDlg, IDC_BITRATE_ASELECT, audio_type!=NO_AUDIO && audio_mode);			/* step 1: calculate number of frames */			frames = (int)(duration * video_fps_list[fps].value);						/* step 2: calculate audio_size (kbytes)*/			if (audio_type!=NO_AUDIO) {				if (audio_mode==0) {					audio_size = (1000 * duration * audio_rate) / (8*1024);				}			}else{				audio_size = 0;			}			/* step 3: calculate container overhead */			switch(ctype) {			case 0 :	/* AVI */			case 1 :	/* AVI-OpenDML */				overhead = frames;				if (audio_type!=NO_AUDIO) {					overhead += (duration * 1000) / audio_type_list[audio_type].avi_interval;				}				overhead *= (ctype==0) ? 24 : 16;				overhead /= 1024;				break;			case 2 :	/* Matroska: gknot formula */				/* common overhead */				overhead = 40 + 12 + 8+ 16*duration + 200 + 100*1/*one audio stream*/ + 11*duration;				/* video overhead */				overhead += frames*8 + (int)(frames * 4 * 0.94);				/* cue tables and menu seek entries (300k default) */				overhead += 300 * 1024;				/* audio */				overhead += (int)(duration * audio_type_list[audio_type].mkv_multiplier);				overhead /= 1024;				break;			case 3 :	/* OGM: inaccurate model */				overhead = (int)(0.0039F * (target_size - subtitle_size));				break;			default	:	/* (none) */				overhead = 0;				break;			}			SetDlgItemInt(hDlg, IDC_BITRATE_COVERHEAD, overhead, TRUE);			/* final video bitstream size */			vsize = target_size - subtitle_size - audio_size - overhead;			if (vsize > 0) {				SetDlgItemInt(hDlg, IDC_BITRATE_VSIZE, vsize, TRUE);				/* convert from kbytes to kbits-per-second */				SetDlgItemInt(hDlg, IDC_BITRATE_VRATE, (vsize * 8 * 128) / (duration * 125), TRUE);			}else{				SetDlgItemText(hDlg, IDC_BITRATE_VSIZE, "Overflow");				SetDlgItemText(hDlg, IDC_BITRATE_VRATE, "Overflow");			}		}		break;	case IDD_ZONE :		weight_en = IsDlgChecked(hDlg, IDC_ZONE_MODE_WEIGHT);		quant_en =   IsDlgChecked(hDlg, IDC_ZONE_MODE_QUANT);		EnableDlgWindow(hDlg, IDC_ZONE_WEIGHT, weight_en);		EnableDlgWindow(hDlg, IDC_ZONE_QUANT, quant_en);		EnableDlgWindow(hDlg, IDC_ZONE_SLIDER, weight_en|quant_en);		if (weight_en) {			SendDlgItemMessage(hDlg, IDC_ZONE_SLIDER, TBM_SETRANGE, TRUE, MAKELONG(001,200));			SendDlgItemMessage(hDlg, IDC_ZONE_SLIDER, TBM_SETPOS, TRUE, get_dlgitem_float(hDlg, IDC_ZONE_WEIGHT, 100));			SetDlgItemText(hDlg, IDC_ZONE_MIN, "0.01");			SetDlgItemText(hDlg, IDC_ZONE_MAX, "2.00");		}else if (quant_en) {			SendDlgItemMessage(hDlg, IDC_ZONE_SLIDER, TBM_SETRANGE, TRUE, MAKELONG(100,3100));			SendDlgItemMessage(hDlg, IDC_ZONE_SLIDER, TBM_SETPOS, TRUE, get_dlgitem_float(hDlg, IDC_ZONE_QUANT, 100));			SetDlgItemText(hDlg, IDC_ZONE_MIN, "1");			SetDlgItemText(hDlg, IDC_ZONE_MAX, "31");		}		bvops = (profiles[config->profile].flags&PROFILE_BVOP) && config->use_bvop;		EnableDlgWindow(hDlg, IDC_ZONE_BVOPTHRESHOLD_S, bvops);		EnableDlgWindow(hDlg, IDC_ZONE_BVOPTHRESHOLD, bvops);		break;	case IDD_DEBUG :		cpu_force			= IsDlgChecked(hDlg, IDC_CPU_FORCE);		EnableDlgWindow(hDlg, IDC_CPU_MMX,		cpu_force);		EnableDlgWindow(hDlg, IDC_CPU_MMXEXT,	cpu_force);		EnableDlgWindow(hDlg, IDC_CPU_SSE,		cpu_force);		EnableDlgWindow(hDlg, IDC_CPU_SSE2,		cpu_force);		EnableDlgWindow(hDlg, IDC_CPU_3DNOW,	cpu_force);		EnableDlgWindow(hDlg, IDC_CPU_3DNOWEXT,	cpu_force);		break;	}}/* upload config data into dialog */static void adv_upload(HWND hDlg, int idd, CONFIG * config){	switch (idd)	{	case IDD_PROFILE :		SendDlgItemMessage(hDlg, IDC_PROFILE_PROFILE, CB_SETCURSEL, config->profile, 0);		SendDlgItemMessage(hDlg, IDC_QUANTTYPE, CB_SETCURSEL, config->quant_type, 0);		CheckDlg(hDlg, IDC_LUMMASK, config->lum_masking);  		CheckDlg(hDlg, IDC_INTERLACING, config->interlacing);		CheckDlg(hDlg, IDC_QPEL, config->qpel);  		CheckDlg(hDlg, IDC_GMC, config->gmc);		CheckDlg(hDlg, IDC_REDUCED, config->reduced_resolution);		CheckDlg(hDlg, IDC_BVOP, config->use_bvop);		SetDlgItemInt(hDlg, IDC_MAXBFRAMES, config->max_bframes, FALSE);		set_dlgitem_float(hDlg, IDC_BQUANTRATIO, config->bquant_ratio);		set_dlgitem_float(hDlg, IDC_BQUANTOFFSET, config->bquant_offset);		CheckDlg(hDlg, IDC_PACKED, config->packed);		CheckDlg(hDlg, IDC_CLOSEDGOV, config->closed_gov);		break;	case IDD_AR:		CheckRadioButton(hDlg, IDC_AR, IDC_PAR, config->ar_mode == 0 ? IDC_PAR : IDC_AR);		SendDlgItemMessage(hDlg, IDC_ASPECT_RATIO, CB_SETCURSEL, (config->display_aspect_ratio), 0);		SetDlgItemInt(hDlg, IDC_ARX, config->ar_x, FALSE);		SetDlgItemInt(hDlg, IDC_ARY, config->ar_y, FALSE);		break;	case IDD_LEVEL :		SendDlgItemMessage(hDlg, IDC_LEVEL_PROFILE, CB_SETCURSEL, config->profile, 0);		break;	case IDD_RC_CBR :		SetDlgItemInt(hDlg, IDC_CBR_REACTIONDELAY, config->rc_reaction_delay_factor, FALSE);		SetDlgItemInt(hDlg, IDC_CBR_AVERAGINGPERIOD, config->rc_averaging_period, FALSE);		SetDlgItemInt(hDlg, IDC_CBR_BUFFER, config->rc_buffer, FALSE);		break;	case IDD_RC_2PASS1 :		SetDlgItemText(hDlg, IDC_STATS, config->stats);		CheckDlg(hDlg, IDC_DISCARD1PASS, config->discard1pass);		CheckDlg(hDlg, IDC_FULL1PASS, config->full1pass);		break;	case IDD_RC_2PASS2 :		SetDlgItemText(hDlg, IDC_STATS, config->stats);		SetDlgItemInt(hDlg, IDC_KFBOOST, config->keyframe_boost, FALSE);		SetDlgItemInt(hDlg, IDC_KFREDUCTION, config->kfreduction, FALSE);		SetDlgItemInt(hDlg, IDC_OVERFLOW_CONTROL_STRENGTH, config->overflow_control_strength, FALSE);		SetDlgItemInt(hDlg, IDC_OVERIMP, config->twopass_max_overflow_improvement, FALSE);		SetDlgItemInt(hDlg, IDC_OVERDEG, config->twopass_max_overflow_degradation, FALSE);		SetDlgItemInt(hDlg, IDC_CURVECOMPH, config->curve_compression_high, FALSE);		SetDlgItemInt(hDlg, IDC_CURVECOMPL, config->curve_compression_low, FALSE);		SetDlgItemInt(hDlg, IDC_MINKEY, config->kfthreshold, FALSE);		break;	case IDD_BITRATE :		SendDlgItemMessage(hDlg, IDC_BITRATE_CFORMAT, CB_SETCURSEL, config->container_type, 0);		SetDlgItemInt(hDlg, IDC_BITRATE_TSIZE, config->target_size, FALSE);		SetDlgItemInt(hDlg, IDC_BITRATE_SSIZE, config->subtitle_size, FALSE);		SetDlgItemInt(hDlg, IDC_BITRATE_HOURS, config->hours, FALSE);		SetDlgItemInt(hDlg, IDC_BITRATE_MINUTES, config->minutes, FALSE);		SetDlgItemInt(hDlg, IDC_BITRATE_SECONDS, config->seconds, FALSE);		SendDlgItemMessage(hDlg, IDC_BITRATE_FPS, CB_SETCURSEL, config->fps, 0);				SendDlgItemMessage(hDlg, IDC_BITRATE_AFORMAT, CB_SETCURSEL, config->audio_type, 0);		CheckRadioButton(hDlg, IDC_BITRATE_AMODE_RATE, IDC_BITRATE_AMODE_SIZE, config->audio_mode == 0 ? IDC_BITRATE_AMODE_RATE : IDC_BITRATE_AMODE_SIZE);		SetDlgItemInt(hDlg, IDC_BITRATE_ARATE, config->audio_rate, FALSE);		SetDlgItemInt(hDlg, IDC_BITRATE_ASIZE, config->audio_size, FALSE);		break;	case IDD_ZONE :		SetDlgItemInt(hDlg, IDC_ZONE_FRAME, config->zones[config->cur_zone].frame, FALSE);		CheckDlgButton(hDlg, IDC_ZONE_MODE_WEIGHT,   config->zones[config->cur_zone].mode == RC_ZONE_WEIGHT);		CheckDlgButton(hDlg, IDC_ZONE_MODE_QUANT,		 config->zones[config->cur_zone].mode == RC_ZONE_QUANT);		set_dlgitem_float(hDlg, IDC_ZONE_WEIGHT, config->zones[config->cur_zone].weight);		set_dlgitem_float(hDlg, IDC_ZONE_QUANT, config->zones[config->cur_zone].quant);	 		CheckDlgButton(hDlg, IDC_ZONE_FORCEIVOP, config->zones[config->cur_zone].type==XVID_TYPE_IVOP);		CheckDlgButton(hDlg, IDC_ZONE_GREYSCALE, config->zones[config->cur_zone].greyscale);		CheckDlgButton(hDlg, IDC_ZONE_CHROMAOPT, config->zones[config->cur_zone].chroma_opt);		SetDlgItemInt(hDlg, IDC_ZONE_BVOPTHRESHOLD, config->zones[config->cur_zone].bvop_threshold, TRUE);		break;	case IDD_MOTION :		SendDlgItemMessage(hDlg, IDC_MOTION, CB_SETCURSEL, config->motion_search, 0);		SendDlgItemMessage(hDlg, IDC_VHQ, CB_SETCURSEL, config->vhq_mode, 0);		CheckDlg(hDlg, IDC_CHROMAME, config->chromame);		CheckDlg(hDlg, IDC_CARTOON, config->cartoon_mode);		CheckDlg(hDlg, IDC_TURBO, config->turbo);		SetDlgItemInt(hDlg, IDC_FRAMEDROP, config->frame_drop_ratio, FALSE);		SetDlgItemInt(hDlg, IDC_MAXKEY, config->max_key_interval, FALSE);		break;	case IDD_QUANT :		SetDlgItemInt(hDlg, IDC_MINIQUANT, config->min_iquant, FALSE);		SetDlgItemInt(hDlg, IDC_MAXIQUANT, config->max_iquant, FALSE);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -