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

📄 config.c

📁 这是一个压缩解压包,用C语言进行编程的,里面有详细的源代码.
💻 C
📖 第 1 页 / 共 5 页
字号:
				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, (int)(((__int64)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_COMMON :		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_TFF, config->tff);		CheckDlg(hDlg, IDC_QPEL, config->qpel);  		CheckDlg(hDlg, IDC_GMC, config->gmc);		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);		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);		CheckDlg(hDlg, IDC_CARTOON, config->zones[config->cur_zone].cartoon_mode);		SetDlgItemInt(hDlg, IDC_ZONE_BVOPTHRESHOLD, config->zones[config->cur_zone].bvop_threshold, TRUE);		break;	case IDD_MOTION :    {    const int userdef = (config->quality==quality_table_num);    const quality_t* quality_preset = userdef ? &config->quality_user : &quality_table[config->quality];		SendDlgItemMessage(hDlg, IDC_MOTION, CB_SETCURSEL, quality_preset->motion_search, 0);		SendDlgItemMessage(hDlg, IDC_VHQ, CB_SETCURSEL, quality_preset->vhq_mode, 0);		CheckDlg(hDlg, IDC_VHQ_BFRAME, quality_preset->vhq_bframe);		CheckDlg(hDlg, IDC_CHROMAME, quality_preset->chromame);		CheckDlg(hDlg, IDC_TURBO, quality_preset->turbo);		SetDlgItemInt(hDlg, IDC_FRAMEDROP, quality_preset->frame_drop_ratio, FALSE);		SetDlgItemInt(hDlg, IDC_MAXKEY, quality_preset->max_key_interval, FALSE);    EnableDlgWindow(hDlg, IDC_MOTION,     userdef);    EnableDlgWindow(hDlg, IDC_VHQ,        userdef);    EnableDlgWindow(hDlg, IDC_VHQ_BFRAME, userdef);    EnableDlgWindow(hDlg, IDC_CHROMAME,   userdef);    EnableDlgWindow(hDlg, IDC_TURBO,      userdef);    EnableDlgWindow(hDlg, IDC_FRAMEDROP,  userdef);    EnableDlgWindow(hDlg, IDC_MAXKEY,     userdef);		break;    }	case IDD_QUANT :    {    const int userdef = (config->quality==quality_table_num);    const quality_t* quality_preset = userdef ? &config->quality_user : &quality_table[config->quality];    SetDlgItemInt(hDlg, IDC_MINIQUANT, quality_preset->min_iquant, FALSE);		SetDlgItemInt(hDlg, IDC_MAXIQUANT, quality_preset->max_iquant, FALSE);		SetDlgItemInt(hDlg, IDC_MINPQUANT, quality_preset->min_pquant, FALSE);		SetDlgItemInt(hDlg, IDC_MAXPQUANT, quality_preset->max_pquant, FALSE);		SetDlgItemInt(hDlg, IDC_MINBQUANT, quality_preset->min_bquant, FALSE);		SetDlgItemInt(hDlg, IDC_MAXBQUANT, quality_preset->max_bquant, FALSE);		CheckDlg(hDlg, IDC_TRELLISQUANT, quality_preset->trellis_quant);    EnableDlgWindow(hDlg, IDC_MINIQUANT, userdef);    EnableDlgWindow(hDlg, IDC_MAXIQUANT, userdef);    EnableDlgWindow(hDlg, IDC_MINPQUANT, userdef);    EnableDlgWindow(hDlg, IDC_MAXPQUANT, userdef);    EnableDlgWindow(hDlg, IDC_MINBQUANT, userdef);    EnableDlgWindow(hDlg, IDC_MAXBQUANT, userdef);    EnableDlgWindow(hDlg, IDC_TRELLISQUANT, userdef);		break;    }	case IDD_COMMON :		CheckDlg(hDlg, IDC_CPU_MMX, (config->cpu & XVID_CPU_MMX));		CheckDlg(hDlg, IDC_CPU_MMXEXT, (config->cpu & XVID_CPU_MMXEXT));		CheckDlg(hDlg, IDC_CPU_SSE, (config->cpu & XVID_CPU_SSE));		CheckDlg(hDlg, IDC_CPU_SSE2, (config->cpu & XVID_CPU_SSE2));		CheckDlg(hDlg, IDC_CPU_3DNOW, (config->cpu & XVID_CPU_3DNOW));		CheckDlg(hDlg, IDC_CPU_3DNOWEXT, (config->cpu & XVID_CPU_3DNOWEXT));		CheckRadioButton(hDlg, IDC_CPU_AUTO, IDC_CPU_FORCE,			config->cpu & XVID_CPU_FORCE ? IDC_CPU_FORCE : IDC_CPU_AUTO );		set_dlgitem_hex(hDlg, IDC_DEBUG, config->debug);    break;  case IDD_ENC:		SetDlgItemInt(hDlg, IDC_NUMTHREADS, config->num_threads, FALSE);		SendDlgItemMessage(hDlg, IDC_FOURCC, CB_SETCURSEL, config->fourcc_used, 0);		CheckDlg(hDlg, IDC_VOPDEBUG, config->vop_debug);		CheckDlg(hDlg, IDC_DISPLAY_STATUS, config->display_status);		break;	case IDD_DEC :		SendDlgItemMessage(hDlg, IDC_DEC_BRIGHTNESS, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)pp_brightness);		CheckDlg(hDlg, IDC_DEC_DY,	pp_dy);		CheckDlg(hDlg, IDC_DEC_DUV,	pp_duv);		CheckDlg(hDlg, IDC_DEC_DRY,	pp_dry);		CheckDlg(hDlg, IDC_DEC_DRUV,pp_druv);		CheckDlg(hDlg, IDC_DEC_FE,	pp_fe);		EnableDlgWindow(hDlg, IDC_DEC_DRY, pp_dy);		EnableDlgWindow(hDlg, IDC_DEC_DRUV, pp_duv);		break;	}}/* download config data from dialog */static void adv_download(HWND hDlg, int idd, CONFIG * config){	switch (idd)	{	case IDD_PROFILE :		config->profile = SendDlgItemMessage(hDlg, IDC_PROFILE_PROFILE, CB_GETCURSEL, 0, 0);		config->quant_type = SendDlgItemMessage(hDlg, IDC_QUANTTYPE, CB_GETCURSEL, 0, 0);		config->lum_masking = IsDlgChecked(hDlg, IDC_LUMMASK);		config->interlacing = IsDlgChecked(hDlg, IDC_INTERLACING);		config->tff = IsDlgChecked(hDlg, IDC_TFF);		config->qpel = IsDlgChecked(hDlg, IDC_QPEL);		config->gmc = IsDlgChecked(hDlg, IDC_GMC);		config->use_bvop = IsDlgChecked(hDlg, IDC_BVOP);		config->max_bframes = config_get_uint(hDlg, IDC_MAXBFRAMES, config->max_bframes);		config->bquant_ratio = get_dlgitem_float(hDlg, IDC_BQUANTRATIO, config->bquant_ratio);		config->bquant_offset = get_dlgitem_float(hDlg, IDC_BQUANTOFFSET, config->bquant_offset);		config->packed = IsDlgChecked(hDlg, IDC_PACKED);		break;	case IDD_AR:		config->ar_mode = IsDlgChecked(hDlg, IDC_PAR) ? 0:1;		config->ar_x = config_get_uint(hDlg, IDC_ARX, config->ar_x);		config->ar_y = config_get_uint(hDlg, IDC_ARY, config->ar_y);		config->display_aspect_ratio = SendDlgItemMessage(hDlg, IDC_ASPECT_RATIO, CB_GETCURSEL, 0, 0);		if (config->display_aspect_ratio == 5) {			config->par_x = config_get_uint(hDlg, IDC_PARX, config->par_x);			config->par_y = config_get_uint(hDlg, IDC_PARY, config->par_y);		}		break;	case IDD_LEVEL :		config->profile = SendDlgItemMessage(hDlg, IDC_LEVEL_PROFILE, CB_GETCURSEL, 0, 0);		break;	case IDD_RC_CBR :		config->rc_reaction_delay_factor = config_get_uint(hDlg, IDC_CBR_REACTIONDELAY, config->rc_reaction_delay_factor);		config->rc_averaging_period = config_get_uint(hDlg, IDC_CBR_AVERAGINGPERIOD, config->rc_averaging_period);		config->rc_buffer = config_get_uint(hDlg, IDC_CBR_BUFFER, config->rc_buffer);		break;	case IDD_RC_2PASS1 :		if (GetDlgItemText(hDlg, IDC_STATS, config->stats, MAX_PATH) == 0)			lstrcpy(config->stats, CONFIG_2PASS_FILE);		config->discard1pass = IsDlgChecked(hDlg, IDC_DISCARD1PASS);		config->full1pass = IsDlgChecked(hDlg, IDC_FULL1PASS);		break;	case IDD_RC_2PASS2 :		if (GetDlgItemText(hDlg, IDC_STATS, config->stats, MAX_PATH) == 0)			lstrcpy(config->stats, CONFIG_2PASS_FILE);		config->keyframe_boost = GetDlgItemInt(hDlg, IDC_KFBOOST, NULL, FALSE);		config->kfreduction = GetDlgItemInt(hDlg, IDC_KFREDUCTION, NULL, FALSE);		CONSTRAINVAL(config->keyframe_boost, 0, 1000);		config->overflow_control_strength = GetDlgItemInt(hDlg, IDC_OVERFLOW_CONTROL_STRENGTH, NULL, FALSE);		config->twopass_max_overflow_improvement = config_get_uint(hDlg, IDC_OVERIMP, config->twopass_max_overflow_improvement);		config->twopass_max_overflow_degradation = config_get_uint(hDlg, IDC_OVERDEG, config->twopass_max_overflow_degradation);		CONSTRAINVAL(config->twopass_max_overflow_improvement, 1, 80);		CONSTRAINVAL(config->twopass_max_overflow_degradation, 1, 80);		CONSTRAINVAL(config->overflow_control_strength, 0, 100);		config->curve_compression_high = GetDlgItemInt(hDlg, IDC_CURVECOMPH, NULL, FALSE);		config->curve_compression_low = GetDlgItemInt(hDlg, IDC_CURVECOMPL, NULL, FALSE);		CONSTRAINVAL(config->curve_compression_high, 0, 100);		CONSTRAINVAL(config->curve_compression_low, 0, 100);		config->kfthreshold = config_get_uint(hDlg, IDC_MINKEY, config->kfthreshold);		break;	case IDD_BITRATE :		config->container_type = SendDlgItemMessage(hDlg, IDC_BITRATE_CFORMAT, CB_GETCURSEL, 0, 0);		config->target_size = config_get_uint(hDlg, IDC_BITRATE_TSIZE, config->target_size);		config->subtitle_size = config_get_uint(hDlg, IDC_BITRATE_SSIZE, config->subtitle_size);		config->hours = config_get_uint(hDlg, IDC_BITRATE_HOURS, config->hours);		config->minutes = config_get_uint(hDlg, IDC_BITRATE_MINUTES, config->minutes);		config->seconds = config_get_uint(hDlg, IDC_BITRATE_SECONDS, config->seconds);		config->fps = SendDlgItemMessage(hDlg, IDC_BITRATE_FPS, CB_GETCURSEL, 0, 0);		config->audio_type = SendDlgItemMessage(hDlg, IDC_BITRATE_AFORMAT, CB_GETCURSEL, 0, 0);		config->audio_mode = IsDlgChecked(hDlg, IDC_BITRATE_AMODE_SIZE) ? 1 : 0 ;		config->audio_rate = config_get_uint(hDlg, IDC_BITRATE_ARATE, config->audio_rate);		config->audio_size = config_get_uint(hDlg, IDC_BITRATE_ASIZE, config->audio_size);		/* the main window uses "AVI bitrate/filesize" not "video bitrate/filesize",		   so we have to compensate by frames * 24 bytes */		{			int frame_compensate = 24 * (int)(				(3600*config->hours +				   60*config->minutes + 				      config->seconds) * video_fps_list[config->fps].value) / 1024;			int bitrate_compensate = (int)(24 * video_fps_list[config->fps].value) / 125;			config->desired_size = 						config_get_uint(hDlg, IDC_BITRATE_VSIZE, config->desired_size) + frame_compensate;						config->bitrate = 						config_get_uint(hDlg, IDC_BITRATE_VRATE, config->bitrate) + bitrate_compensate;		}		break;	case IDD_ZONE :		config->zones[config->cur_zone].frame = config_get_uint(hDlg, IDC_ZONE_FRAME, config->zones[config->cur_zone].frame);		if (IsDlgChecked(hDlg, IDC_ZONE_MODE_WEIGHT)) {			config->zones[config->cur_zone].mode = RC_ZONE_WEIGHT;		}else if (IsDlgChecked(hDlg, IDC_ZONE_MODE_QUANT)) {			config->zones[config->cur_zone].mode = RC_ZONE_QUANT;		}		config->zones[config->cur_zone].weight = get_dlgitem_float(hDlg, IDC_ZONE_WEIGHT, config->zones[config->cur_zone].weight);		config->zones[config->cur_zone].quant =  get_dlgitem_float(hDlg, IDC_ZONE_QUANT, config->zones[config->cur_zone].quant);		config->zones[config->cur_zone].type = IsDlgButtonChecked(hDlg, IDC_ZONE_FORCEIVOP)?XVID_TYPE_IVOP:XVID_TYPE_AUTO;		config->zones[config->cur_zone].greyscale = IsDlgButtonChecked(hDlg, IDC_ZONE_GREYSCALE);		config->zones[config->cur_zone].chroma_opt = IsDlgButtonChecked(hDlg, IDC_ZONE_CHROMAOPT);

⌨️ 快捷键说明

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