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

📄 config.c

📁 视频压缩编解码标准MPEG4商业级别的VC代码实现标准
💻 C
📖 第 1 页 / 共 5 页
字号:
			case IDC_BITRATE_ASELECT :				{				OPENFILENAME ofn;				char filename[MAX_PATH] = "";				memset(&ofn, 0, sizeof(OPENFILENAME));				ofn.lStructSize = sizeof(OPENFILENAME);				ofn.hwndOwner = hDlg;				if (LOWORD(wParam)==IDC_BITRATE_SSELECT) {					ofn.lpstrFilter = "Subtitle files (*.sub, *.ssa, *.txt, *.dat)\0*.sub;*.ssa;*.txt;*.dat\0All files (*.*)\0*.*\0\0";				}else{					ofn.lpstrFilter = "Audio files (*.mp3, *.ac3, *.aac, *.ogg, *.wav)\0*.mp3; *.ac3; *.aac; *.ogg; *.wav\0All files (*.*)\0*.*\0\0";				}								ofn.lpstrFile = filename;				ofn.nMaxFile = MAX_PATH;				ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;				if (GetOpenFileName(&ofn)) {					HANDLE hFile;					DWORD filesize;									if ((hFile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)) == INVALID_HANDLE_VALUE ||						(filesize = GetFileSize(hFile, NULL)) == INVALID_FILE_SIZE) {						MessageBox(hDlg, "Could not get file size", "Error", 0);					}else{						SetDlgItemInt(hDlg,								LOWORD(wParam)==IDC_BITRATE_SSELECT? IDC_BITRATE_SSIZE : IDC_BITRATE_ASIZE, 								filesize / 1024, FALSE);						CloseHandle(hFile);					}				}				}				break;			case IDC_QUANTMATRIX :				DialogBoxParam(g_hInst, MAKEINTRESOURCE(IDD_QUANTMATRIX), hDlg, quantmatrix_proc, (LPARAM)psi->config);				break;			case IDC_STATS_BROWSE :			{				OPENFILENAME ofn;				char tmp[MAX_PATH];				GetDlgItemText(hDlg, IDC_STATS, tmp, MAX_PATH);				memset(&ofn, 0, sizeof(OPENFILENAME));				ofn.lStructSize = sizeof(OPENFILENAME);				ofn.hwndOwner = hDlg;				ofn.lpstrFilter = "bitrate curve (*.pass)\0*.pass\0All files (*.*)\0*.*\0\0";				ofn.lpstrFile = tmp;				ofn.nMaxFile = MAX_PATH;				ofn.Flags = OFN_PATHMUSTEXIST;				if (psi->idd == IDD_RC_2PASS1) {					ofn.Flags |= OFN_OVERWRITEPROMPT;				}else{					ofn.Flags |= OFN_FILEMUSTEXIST;				}				if ((psi->idd==IDD_RC_2PASS1 && GetSaveFileName(&ofn)) || 					(psi->idd==IDD_RC_2PASS2 && GetOpenFileName(&ofn))) {					SetDlgItemText(hDlg, IDC_STATS, tmp);				}				}				break;			case IDC_ZONE_FETCH :				SetDlgItemInt(hDlg, IDC_ZONE_FRAME, psi->config->ci.ciActiveFrame, FALSE);				break;			case IDC_AR_DEFAULT:				CheckRadioButton(hDlg, IDC_AR, IDC_PAR, IDC_PAR);				SendDlgItemMessage(hDlg, IDC_ASPECT_RATIO, CB_SETCURSEL, 0, 0);				adv_mode(hDlg, psi->idd, psi->config);				break;			case IDC_AR_4_3:				SetDlgItemInt(hDlg, IDC_ARX, 4, FALSE);				SetDlgItemInt(hDlg, IDC_ARY, 3, FALSE);				CheckRadioButton(hDlg, IDC_AR, IDC_PAR, IDC_AR);				adv_mode(hDlg, psi->idd, psi->config);				break;			case IDC_AR_16_9:				SetDlgItemInt(hDlg, IDC_ARX, 16, FALSE);				SetDlgItemInt(hDlg, IDC_ARY, 9, FALSE);				CheckRadioButton(hDlg, IDC_AR, IDC_PAR, IDC_AR);				adv_mode(hDlg, psi->idd, psi->config);				break;			case IDC_AR_235_100:				SetDlgItemInt(hDlg, IDC_ARX, 235, FALSE);				SetDlgItemInt(hDlg, IDC_ARY, 100, FALSE);				CheckRadioButton(hDlg, IDC_AR, IDC_PAR, IDC_AR);				adv_mode(hDlg, psi->idd, psi->config);				break;			case IDC_DEC_DY:			case IDC_DEC_DUV:				EnableDlgWindow(hDlg, IDC_DEC_DRY, IsDlgChecked(hDlg, IDC_DEC_DY));				EnableDlgWindow(hDlg, IDC_DEC_DRUV, IsDlgChecked(hDlg, IDC_DEC_DUV));				break;			default :				return TRUE;			}		}else if ((HIWORD(wParam) == CBN_EDITCHANGE || HIWORD(wParam)==CBN_SELCHANGE) &&			(LOWORD(wParam)==IDC_BITRATE_TSIZE ||			 LOWORD(wParam)==IDC_BITRATE_ARATE )) {			adv_mode(hDlg, psi->idd, psi->config);		}else if (HIWORD(wParam) == LBN_SELCHANGE &&			(LOWORD(wParam) == IDC_PROFILE_PROFILE ||			 LOWORD(wParam) == IDC_LEVEL_PROFILE ||			 LOWORD(wParam) == IDC_QUANTTYPE ||			 LOWORD(wParam) == IDC_ASPECT_RATIO ||			 LOWORD(wParam) == IDC_BITRATE_CFORMAT ||			 LOWORD(wParam) == IDC_BITRATE_AFORMAT ||			 LOWORD(wParam) == IDC_BITRATE_FPS)) {			adv_mode(hDlg, psi->idd, psi->config);		}else if (HIWORD(wParam) == EN_UPDATE && (LOWORD(wParam)==IDC_ZONE_WEIGHT || LOWORD(wParam)==IDC_ZONE_QUANT)) {			SendDlgItemMessage(hDlg, IDC_ZONE_SLIDER, TBM_SETPOS, TRUE,					get_dlgitem_float(hDlg, LOWORD(wParam), 100));		} else if (HIWORD(wParam) == EN_UPDATE && (LOWORD(wParam)==IDC_PARX || LOWORD(wParam)==IDC_PARY)) {			if (5 == SendDlgItemMessage(hDlg, IDC_ASPECT_RATIO, CB_GETCURSEL, 0, 0)) {				if(LOWORD(wParam)==IDC_PARX)					psi->config->par_x = config_get_uint(hDlg, LOWORD(wParam), psi->config->par_x);				else					psi->config->par_y = config_get_uint(hDlg, LOWORD(wParam), psi->config->par_y);			}		} else if (HIWORD(wParam) == EN_UPDATE &&			(LOWORD(wParam)==IDC_BITRATE_SSIZE ||			 LOWORD(wParam)==IDC_BITRATE_HOURS ||			 LOWORD(wParam)==IDC_BITRATE_MINUTES ||			 LOWORD(wParam)==IDC_BITRATE_SECONDS ||			 LOWORD(wParam)==IDC_BITRATE_ASIZE)) {			adv_mode(hDlg, psi->idd, psi->config);		} else			return 0;		break;	case WM_HSCROLL :		if((HWND)lParam == GetDlgItem(hDlg, IDC_ZONE_SLIDER)) {			int idc = IsDlgChecked(hDlg, IDC_ZONE_MODE_WEIGHT) ? IDC_ZONE_WEIGHT : IDC_ZONE_QUANT;			set_dlgitem_float(hDlg, idc, SendMessage((HWND)lParam, TBM_GETPOS, 0, 0) );			break;		}		return 0; 	case WM_NOTIFY :		switch (((NMHDR *)lParam)->code)		{		case PSN_SETACTIVE :			DPRINTF("PSN_SET");			adv_upload(hDlg, psi->idd, psi->config);			adv_mode(hDlg, psi->idd, psi->config);			SetWindowLong(hDlg, DWL_MSGRESULT, FALSE);			break;		case PSN_KILLACTIVE :			DPRINTF("PSN_KILL");			adv_download(hDlg, psi->idd, psi->config);			SetWindowLong(hDlg, DWL_MSGRESULT, FALSE);			break;		case PSN_APPLY :			DPRINTF("PSN_APPLY");			psi->config->save = TRUE;			SetWindowLong(hDlg, DWL_MSGRESULT, FALSE);			break;		}		break;	default :		return 0;	}	return 1;}/* load advanced options property sheet  returns true, if the user accepted the changes  or fasle if changes were canceled.  */#ifndef PSH_NOCONTEXTHELP#define PSH_NOCONTEXTHELP 0x02000000#endifstatic BOOL adv_dialog(HWND hParent, CONFIG * config, const int * dlgs, int size){	PROPSHEETINFO psi[6];	PROPSHEETPAGE psp[6];	PROPSHEETHEADER psh;	CONFIG temp;	int i;	config->save = FALSE;	memcpy(&temp, config, sizeof(CONFIG));	for (i=0; i<size; i++)	{		psp[i].dwSize = sizeof(PROPSHEETPAGE);		psp[i].dwFlags = 0;		psp[i].hInstance = g_hInst;		psp[i].pfnDlgProc = adv_proc;		psp[i].lParam = (LPARAM)&psi[i];		psp[i].pfnCallback = NULL;		psp[i].pszTemplate = MAKEINTRESOURCE(dlgs[i]);		psi[i].idd = dlgs[i];		psi[i].config = &temp;	}	psh.dwSize = sizeof(PROPSHEETHEADER);	psh.dwFlags = PSH_PROPSHEETPAGE | PSH_NOAPPLYNOW | PSH_NOCONTEXTHELP;	psh.hwndParent = hParent;	psh.hInstance = g_hInst;	psh.pszCaption = (LPSTR) "XviD Configuration";	psh.nPages = size;	psh.nStartPage = 0;	psh.ppsp = (LPCPROPSHEETPAGE)&psp;	psh.pfnCallback = NULL;	PropertySheet(&psh);	if (temp.save)		memcpy(config, &temp, sizeof(CONFIG));	return temp.save;}/* ===================================================================================== *//* MAIN DIALOG ========================================================================= *//* ===================================================================================== */static void main_insert_zone(HWND hDlg, zone_t * s, int i, BOOL insert){	char tmp[32];	wsprintf(tmp,"%i",s->frame);	if (insert) {		LVITEM lvi;		lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM | LVIF_STATE;		lvi.state = 0;		lvi.stateMask = 0;		lvi.iImage = 0;		lvi.pszText = tmp;		lvi.cchTextMax = strlen(tmp);		lvi.iItem = i;		lvi.iSubItem = 0;		ListView_InsertItem(hDlg, &lvi);	}else{		ListView_SetItemText(hDlg, i, 0, tmp);	}	if (s->mode == RC_ZONE_WEIGHT) {		sprintf(tmp,"W %.2f",(float)s->weight/100);	}else if (s->mode == RC_ZONE_QUANT) {		sprintf(tmp,"Q %.2f",(float)s->quant/100);	}else {		strcpy(tmp,"EXT");	}	ListView_SetItemText(hDlg, i, 1, tmp);	tmp[0] = '\0';	if (s->type==XVID_TYPE_IVOP)		strcat(tmp, "K ");	if (s->greyscale)		strcat(tmp, "G ");	if (s->chroma_opt)		strcat(tmp, "O ");	if (s->cartoon_mode)		strcat(tmp, "C ");	ListView_SetItemText(hDlg, i, 2, tmp);}static void main_mode(HWND hDlg, CONFIG * config){	const int profile = SendDlgItemMessage(hDlg, IDC_PROFILE, CB_GETCURSEL, 0, 0);	const int rc_mode = SendDlgItemMessage(hDlg, IDC_MODE, CB_GETCURSEL, 0, 0);	/* enable target rate/size control only for 1pass and 2pass  modes*/	const int target_en = rc_mode==RC_MODE_1PASS || rc_mode==RC_MODE_2PASS2;	const int target_en_slider = rc_mode==RC_MODE_1PASS || 		(rc_mode==RC_MODE_2PASS2 && config->use_2pass_bitrate); 	char buf[16];	int max;	g_use_bitrate = config->use_2pass_bitrate;	if (g_use_bitrate) {		SetDlgItemText(hDlg, IDC_BITRATE_S, "Target bitrate (kbps):");		wsprintf(buf, "%i kbps", DEFAULT_MIN_KBPS);		SetDlgItemText(hDlg, IDC_BITRATE_MIN, buf);		max = profiles[profile].max_bitrate;		if (max == 0) max = DEFAULT_MAX_KBPS;		wsprintf(buf, "%i kbps", max);		SetDlgItemText(hDlg, IDC_BITRATE_MAX, buf);  		SendDlgItemMessage(hDlg, IDC_SLIDER, TBM_SETRANGE, TRUE, MAKELONG(DEFAULT_MIN_KBPS, max));		SendDlgItemMessage(hDlg, IDC_SLIDER, TBM_SETPOS, TRUE,						config_get_uint(hDlg, IDC_BITRATE, DEFAULT_MIN_KBPS) );	} else if (rc_mode==RC_MODE_2PASS2) {		SetDlgItemText(hDlg, IDC_BITRATE_S, "Target size (kbytes):");	} else if (rc_mode==RC_MODE_1PASS) {		SetDlgItemText(hDlg, IDC_BITRATE_S, "Target quantizer:");  		SendDlgItemMessage(hDlg, IDC_SLIDER, TBM_SETRANGE, TRUE, MAKELONG(100, 3100));		SendDlgItemMessage(hDlg, IDC_SLIDER, TBM_SETPOS, TRUE,							get_dlgitem_float(hDlg, IDC_BITRATE, DEFAULT_QUANT ));		SetDlgItemText(hDlg, IDC_BITRATE_MIN, "1 (maximum quality)");		SetDlgItemText(hDlg, IDC_BITRATE_MAX, "(smallest file) 31");	}	EnableDlgWindow(hDlg, IDC_BITRATE_S, target_en);	EnableDlgWindow(hDlg, IDC_BITRATE, target_en);	EnableDlgWindow(hDlg, IDC_BITRATE_ADV, target_en);	EnableDlgWindow(hDlg, IDC_BITRATE_MIN, target_en_slider);	EnableDlgWindow(hDlg, IDC_BITRATE_MAX, target_en_slider);	EnableDlgWindow(hDlg, IDC_SLIDER, target_en_slider);}static void main_upload(HWND hDlg, CONFIG * config){	SendDlgItemMessage(hDlg, IDC_PROFILE, CB_SETCURSEL, config->profile, 0);	SendDlgItemMessage(hDlg, IDC_MODE, CB_SETCURSEL, config->mode, 0);	g_use_bitrate = config->use_2pass_bitrate;	if (g_use_bitrate) {		SetDlgItemInt(hDlg, IDC_BITRATE, config->bitrate, FALSE);	} else if (config->mode == RC_MODE_2PASS2) {		SetDlgItemInt(hDlg, IDC_BITRATE, config->desired_size, FALSE);	} else if (config->mode == RC_MODE_1PASS) {		set_dlgitem_float(hDlg, IDC_BITRATE, config->desired_quant);	}	zones_update(hDlg, config);}/* downloads data from main dialog */static void main_download(HWND hDlg, CONFIG * config){	config->profile = SendDlgItemMessage(hDlg, IDC_PROFILE, CB_GETCURSEL, 0, 0);	config->mode = SendDlgItemMessage(hD

⌨️ 快捷键说明

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