//==========================================================================; // // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY // KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR // PURPOSE. // // Copyright (c) 1992 - 1994 Microsoft Corporation. All Rights Reserved. // //--------------------------------------------------------------------------; // // aachoose.c // // Description: // // // //==========================================================================; #include #include #include #include #include #include #include #include "muldiv32.h" #include "appport.h" #include "waveio.h" #include "acmapp.h" #include "debug.h" TCHAR gszBogus[] = TEXT("????"); TCHAR BCODE gszAcmAppHelpFormat[] = TEXT("choo_win.hlp"); TCHAR BCODE gszAcmAppHelpFilter[] = TEXT("fil_win.hlp"); LPTSTR gpszAcmAppHelp; UINT guMsgHelp; //==========================================================================; // // // // //==========================================================================; //--------------------------------------------------------------------------; // // BOOL AcmAppDlgProcFormatStyle // // Description: // // // Arguments: // HWND hwnd: Handle to window. // // UINT uMsg: Message being sent to the window. // // WPARAM wParam: Specific argument to message. // // LPARAM lParam: Specific argument to message. // // Return (BOOL): // The return value is specific to the message that was received. For // the most part, it is FALSE if this dialog procedure does not handle // a message. // //--------------------------------------------------------------------------; BOOL FNEXPORT AcmAppDlgProcFormatStyle ( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { PACMFORMATCHOOSE pafc; HFONT hfont; UINT uId; BOOL f; DWORD fdwStyle; pafc = (PACMFORMATCHOOSE)(UINT)GetWindowLong(hwnd, DWL_USER); switch (uMsg) { case WM_INITDIALOG: pafc = (PACMFORMATCHOOSE)(UINT)lParam; SetWindowLong(hwnd, DWL_USER, lParam); hfont = ghfontApp; // // // fdwStyle = pafc->fdwStyle; f = (0 != (ACMFORMATCHOOSE_STYLEF_SHOWHELP & fdwStyle)); CheckDlgButton(hwnd, IDD_AAFORMATSTYLE_CHECK_SHOWHELP, f); f = (0 != (ACMFORMATCHOOSE_STYLEF_ENABLEHOOK & fdwStyle)); CheckDlgButton(hwnd, IDD_AAFORMATSTYLE_CHECK_ENABLEHOOK, f); f = (0 != (ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATE & fdwStyle)); CheckDlgButton(hwnd, IDD_AAFORMATSTYLE_CHECK_ENABLETEMPLATE, f); f = (0 != (ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATEHANDLE & fdwStyle)); CheckDlgButton(hwnd, IDD_AAFORMATSTYLE_CHECK_ENABLETEMPLATEHANDLE, f); f = (0 != (ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT & fdwStyle)); CheckDlgButton(hwnd, IDD_AAFORMATSTYLE_CHECK_INITTOWFXSTRUCT, f); return (TRUE); case WM_COMMAND: uId = GET_WM_COMMAND_ID(wParam, lParam); switch (uId) { case IDOK: fdwStyle = 0L; f = IsDlgButtonChecked(hwnd, IDD_AAFORMATSTYLE_CHECK_SHOWHELP); if (f) fdwStyle |= ACMFORMATCHOOSE_STYLEF_SHOWHELP; f = IsDlgButtonChecked(hwnd, IDD_AAFORMATSTYLE_CHECK_ENABLEHOOK); if (f) fdwStyle |= ACMFORMATCHOOSE_STYLEF_ENABLEHOOK; f = IsDlgButtonChecked(hwnd, IDD_AAFORMATSTYLE_CHECK_ENABLETEMPLATE); if (f) fdwStyle |= ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATE; f = IsDlgButtonChecked(hwnd, IDD_AAFORMATSTYLE_CHECK_ENABLETEMPLATEHANDLE); if (f) fdwStyle |= ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATEHANDLE; f = IsDlgButtonChecked(hwnd, IDD_AAFORMATSTYLE_CHECK_INITTOWFXSTRUCT); if (f) fdwStyle |= ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT; pafc->fdwStyle = fdwStyle; // -- fall through -- // case IDCANCEL: EndDialog(hwnd, (IDOK == uId)); break; } break; } return (FALSE); } // AcmAppDlgProcFormatStyle() //--------------------------------------------------------------------------; // // BOOL AcmAppDlgProcFilterStyle // // Description: // // // Arguments: // HWND hwnd: Handle to window. // // UINT uMsg: Message being sent to the window. // // WPARAM wParam: Specific argument to message. // // LPARAM lParam: Specific argument to message. // // Return (BOOL): // The return value is specific to the message that was received. For // the most part, it is FALSE if this dialog procedure does not handle // a message. // //--------------------------------------------------------------------------; BOOL FNEXPORT AcmAppDlgProcFilterStyle ( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { PACMFILTERCHOOSE pafc; HFONT hfont; UINT uId; BOOL f; DWORD fdwStyle; pafc = (PACMFILTERCHOOSE)(UINT)GetWindowLong(hwnd, DWL_USER); switch (uMsg) { case WM_INITDIALOG: pafc = (PACMFILTERCHOOSE)(UINT)lParam; SetWindowLong(hwnd, DWL_USER, lParam); hfont = ghfontApp; // // // fdwStyle = pafc->fdwStyle; f = (0 != (ACMFILTERCHOOSE_STYLEF_SHOWHELP & fdwStyle)); CheckDlgButton(hwnd, IDD_AAFILTERSTYLE_CHECK_SHOWHELP, f); f = (0 != (ACMFILTERCHOOSE_STYLEF_ENABLEHOOK & fdwStyle)); CheckDlgButton(hwnd, IDD_AAFILTERSTYLE_CHECK_ENABLEHOOK, f); f = (0 != (ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATE & fdwStyle)); CheckDlgButton(hwnd, IDD_AAFILTERSTYLE_CHECK_ENABLETEMPLATE, f); f = (0 != (ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATEHANDLE & fdwStyle)); CheckDlgButton(hwnd, IDD_AAFILTERSTYLE_CHECK_ENABLETEMPLATEHANDLE, f); f = (0 != (ACMFILTERCHOOSE_STYLEF_INITTOFILTERSTRUCT & fdwStyle)); CheckDlgButton(hwnd, IDD_AAFILTERSTYLE_CHECK_INITTOFILTERSTRUCT, f); return (TRUE); case WM_COMMAND: uId = GET_WM_COMMAND_ID(wParam, lParam); switch (uId) { case IDOK: fdwStyle = 0L; f = IsDlgButtonChecked(hwnd, IDD_AAFILTERSTYLE_CHECK_SHOWHELP); if (f) fdwStyle |= ACMFILTERCHOOSE_STYLEF_SHOWHELP; f = IsDlgButtonChecked(hwnd, IDD_AAFILTERSTYLE_CHECK_ENABLEHOOK); if (f) fdwStyle |= ACMFILTERCHOOSE_STYLEF_ENABLEHOOK; f = IsDlgButtonChecked(hwnd, IDD_AAFILTERSTYLE_CHECK_ENABLETEMPLATE); if (f) fdwStyle |= ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATE; f = IsDlgButtonChecked(hwnd, IDD_AAFILTERSTYLE_CHECK_ENABLETEMPLATEHANDLE); if (f) fdwStyle |= ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATEHANDLE; f = IsDlgButtonChecked(hwnd, IDD_AAFILTERSTYLE_CHECK_INITTOFILTERSTRUCT); if (f) fdwStyle |= ACMFILTERCHOOSE_STYLEF_INITTOFILTERSTRUCT; pafc->fdwStyle = fdwStyle; // -- fall through -- // case IDCANCEL: EndDialog(hwnd, (IDOK == uId)); break; } break; } return (FALSE); } // AcmAppDlgProcFilterStyle() //--------------------------------------------------------------------------; // // BOOL AcmAppDlgProcFilterEnum // // Description: // // // Arguments: // HWND hwnd: Handle to window. // // UINT uMsg: Message being sent to the window. // // WPARAM wParam: Specific argument to message. // // LPARAM lParam: Specific argument to message. // // Return (BOOL): // The return value is specific to the message that was received. For // the most part, it is FALSE if this dialog procedure does not handle // a message. // //--------------------------------------------------------------------------; BOOL FNEXPORT AcmAppDlgProcFilterEnum ( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { TCHAR ach[14]; PWAVEFILTER pwfltr; HWND hedit; HFONT hfont; UINT uId; BOOL f; DWORD fdwEnum; pwfltr = (PWAVEFILTER)(UINT)GetWindowLong(hwnd, DWL_USER); switch (uMsg) { case WM_INITDIALOG: pwfltr = (PWAVEFILTER)(UINT)lParam; SetWindowLong(hwnd, DWL_USER, lParam); hfont = ghfontApp; // // the initial fdwEnum flags are passed in fdwFilter // because i'm too lazy to make another structure.. // fdwEnum = pwfltr->fdwFilter; f = (0 != (ACM_FILTERENUMF_DWFILTERTAG & fdwEnum)); CheckDlgButton(hwnd, IDD_AAFILTERENUM_CHECK_DWFILTERTAG, f); hedit = GetDlgItem(hwnd, IDD_AAFILTERENUM_EDIT_DWFILTERTAG); SetWindowFont(hedit, hfont, FALSE); AppSetWindowText(hedit, TEXT("%u"), pwfltr->dwFilterTag); return (TRUE); case WM_COMMAND: uId = GET_WM_COMMAND_ID(wParam, lParam); switch (uId) { case IDOK: fdwEnum = 0L; f = IsDlgButtonChecked(hwnd, IDD_AAFILTERENUM_CHECK_DWFILTERTAG); if (f) fdwEnum |= ACM_FILTERENUMF_DWFILTERTAG; hedit = GetDlgItem(hwnd, IDD_AAFILTERENUM_EDIT_DWFILTERTAG); Edit_GetText(hedit, ach, SIZEOF(ach)); pwfltr->dwFilterTag = _tcstoul(ach, NULL, 10); pwfltr->fdwFilter = fdwEnum; // -- fall through -- // case IDCANCEL: EndDialog(hwnd, (IDOK == uId)); break; } break; } return (FALSE); } // AcmAppDlgProcFilterEnum() //--------------------------------------------------------------------------; // // BOOL AcmAppDlgProcFormatEnum // // Description: // // // Arguments: // HWND hwnd: Handle to window. // // UINT uMsg: Message being sent to the window. // // WPARAM wParam: Specific argument to message. // // LPARAM lParam: Specific argument to message. // // Return (BOOL): // The return value is specific to the message that was received. For // the most part, it is FALSE if this dialog procedure does not handle // a message. // //--------------------------------------------------------------------------; BOOL FNEXPORT AcmAppDlgProcFormatEnum ( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { TCHAR ach[14]; PWAVEFORMATEX pwfx; HWND hedit; HFONT hfont; UINT uId; BOOL f; DWORD fdwEnum; pwfx = (PWAVEFORMATEX)(UINT)GetWindowLong(hwnd, DWL_USER); switch (uMsg) { case WM_INITDIALOG: pwfx = (PWAVEFORMATEX)(UINT)lParam; SetWindowLong(hwnd, DWL_USER, lParam); hfont = ghfontApp; // // the initial fdwEnum flags are passed in nAvgBytesPerSec // because i'm too lazy to make another structure.. // fdwEnum = pwfx->nAvgBytesPerSec; f = (0 != (ACM_FORMATENUMF_WFORMATTAG & fdwEnum)); CheckDlgButton(hwnd, IDD_AAFORMATENUM_CHECK_WFORMATTAG, f); f = (0 != (ACM_FORMATENUMF_NCHANNELS & fdwEnum)); CheckDlgButton(hwnd, IDD_AAFORMATENUM_CHECK_NCHANNELS, f); f = (0 != (ACM_FORMATENUMF_NSAMPLESPERSEC & fdwEnum)); CheckDlgButton(hwnd, IDD_AAFORMATENUM_CHECK_NSAMPLESPERSEC, f); f = (0 != (ACM_FORMATENUMF_WBITSPERSAMPLE & fdwEnum)); CheckDlgButton(hwnd, IDD_AAFORMATENUM_CHECK_WBITSPERSAMPLE, f); f = (0 != (ACM_FORMATENUMF_CONVERT & fdwEnum)); CheckDlgButton(hwnd, IDD_AAFORMATENUM_CHECK_CONVERT, f); f = (0 != (ACM_FORMATENUMF_SUGGEST & fdwEnum)); CheckDlgButton(hwnd, IDD_AAFORMATENUM_CHECK_SUGGEST, f); f = (0 != (ACM_FORMATENUMF_HARDWARE & fdwEnum)); CheckDlgButton(hwnd, IDD_AAFORMATENUM_CHECK_HARDWARE, f); f = (0 != (ACM_FORMATENUMF_INPUT & fdwEnum)); CheckDlgButton(hwnd, IDD_AAFORMATENUM_CHECK_INPUT, f); f = (0 != (ACM_FORMATENUMF_OUTPUT & fdwEnum)); CheckDlgButton(hwnd, IDD_AAFORMATENUM_CHECK_OUTPUT, f); hedit = GetDlgItem(hwnd, IDD_AAFORMATENUM_EDIT_WFORMATTAG); SetWindowFont(hedit, hfont, FALSE); AppSetWindowText(hedit, TEXT("%u"), pwfx->wFormatTag); hedit = GetDlgItem(hwnd, IDD_AAFORMATENUM_EDIT_NCHANNELS); SetWindowFont(hedit, hfont, FALSE); AppSetWindowText(hedit, TEXT("%u"), pwfx->nChannels); hedit = GetDlgItem(hwnd, IDD_AAFORMATENUM_EDIT_NSAMPLESPERSEC); SetWindowFont(hedit, hfont, FALSE); AppSetWindowText(hedit, TEXT("%lu"), pwfx->nSamplesPerSec); hedit = GetDlgItem(hwnd, IDD_AAFORMATENUM_EDIT_WBITSPERSAMPLE); SetWindowFont(hedit, hfont, FALSE); AppSetWindowText(hedit, TEXT("%u"), pwfx->wBitsPerSample); return (TRUE); case WM_COMMAND: uId = GET_WM_COMMAND_ID(wParam, lParam); switch (uId) { case IDOK: fdwEnum = 0L; f = IsDlgButtonChecked(hwnd, IDD_AAFORMATENUM_CHECK_WFORMATTAG); if (f) fdwEnum |= ACM_FORMATENUMF_WFORMATTAG; f = IsDlgButtonChecked(hwnd, IDD_AAFORMATENUM_CHECK_NCHANNELS); if (f) fdwEnum |= ACM_FORMATENUMF_NCHANNELS; f = IsDlgButtonChecked(hwnd, IDD_AAFORMATENUM_CHECK_NSAMPLESPERSEC); if (f) fdwEnum |= ACM_FORMATENUMF_NSAMPLESPERSEC; f = IsDlgButtonChecked(hwnd, IDD_AAFORMATENUM_CHECK_WBITSPERSAMPLE); if (f) fdwEnum |= ACM_FORMATENUMF_WBITSPERSAMPLE; f = IsDlgButtonChecked(hwnd, IDD_AAFORMATENUM_CHECK_CONVERT); if (f) fdwEnum |= ACM_FORMATENUMF_CONVERT; f = IsDlgButtonChecked(hwnd, IDD_AAFORMATENUM_CHECK_SUGGEST); if (f) fdwEnum |= ACM_FORMATENUMF_SUGGEST; f = IsDlgButtonChecked(hwnd, IDD_AAFORMATENUM_CHECK_HARDWARE); if (f) fdwEnum |= ACM_FORMATENUMF_HARDWARE; f = IsDlgButtonChecked(hwnd, IDD_AAFORMATENUM_CHECK_INPUT); if (f) fdwEnum |= ACM_FORMATENUMF_INPUT; f = IsDlgButtonChecked(hwnd, IDD_AAFORMATENUM_CHECK_OUTPUT); if (f) fdwEnum |= ACM_FORMATENUMF_OUTPUT; hedit = GetDlgItem(hwnd, IDD_AAFORMATENUM_EDIT_WFORMATTAG); Edit_GetText(hedit, ach, SIZEOF(ach)); pwfx->wFormatTag = (WORD)_tcstoul(ach, NULL, 10); hedit = GetDlgItem(hwnd, IDD_AAFORMATENUM_EDIT_NCHANNELS); Edit_GetText(hedit, ach, SIZEOF(ach)); pwfx->nChannels = (WORD)_tcstoul(ach, NULL, 10); hedit = GetDlgItem(hwnd, IDD_AAFORMATENUM_EDIT_NSAMPLESPERSEC); Edit_GetText(hedit, ach, SIZEOF(ach)); pwfx->nSamplesPerSec = _tcstoul(ach, NULL, 10); hedit = GetDlgItem(hwnd, IDD_AAFORMATENUM_EDIT_WBITSPERSAMPLE); Edit_GetText(hedit, ach, SIZEOF(ach)); pwfx->wBitsPerSample = (WORD)_tcstoul(ach, NULL, 10); pwfx->nAvgBytesPerSec = fdwEnum; // -- fall through -- // case IDCANCEL: EndDialog(hwnd, (IDOK == uId)); break; } break; } return (FALSE); } // AcmAppDlgProcFormatEnum() //--------------------------------------------------------------------------; // // BOOL AcmAppDlgProcProperties // // Description: // // // Arguments: // HWND hwnd: Handle to window. // // UINT uMsg: Message being sent to the window. // // WPARAM wParam: Specific argument to message. // // LPARAM lParam: Specific argument to message. // // Return (BOOL): // The return value is specific to the message that was received. For // the most part, it is FALSE if this dialog procedure does not handle // a message. // //--------------------------------------------------------------------------; BOOL FNEXPORT AcmAppDlgProcProperties ( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { MMRESULT mmr; TCHAR ach[14]; PAACONVERTDESC paacd; HWND hcb; HFONT hfont; UINT uId; DWORD cb; paacd = (PAACONVERTDESC)(UINT)GetWindowLong(hwnd, DWL_USER); switch (uMsg) { case WM_INITDIALOG: paacd = (PAACONVERTDESC)(UINT)lParam; SetWindowLong(hwnd, DWL_USER, lParam); hfont = ghfontApp; hcb = GetDlgItem(hwnd, IDD_AAPROPERTIES_COMBO_SOURCE); SetWindowFont(hcb, hfont, FALSE); wsprintf(ach, TEXT("%lu"), paacd->cbSrcReadSize); ComboBox_AddString(hcb, ach); wsprintf(ach, TEXT("%lu"), paacd->cbSrcData); ComboBox_AddString(hcb, ach); wsprintf(ach, TEXT("%u"), paacd->pwfxSrc->nBlockAlign); ComboBox_AddString(hcb, ach); ComboBox_AddString(hcb, TEXT("1")); ComboBox_AddString(hcb, TEXT("2147483648")); ComboBox_AddString(hcb, TEXT("4294967295")); ComboBox_SetCurSel(hcb, 0); mmr = acmStreamSize(paacd->has, paacd->cbSrcReadSize, &paacd->cbDstBufSize, ACM_STREAMSIZEF_SOURCE); hcb = GetDlgItem(hwnd, IDD_AAPROPERTIES_COMBO_DESTINATION); SetWindowFont(hcb, hfont, FALSE); wsprintf(ach, TEXT("%lu"), paacd->cbDstBufSize); ComboBox_AddString(hcb, ach); wsprintf(ach, TEXT("%u"), paacd->pwfxDst->nBlockAlign); ComboBox_AddString(hcb, ach); ComboBox_AddString(hcb, TEXT("1")); ComboBox_AddString(hcb, TEXT("2147483648")); ComboBox_AddString(hcb, TEXT("4294967295")); ComboBox_SetCurSel(hcb, 0); return (TRUE); case WM_COMMAND: uId = GET_WM_COMMAND_ID(wParam, lParam); switch (uId) { case IDD_AAPROPERTIES_BTN_SOURCE: hcb = GetDlgItem(hwnd, IDD_AAPROPERTIES_COMBO_SOURCE); Edit_GetText(hcb, ach, SIZEOF(ach)); cb = _tcstoul(ach, NULL, 10); mmr = acmStreamSize(paacd->has, cb, &cb, ACM_STREAMSIZEF_SOURCE); wsprintf(ach, TEXT("%lu"), cb); hcb = GetDlgItem(hwnd, IDD_AAPROPERTIES_COMBO_DESTINATION); Edit_SetText(hcb, ach); break; case IDD_AAPROPERTIES_BTN_DESTINATION: hcb = GetDlgItem(hwnd, IDD_AAPROPERTIES_COMBO_DESTINATION); Edit_GetText(hcb, ach, SIZEOF(ach)); cb = _tcstoul(ach, NULL, 10); mmr = acmStreamSize(paacd->has, cb, &cb, ACM_STREAMSIZEF_DESTINATION); wsprintf(ach, TEXT("%lu"), cb); hcb = GetDlgItem(hwnd, IDD_AAPROPERTIES_COMBO_SOURCE); Edit_SetText(hcb, ach); break; case IDOK: hcb = GetDlgItem(hwnd, IDD_AAPROPERTIES_COMBO_SOURCE); Edit_GetText(hcb, ach, SIZEOF(ach)); paacd->cbSrcReadSize = _tcstoul(ach, NULL, 10); // -- fall through -- // case IDCANCEL: EndDialog(hwnd, (IDOK == uId)); break; } break; } return (FALSE); } // AcmAppDlgProcProperties() //==========================================================================; // // // // //==========================================================================; //--------------------------------------------------------------------------; // // BOOL AcmAppChooserFormatSuggest // // Description: // // // Arguments: // HWND hwnd: // // PAACONVERTDESC paacd: // // Return (BOOL): // // //--------------------------------------------------------------------------; BOOL FNLOCAL AcmAppChooserFormatSuggest ( HWND hwnd, PAACONVERTDESC paacd ) { MMRESULT mmr; LPWAVEFORMATEX pwfx; DWORD cbwfx; DWORD cbwfxSrc; // // this should never fail // mmr = acmMetrics(NULL, ACM_METRIC_MAX_SIZE_FORMAT, &cbwfx); if (MMSYSERR_NOERROR != mmr) { DPF(0, "!AcmAppChooserFormatSuggest() acmMetrics failed mmr=%u!", mmr); return (FALSE); } // // just in case no ACM driver is installed for the source format and // the source has a larger format size than the largest enabled ACM // driver... // cbwfxSrc = SIZEOF_WAVEFORMATEX(paacd->pwfxSrc); cbwfx = max(cbwfx, cbwfxSrc); pwfx = (LPWAVEFORMATEX)GlobalAllocPtr(GHND, cbwfx); if (NULL == pwfx) { DPF(0, "!AcmAppChooserFormatSuggest() GlobalAllocPtr(%lu) failed!", cbwfx); return (FALSE); } // // 'suggest anything' // mmr = acmFormatSuggest(NULL, paacd->pwfxSrc, pwfx, cbwfx, 0L); if (MMSYSERR_NOERROR != mmr) { AppMsgBox(hwnd, MB_OK | MB_ICONEXCLAMATION, TEXT("AcmAppChooserFormatSuggest() there is no suggested destination format. Defaulting to source format.")); _fmemcpy(pwfx, paacd->pwfxSrc, (UINT)cbwfxSrc); } // // // if (NULL != paacd->pwfxDst) { GlobalFreePtr(paacd->pwfxDst); } paacd->pwfxDst = pwfx; AcmAppGetFormatDescription(pwfx, paacd->szDstFormatTag, paacd->szDstFormat); return (TRUE); } // AcmAppChooserFormatSuggest() //--------------------------------------------------------------------------; // // BOOL AcmAppChooserSaveFile // // Description: // // // Arguments: // HWND hwnd: // // PAACONVERTDESC paacd: // // Return (BOOL): // // //--------------------------------------------------------------------------; BOOL FNLOCAL AcmAppChooserSaveFile ( HWND hwnd, PAACONVERTDESC paacd ) { TCHAR szFilePath[APP_MAX_FILE_PATH_CHARS]; TCHAR szFileTitle[APP_MAX_FILE_TITLE_CHARS]; HWND hedit; BOOL f; hedit = GetDlgItem(hwnd, IDD_AACHOOSER_EDIT_FILE_OUTPUT); Edit_GetText(hedit, paacd->szFilePathDst, SIZEOF(paacd->szFilePathDst)); lstrcpy(szFilePath, paacd->szFilePathDst); f = AppGetFileName(hwnd, szFilePath, szFileTitle, APP_GETFILENAMEF_SAVE); if (f) { lstrcpy(paacd->szFilePathDst, szFilePath); Edit_SetText(hedit, paacd->szFilePathDst); } return (f); } // AcmAppChooserSaveFile() //--------------------------------------------------------------------------; // // BOOL AcmAppChooserProperties // // Description: // // // Arguments: // HWND hwnd: // // PAACONVERTDESC paacd: // // Return (BOOL): // // //--------------------------------------------------------------------------; BOOL FNLOCAL AcmAppChooserProperties ( HWND hwnd, PAACONVERTDESC paacd ) { MMRESULT mmr; BOOL f; // // // if (NULL != paacd->hadid) { mmr = acmDriverOpen(&paacd->had, paacd->hadid, 0L); if (MMSYSERR_NOERROR != mmr) { return (FALSE); } } mmr = acmStreamOpen(&paacd->has, paacd->had, paacd->pwfxSrc, paacd->pwfxDst, paacd->fApplyFilter ? paacd->pwfltr : (LPWAVEFILTER)NULL, 0L, 0L, paacd->fdwOpen); if (MMSYSERR_NOERROR == mmr) { f = DialogBoxParam(ghinst, DLG_AAPROPERTIES, hwnd, AcmAppDlgProcProperties, (LPARAM)(UINT)paacd); acmStreamClose(paacd->has, 0L); paacd->has = NULL; } if (NULL != paacd->had) { acmDriverClose(paacd->had, 0L); paacd->had = NULL; } return (f); } // AcmAppChooserProperties() //--------------------------------------------------------------------------; // // UINT AcmAppChooserFormatHook // // Description: // // // Arguments: // HWND hwnd: // // UINT uMsg: // // WPARAM wParam: // // LPARAM lParam: // // Return (UINT): // // //--------------------------------------------------------------------------; UINT FNWCALLBACK AcmAppChooserFormatHook ( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { static BOOL fVerify; LPWAVEFORMATEX pwfx; WAVEFORMATEX wfx; TCHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS]; TCHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS]; PAACONVERTDESC paacd; UINT uId; int n; BOOL f; paacd = (PAACONVERTDESC)(UINT)GetWindowLong(hwnd, DWL_USER); switch (uMsg) { case WM_INITDIALOG: paacd = (PAACONVERTDESC)(UINT)lParam; SetWindowLong(hwnd, DWL_USER, lParam); DPF(1, "AcmAppChooserFormatHook(%.04Xh, WM_INITDIALOG, %u, %lu): %.04Xh", hwnd, wParam, lParam, paacd); fVerify = TRUE; return (TRUE); case MM_ACM_FORMATCHOOSE: switch (wParam) { case FORMATCHOOSE_FORMATTAG_VERIFY: if (!fVerify) break; wfx.wFormatTag = LOWORD(lParam); AcmAppGetFormatDescription(&wfx, szFormatTag, NULL); n = AppMsgBox(hwnd, MB_YESNOCANCEL | MB_ICONQUESTION, TEXT("Add format tag [%lu], '%s'?"), lParam, (LPTSTR)szFormatTag); fVerify = (IDCANCEL != n); if (!fVerify) break; f = (IDYES == n); SetWindowLong(hwnd, DWL_MSGRESULT, f); return (TRUE); case FORMATCHOOSE_FORMAT_VERIFY: if (!fVerify) break; pwfx = (LPWAVEFORMATEX)lParam; AcmAppGetFormatDescription(pwfx, szFormatTag, szFormat); n = AppMsgBox(hwnd, MB_YESNOCANCEL | MB_ICONQUESTION, TEXT("Add format '%s' for format tag [%u], '%s'?"), (LPTSTR)szFormat, pwfx->wFormatTag, (LPTSTR)szFormatTag); fVerify = (IDCANCEL != n); if (!fVerify) break; f = (IDYES == n); SetWindowLong(hwnd, DWL_MSGRESULT, f); return (TRUE); case FORMATCHOOSE_CUSTOM_VERIFY: if (!fVerify) break; pwfx = (LPWAVEFORMATEX)lParam; AcmAppGetFormatDescription(pwfx, szFormatTag, szFormat); n = AppMsgBox(hwnd, MB_YESNOCANCEL | MB_ICONQUESTION, TEXT("Add CUSTOM format '%s' for format tag [%u], '%s'?"), (LPTSTR)szFormat, pwfx->wFormatTag, (LPTSTR)szFormatTag); fVerify = (IDCANCEL != n); if (!fVerify) break; f = (IDYES == n); SetWindowLong(hwnd, DWL_MSGRESULT, f); return (TRUE); } break; case WM_COMMAND: uId = GET_WM_COMMAND_ID(wParam, lParam); switch (uId) { case IDOK: case IDCANCEL: break; } break; } return (FALSE); } // AcmAppChooserFormatHook() //--------------------------------------------------------------------------; // // UINT AcmAppChooserFilterHook // // Description: // // // Arguments: // HWND hwnd: // // UINT uMsg: // // WPARAM wParam: // // LPARAM lParam: // // Return (UINT): // // //--------------------------------------------------------------------------; UINT FNWCALLBACK AcmAppChooserFilterHook ( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { static BOOL fVerify; WAVEFILTER wfltr; LPWAVEFILTER pwfltr; TCHAR szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS]; TCHAR szFilter[ACMFILTERDETAILS_FILTER_CHARS]; PAACONVERTDESC paacd; UINT uId; int n; BOOL f; paacd = (PAACONVERTDESC)(UINT)GetWindowLong(hwnd, DWL_USER); switch (uMsg) { case WM_INITDIALOG: paacd = (PAACONVERTDESC)(UINT)lParam; SetWindowLong(hwnd, DWL_USER, lParam); DPF(1, "AcmAppChooserFilterHook(%.04Xh, WM_INITDIALOG, %u, %lu): %.04Xh", hwnd, wParam, lParam, paacd); fVerify = TRUE; return (TRUE); case MM_ACM_FILTERCHOOSE: switch (wParam) { case FILTERCHOOSE_FILTERTAG_VERIFY: if (!fVerify) break; wfltr.dwFilterTag = lParam; AcmAppGetFilterDescription(&wfltr, szFilterTag, NULL); n = AppMsgBox(hwnd, MB_YESNOCANCEL | MB_ICONQUESTION, TEXT("Add filter tag [%lu], '%s'?"), lParam, (LPTSTR)szFilterTag); fVerify = (IDCANCEL != n); if (!fVerify) break; f = (IDYES == n); SetWindowLong(hwnd, DWL_MSGRESULT, f); return (TRUE); case FILTERCHOOSE_FILTER_VERIFY: if (!fVerify) break; pwfltr = (LPWAVEFILTER)lParam; AcmAppGetFilterDescription(pwfltr, szFilterTag, szFilter); n = AppMsgBox(hwnd, MB_YESNOCANCEL | MB_ICONQUESTION, TEXT("Add filter '%s' for filter tag [%lu], '%s'?"), (LPTSTR)szFilter, pwfltr->dwFilterTag, (LPTSTR)szFilterTag); fVerify = (IDCANCEL != n); if (!fVerify) break; f = (IDYES == n); SetWindowLong(hwnd, DWL_MSGRESULT, f); return (TRUE); case FILTERCHOOSE_CUSTOM_VERIFY: if (!fVerify) break; pwfltr = (LPWAVEFILTER)lParam; AcmAppGetFilterDescription(pwfltr, szFilterTag, szFilter); n = AppMsgBox(hwnd, MB_YESNOCANCEL | MB_ICONQUESTION, TEXT("Add CUSTOM filter '%s' for filter tag [%lu], '%s'?"), (LPTSTR)szFilter, pwfltr->dwFilterTag, (LPTSTR)szFilterTag); fVerify = (IDCANCEL != n); if (!fVerify) break; f = (IDYES == n); SetWindowLong(hwnd, DWL_MSGRESULT, f); return (TRUE); } break; case WM_COMMAND: uId = GET_WM_COMMAND_ID(wParam, lParam); switch (uId) { case IDOK: case IDCANCEL: break; } break; } return (FALSE); } // AcmAppChooserFilterHook() //--------------------------------------------------------------------------; // // BOOL AcmAppChooserFormat // // Description: // // // Arguments: // HWND hwnd: // // PAACONVERTDESC paacd: // // BOOL fOptions: // // Return (BOOL): // // //--------------------------------------------------------------------------; BOOL FNLOCAL AcmAppChooserFormat ( HWND hwnd, PAACONVERTDESC paacd, BOOL fOptions ) { ACMFORMATCHOOSE afc; MMRESULT mmr; LPWAVEFORMATEX pwfx; DWORD cbwfx; DWORD cbwfxSrc; DWORD fdwSuggest; DWORD fdwStyle; DWORD fdwEnum; WAVEFORMATEX wfxEnum; BOOL f; HRSRC hrsrc; // // // fdwSuggest = 0L; fdwStyle = 0L; fdwEnum = 0L; if (fOptions) { wfxEnum.wFormatTag = paacd->pwfxSrc->wFormatTag; wfxEnum.nChannels = paacd->pwfxSrc->nChannels; wfxEnum.nSamplesPerSec = paacd->pwfxSrc->nSamplesPerSec; wfxEnum.wBitsPerSample = paacd->pwfxSrc->wBitsPerSample; wfxEnum.nBlockAlign = 0; wfxEnum.nAvgBytesPerSec = fdwEnum; wfxEnum.cbSize = 0; f = DialogBoxParam(ghinst, DLG_AAFORMATENUM, hwnd, AcmAppDlgProcFormatEnum, (LPARAM)(UINT)&wfxEnum); if (!f) { return (FALSE); } fdwEnum = wfxEnum.nAvgBytesPerSec; wfxEnum.nAvgBytesPerSec = 0L; } if (fOptions) { afc.fdwStyle = fdwStyle; f = DialogBoxParam(ghinst, DLG_AAFORMATSTYLE, hwnd, AcmAppDlgProcFormatStyle, (LPARAM)(UINT)&afc); if (!f) { return (FALSE); } fdwStyle = afc.fdwStyle; } // // this should never fail // mmr = acmMetrics(NULL, ACM_METRIC_MAX_SIZE_FORMAT, &cbwfx); if (MMSYSERR_NOERROR != mmr) { DPF(0, "!AcmAppChooserFormat() acmMetrics failed mmr=%u!", mmr); return (FALSE); } // // just in case no ACM driver is installed for the source format and // the source has a larger format size than the largest enabled ACM // driver... // cbwfxSrc = SIZEOF_WAVEFORMATEX(paacd->pwfxSrc); cbwfx = max(cbwfx, cbwfxSrc); pwfx = (LPWAVEFORMATEX)GlobalAllocPtr(GHND, cbwfx); if (NULL == pwfx) { DPF(0, "!AcmAppChooserFormat() GlobalAllocPtr(%lu) failed!", cbwfx); return (FALSE); } // // // // if (0 != (fdwStyle & ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT)) { if (NULL != paacd->pwfxDst) { _fmemcpy(pwfx, paacd->pwfxDst, SIZEOF_WAVEFORMATEX(paacd->pwfxDst)); } else { _fmemcpy(pwfx, paacd->pwfxSrc, (UINT)cbwfxSrc); } } // // // // if (0 == (ACMFORMATCHOOSE_STYLEF_SHOWHELP & fdwStyle)) { guMsgHelp = 0; } else { guMsgHelp = RegisterWindowMessage(ACMHELPMSGSTRING); if (0 == guMsgHelp) { fdwStyle &= ~ACMFORMATCHOOSE_STYLEF_SHOWHELP; } else { gpszAcmAppHelp = gszAcmAppHelpFormat; } } // // initialize the ACMFORMATCHOOSE members // memset(&afc, 0, sizeof(afc)); afc.cbStruct = sizeof(afc); afc.fdwStyle = fdwStyle; afc.hwndOwner = hwnd; afc.pwfx = pwfx; afc.cbwfx = cbwfx; afc.pszTitle = TEXT("Destination Format Choice"); afc.szFormatTag[0] = '\0'; afc.szFormat[0] = '\0'; afc.pszName = NULL; afc.cchName = 0; afc.fdwEnum = fdwEnum; if (0L == (afc.fdwEnum & (ACM_FORMATENUMF_WFORMATTAG | ACM_FORMATENUMF_NCHANNELS | ACM_FORMATENUMF_NSAMPLESPERSEC | ACM_FORMATENUMF_WBITSPERSAMPLE | ACM_FORMATENUMF_CONVERT | ACM_FORMATENUMF_SUGGEST))) { afc.pwfxEnum = NULL; } else { if (0 == (afc.fdwEnum & (ACM_FORMATENUMF_CONVERT | ACM_FORMATENUMF_SUGGEST))) { // // if _CONVERT and _SUGGEST are not specified, then we only // need to pass in a format structure large enough to describe // everything up to (but not including) the cbSize--it's fine // to pass more, but it is not necessary. in other words, a // PCMWAVEFORMAT would do nicely... // afc.pwfxEnum = &wfxEnum; } else { // // for the _CONVERT and _SUGGEST flags, we must pass a valid // format--and since we're looking for destinations that apply // to our source format, we simply reference it.. // afc.pwfxEnum = paacd->pwfxSrc; } } // // // hrsrc = NULL; if (0L == (afc.fdwStyle & (ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATE | ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATEHANDLE))) { afc.hInstance = NULL; afc.pszTemplateName = NULL; } else { if (0L != (afc.fdwStyle & ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATEHANDLE)) { // // ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATEHANDLE // hrsrc = FindResource(ghinst, DLG_AAFORMATCHOOSE_TEMPLATE, RT_DIALOG); afc.hInstance = (HINSTANCE)LoadResource(ghinst, hrsrc); afc.pszTemplateName = NULL; } else { afc.hInstance = ghinst; afc.pszTemplateName = DLG_AAFORMATCHOOSE_TEMPLATE; } } if (0L == (afc.fdwStyle & ACMFORMATCHOOSE_STYLEF_ENABLEHOOK)) { afc.lCustData = 0L; afc.pfnHook = NULL; } else { afc.lCustData = (LPARAM)(UINT)paacd; afc.pfnHook = AcmAppChooserFormatHook; } // // // mmr = acmFormatChoose(&afc); if (NULL != hrsrc) { FreeResource((HGLOBAL)afc.hInstance); } // // // if (0 != guMsgHelp) { WinHelp(hwnd, gszAcmAppHelpFormat, HELP_QUIT, 0L); guMsgHelp = 0; } if (MMSYSERR_NOERROR != mmr) { if (ACMERR_CANCELED != mmr) { TCHAR ach[40]; AcmAppGetErrorString(mmr, ach); AppMsgBox(hwnd, MB_OK | MB_ICONEXCLAMATION, TEXT("acmFormatChoose() failed with error %s, [%u]."), (LPTSTR)ach, mmr); } GlobalFreePtr(pwfx); return (FALSE); } // // // if (NULL != paacd->pwfxDst) { GlobalFreePtr(paacd->pwfxDst); } paacd->pwfxDst = pwfx; lstrcpy(paacd->szDstFormatTag, afc.szFormatTag); lstrcpy(paacd->szDstFormat, afc.szFormat); return (TRUE); } // AcmAppChooserFormat() //--------------------------------------------------------------------------; // // BOOL AcmAppChooserFilter // // Description: // // // Arguments: // HWND hwnd: // // PAACONVERTDESC paacd: // // BOOL fOptions: // // Return (BOOL): // // //--------------------------------------------------------------------------; BOOL FNLOCAL AcmAppChooserFilter ( HWND hwnd, PAACONVERTDESC paacd, BOOL fOptions ) { ACMFILTERCHOOSE afc; MMRESULT mmr; LPWAVEFILTER pwfltr; DWORD cbwfltr; DWORD fdwStyle; DWORD fdwEnum; WAVEFILTER wfltrEnum; BOOL f; HRSRC hrsrc; // // // fdwStyle = 0L; fdwEnum = 0L; if (fOptions) { _fmemset(&wfltrEnum, 0, sizeof(wfltrEnum)); wfltrEnum.cbStruct = sizeof(wfltrEnum); wfltrEnum.dwFilterTag = paacd->pwfxSrc->wFormatTag; wfltrEnum.fdwFilter = fdwEnum; f = DialogBoxParam(ghinst, DLG_AAFILTERENUM, hwnd, AcmAppDlgProcFilterEnum, (LPARAM)(UINT)&wfltrEnum); if (!f) { return (FALSE); } fdwEnum = wfltrEnum.fdwFilter; wfltrEnum.fdwFilter = 0L; } if (fOptions) { afc.fdwStyle = fdwStyle; f = DialogBoxParam(ghinst, DLG_AAFILTERSTYLE, hwnd, AcmAppDlgProcFilterStyle, (LPARAM)(UINT)&afc); if (!f) { return (FALSE); } fdwStyle = afc.fdwStyle; } // // this should never fail // mmr = acmMetrics(NULL, ACM_METRIC_MAX_SIZE_FILTER, &cbwfltr); if (MMSYSERR_NOERROR != mmr) { DPF(0, "!AcmAppChooserFilter() acmMetrics failed mmr=%u!", mmr); return (FALSE); } // // // cbwfltr = max(cbwfltr, sizeof(WAVEFILTER)); pwfltr = (LPWAVEFILTER)GlobalAllocPtr(GHND, cbwfltr); if (NULL == pwfltr) { DPF(0, "!AcmAppChooserFilter() GlobalAllocPtr(%lu) failed!", cbwfltr); return (FALSE); } // // // if ((NULL != paacd->pwfltr) && (0L == fdwEnum)) { fdwStyle |= ACMFILTERCHOOSE_STYLEF_INITTOFILTERSTRUCT; _fmemcpy(pwfltr, paacd->pwfltr, (UINT)paacd->pwfltr->cbStruct); } // // // // if (0 == (ACMFILTERCHOOSE_STYLEF_SHOWHELP & fdwStyle)) { guMsgHelp = 0; } else { guMsgHelp = RegisterWindowMessage(ACMHELPMSGSTRING); if (0 == guMsgHelp) { fdwStyle &= ~ACMFILTERCHOOSE_STYLEF_SHOWHELP; } else { gpszAcmAppHelp = gszAcmAppHelpFilter; } } // // initialize the ACMFILTERCHOOSE members // memset(&afc, 0, sizeof(afc)); afc.cbStruct = sizeof(afc); afc.fdwStyle = fdwStyle; afc.hwndOwner = hwnd; afc.pwfltr = pwfltr; afc.cbwfltr = cbwfltr; afc.pszTitle = TEXT("Apply Filter Choice"); afc.szFilterTag[0] = '\0'; afc.szFilter[0] = '\0'; afc.pszName = NULL; afc.cchName = 0; afc.fdwEnum = fdwEnum; if (0L == (afc.fdwEnum & ACM_FILTERENUMF_DWFILTERTAG)) { afc.pwfltrEnum = NULL; } else { afc.pwfltrEnum = &wfltrEnum; } if (0L == (afc.fdwStyle & (ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATE | ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATEHANDLE))) { afc.hInstance = NULL; afc.pszTemplateName = NULL; } else { if (0L != (afc.fdwStyle & ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATEHANDLE)) { // // ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATEHANDLE // hrsrc = FindResource(ghinst, DLG_AAFILTERCHOOSE_TEMPLATE, RT_DIALOG); afc.hInstance = (HINSTANCE)LoadResource(ghinst, hrsrc); afc.pszTemplateName = NULL; } else { afc.hInstance = ghinst; afc.pszTemplateName = DLG_AAFILTERCHOOSE_TEMPLATE; } } if (0L == (afc.fdwStyle & ACMFILTERCHOOSE_STYLEF_ENABLEHOOK)) { afc.lCustData = 0L; afc.pfnHook = NULL; } else { afc.lCustData = (LPARAM)(UINT)paacd; afc.pfnHook = AcmAppChooserFilterHook; } // // // mmr = acmFilterChoose(&afc); if (NULL != hrsrc) { FreeResource((HGLOBAL)afc.hInstance); } // // // if (0 != guMsgHelp) { WinHelp(hwnd, gszAcmAppHelpFilter, HELP_QUIT, 0L); guMsgHelp = 0; } if (MMSYSERR_NOERROR != mmr) { if (ACMERR_CANCELED != mmr) { AppMsgBox(hwnd, MB_OK | MB_ICONEXCLAMATION, TEXT("acmFilterChoose() failed with error = %u!"), mmr); } GlobalFreePtr(pwfltr); return (FALSE); } // // // if (NULL != paacd->pwfltr) { GlobalFreePtr(paacd->pwfltr); } paacd->pwfltr = pwfltr; lstrcpy(paacd->szFilterTag, afc.szFilterTag); lstrcpy(paacd->szFilter, afc.szFilter); return (TRUE); } // AcmAppChooserFilter() //--------------------------------------------------------------------------; // // BOOL AcmAppChooserDriverEnumCallback // // Description: // // // Arguments: // HACMDRIVERID hadid: // // DWORD dwInstance: // // DWORD fdwSupport: // // Return (BOOL): // // //--------------------------------------------------------------------------; BOOL FNEXPORT AcmAppChooserDriverEnumCallback ( HACMDRIVERID hadid, DWORD dwInstance, DWORD fdwSupport ) { MMRESULT mmr; HWND hcb; int n; ACMDRIVERDETAILS add; // // skip anything that does not support what we're after (for example, // this will skip _HARDWARE only drivers that do not support stream // functionality). // if (0 == (fdwSupport & (ACMDRIVERDETAILS_SUPPORTF_CODEC | ACMDRIVERDETAILS_SUPPORTF_CONVERTER | ACMDRIVERDETAILS_SUPPORTF_FILTER))) { return (TRUE); } // // // hcb = (HWND)(UINT)dwInstance; add.cbStruct = sizeof(add); mmr = acmDriverDetails(hadid, &add, 0L); if (MMSYSERR_NOERROR != mmr) { lstrcpy(add.szLongName, gszBogus); } AcmAppDebugLog(add.szLongName); AcmAppDebugLog(TEXT("\r\n")); n = ComboBox_AddString(hcb, add.szLongName); ComboBox_SetItemData(hcb, n, (LPARAM)(UINT)hadid); // // return TRUE to continue with enumeration (FALSE will stop the // enumerator) // return (TRUE); } // AcmAppChooserDriverEnumCallback() //--------------------------------------------------------------------------; // // BOOL AcmAppChooserUpdateDisplay // // Description: // // // Arguments: // HWND hwnd: // // PAACONVERTDESC paacd: // // Return (BOOL): // // //--------------------------------------------------------------------------; BOOL FNLOCAL AcmAppChooserUpdateDisplay ( HWND hwnd, PAACONVERTDESC paacd ) { HWND hedit; HWND htxt; HWND hcb; HWND hsb; int n; MMRESULT mmr; ACMDRIVERDETAILS add; TCHAR ach[40]; LPWAVEFILTER pwfltr; HACMDRIVERID hadid; BOOL f; DWORD fdwOpen; int nValue; int nMinPos; int nMaxPos; DWORD cbSrc; DWORD cbDst; // // // htxt = GetDlgItem(hwnd, IDD_AACHOOSER_TXT_FILE_INPUT); SetWindowText(htxt, paacd->szFilePathSrc); AcmAppGetFormatDescription(paacd->pwfxSrc, paacd->szSrcFormatTag, paacd->szSrcFormat); AppFormatBigNumber(ach, paacd->cbSrcData); AppFormatBigNumber(&ach[20], paacd->cbSrcData / paacd->pwfxSrc->nBlockAlign); htxt = GetDlgItem(hwnd, IDD_AACHOOSER_TXT_FORMAT_INPUT); AppSetWindowText(htxt, TEXT("%s: %s\r\nAlignment=%u, Data=%s bytes, %s blocks"), (LPTSTR)paacd->szSrcFormatTag, (LPTSTR)paacd->szSrcFormat, paacd->pwfxSrc->nBlockAlign, (LPTSTR)ach, (LPTSTR)&ach[20]); hedit = GetDlgItem(hwnd, IDD_AACHOOSER_EDIT_FILE_OUTPUT); Edit_GetText(hedit, paacd->szFilePathDst, SIZEOF(paacd->szFilePathDst)); // // // nValue = (int)paacd->uBufferTimePerConvert; hsb = GetDlgItem(hwnd, IDD_AACHOOSER_SCROLL_TIME); GetScrollRange(hsb, SB_CTL, &nMinPos, &nMaxPos); if (nValue != GetScrollPos(hsb, SB_CTL)) { SetScrollPos(hsb, SB_CTL, nValue, TRUE); if (nValue == nMaxPos) { lstrcpy(ach, TEXT("(ALL)")); } else if (nValue == nMinPos) { lstrcpy(ach, TEXT("(Auto)")); } else { wsprintf(ach, TEXT("%u.%.03u"), nValue / 1000, nValue % 1000); } htxt = GetDlgItem(hwnd, IDD_AACHOOSER_TXT_TIME); SetWindowText(htxt, ach); } // // // if (nValue == nMaxPos) { cbSrc = paacd->cbSrcData; } else if (nValue == nMinPos) { // // could do something real here--for now, just do '1/8th of // a second'.. // cbSrc = paacd->pwfxSrc->nAvgBytesPerSec; cbSrc = MulDivRN(cbSrc, 175, 1000); } else { cbSrc = paacd->pwfxSrc->nAvgBytesPerSec; cbSrc = MulDivRN(cbSrc, (UINT)nValue, 1000); } paacd->cbSrcReadSize = cbSrc; // // // paacd->hadid = NULL; hcb = GetDlgItem(hwnd, IDD_AACHOOSER_COMBO_DRIVER); n = ComboBox_GetCurSel(hcb); if (LB_ERR != n) { paacd->hadid = (HACMDRIVERID)(UINT)ComboBox_GetItemData(hcb, n); } // // // // htxt = GetDlgItem(hwnd, IDD_AACHOOSER_TXT_FORMAT); if (NULL == paacd->pwfxDst) { SetWindowText(htxt, TEXT("(no format selected)")); } else { AppSetWindowText(htxt, TEXT("%s: %s\r\nAlignment=%u"), (LPTSTR)paacd->szDstFormatTag, (LPTSTR)paacd->szDstFormat, paacd->pwfxDst->nBlockAlign); } // // // // htxt = GetDlgItem(hwnd, IDD_AACHOOSER_TXT_FILTER); if (NULL == paacd->pwfltr) { SetWindowText(htxt, TEXT("(no filter selected)")); } else { AppSetWindowText(htxt, TEXT("%s: %s"), (LPTSTR)paacd->szFilterTag, (LPTSTR)paacd->szFilter); } hedit = GetDlgItem(hwnd, IDD_AACHOOSER_EDIT_DETAILS); MEditPrintF(hedit, NULL); if (NULL == paacd->pwfxDst) { MEditPrintF(hedit, TEXT("hadid=%.04Xh\r\npwfxDst=%.08lXh\r\npwfltr=%.08lXh"), paacd->hadid, paacd->pwfxDst, paacd->pwfltr); return (FALSE); } // // // if (NULL != paacd->hadid) { mmr = acmDriverOpen(&paacd->had, paacd->hadid, 0L); if (MMSYSERR_NOERROR != mmr) { AcmAppGetErrorString(mmr, ach); MEditPrintF(hedit, TEXT("The selected driver (hadid=%.04Xh) cannot be opened. %s (%u)"), paacd->hadid, (LPSTR)ach, mmr); return (FALSE); } } SetWindowRedraw(hedit, FALSE); // // // f = IsDlgButtonChecked(hwnd, IDD_AACHOOSER_CHECK_FILTER); pwfltr = (f ? paacd->pwfltr : (LPWAVEFILTER)NULL); paacd->fApplyFilter = f; fdwOpen = 0L; f = IsDlgButtonChecked(hwnd, IDD_AACHOOSER_CHECK_NONREALTIME); if (f) { fdwOpen |= ACM_STREAMOPENF_NONREALTIME; } f = IsDlgButtonChecked(hwnd, IDD_AACHOOSER_CHECK_ASYNC); if (f) { fdwOpen |= ACM_STREAMOPENF_ASYNC; } paacd->fdwOpen = fdwOpen; // // // MEditPrintF(hedit, TEXT("~%12s: "), (LPTSTR)TEXT("Stream Open")); mmr = acmStreamOpen(&paacd->has, paacd->had, paacd->pwfxSrc, paacd->pwfxDst, pwfltr, 0L, 0L, fdwOpen); if (MMSYSERR_NOERROR == mmr) { TCHAR szSrc[20]; BOOL fSrcAligned; BOOL fDstAligned; acmDriverID((HACMOBJ)paacd->has, &hadid, 0L); add.cbStruct = sizeof(add); mmr = acmDriverDetails(hadid, &add, 0L); if (MMSYSERR_NOERROR != mmr) { lstrcpy(add.szLongName, gszBogus); } MEditPrintF(hedit, TEXT("%s, %s"), (LPTSTR)gszYes, (LPTSTR)add.szLongName); fSrcAligned = (0 == (cbSrc % paacd->pwfxSrc->nBlockAlign)); AppFormatBigNumber(szSrc, cbSrc); mmr = acmStreamSize(paacd->has, cbSrc, &cbDst, ACM_STREAMSIZEF_SOURCE); if (MMSYSERR_NOERROR == mmr) { TCHAR szDst[20]; fDstAligned = (0 == (cbDst % paacd->pwfxDst->nBlockAlign)); AppFormatBigNumber(szDst, cbDst); if (cbSrc < cbDst) { cbDst = MulDivRN(cbDst, 10, cbSrc); cbSrc = 10; } else { cbSrc = MulDivRN(cbSrc, 10, cbDst); cbDst = 10; } MEditPrintF(hedit, TEXT("%12s: Src=%c%10s, Dst=%c%10s (%lu.%lu:%lu.%lu)"), (LPTSTR)TEXT("Buffer Size"), fSrcAligned ? '*' : ' ', (LPTSTR)szSrc, fDstAligned ? '*' : ' ', (LPTSTR)szDst, cbSrc / 10, cbSrc % 10, cbDst / 10, cbDst % 10); } else { AcmAppGetErrorString(mmr, ach); MEditPrintF(hedit, TEXT("%12s: Src=%c%10s, %s (%u)"), (LPTSTR)TEXT("Buffer Size"), fSrcAligned ? '*' : ' ', (LPTSTR)szSrc, (LPTSTR)ach, mmr); } acmStreamClose(paacd->has, 0L); paacd->has = NULL; } else { AcmAppGetErrorString(mmr, ach); MEditPrintF(hedit, TEXT("%s, %s (%u)"), (LPTSTR)gszNo, (LPSTR)ach, mmr); } // // // MEditPrintF(hedit, TEXT("~%12s: "), (LPTSTR)TEXT("(Query)")); mmr = acmStreamOpen(NULL, paacd->had, paacd->pwfxSrc, paacd->pwfxDst, pwfltr, 0L, 0L, fdwOpen | ACM_STREAMOPENF_QUERY); if (MMSYSERR_NOERROR == mmr) { MEditPrintF(hedit, gszYes); } else { AcmAppGetErrorString(mmr, ach); MEditPrintF(hedit, TEXT("%s, %s (%u)"), (LPTSTR)gszNo, (LPSTR)ach, mmr); } if (NULL != paacd->had) { acmDriverClose(paacd->had, 0L); paacd->had = NULL; } SetWindowRedraw(hedit, TRUE); return (MMSYSERR_NOERROR == mmr); } // AcmAppChooserUpdateDisplay() //--------------------------------------------------------------------------; // // BOOL AcmAppChooserScrollConvertTime // // Description: // // // Arguments: // HWND hwnd: // // HWND hsb: // // UINT uCode: // // int nPos: // // Return (BOOL): // // //--------------------------------------------------------------------------; BOOL FNLOCAL AcmAppChooserScrollConvertTime ( HWND hwnd, HWND hsb, UINT uCode, int nPos ) { PAACONVERTDESC paacd; int nMinPos; int nMaxPos; HWND htxt; TCHAR ach[40]; GetScrollRange(hsb, SB_CTL, &nMinPos, &nMaxPos); if ((SB_THUMBPOSITION != uCode) && (SB_THUMBTRACK != uCode)) { nPos = GetScrollPos(hsb, SB_CTL); } // // // switch (uCode) { case SB_PAGEDOWN: if (GetKeyState(VK_CONTROL) < 0) nPos = min(nMaxPos, nPos + 100); else nPos = min(nMaxPos, nPos + 500); break; case SB_LINEDOWN: if (GetKeyState(VK_CONTROL) < 0) nPos = min(nMaxPos, nPos + 1); else nPos = min(nMaxPos, nPos + 10); break; case SB_PAGEUP: if (GetKeyState(VK_CONTROL) < 0) nPos = max(nMinPos, nPos - 100); else nPos = max(nMinPos, nPos - 500); break; case SB_LINEUP: if (GetKeyState(VK_CONTROL) < 0) nPos = max(nMinPos, nPos - 1); else nPos = max(nMinPos, nPos - 10); break; case SB_TOP: if (GetKeyState(VK_CONTROL) < 0) nPos = nMinPos; else nPos = 1000; break; case SB_BOTTOM: nPos = nMaxPos; break; case SB_THUMBPOSITION: case SB_THUMBTRACK: break; default: return (FALSE); } // // // paacd = (PAACONVERTDESC)(UINT)GetWindowLong(hwnd, DWL_USER); paacd->uBufferTimePerConvert = (UINT)nPos; SetScrollPos(hsb, SB_CTL, nPos, TRUE); if (nPos == nMaxPos) { lstrcpy(ach, TEXT("(ALL)")); } else if (nPos == nMinPos) { lstrcpy(ach, TEXT("(Auto)")); } else { wsprintf(ach, TEXT("%u.%.03u"), nPos / 1000, nPos % 1000); } htxt = GetDlgItem(hwnd, IDD_AACHOOSER_TXT_TIME); SetWindowText(htxt, ach); // // // return (TRUE); } // AcmAppChooserScrollConvertTime() //--------------------------------------------------------------------------; // // BOOL AcmAppDlgProcChooser // // Description: // // // Arguments: // HWND hwnd: Handle to window. // // UINT uMsg: Message being sent to the window. // // WPARAM wParam: Specific argument to message. // // LPARAM lParam: Specific argument to message. // // Return (BOOL): // The return value is specific to the message that was received. For // the most part, it is FALSE if this dialog procedure does not handle // a message. // //--------------------------------------------------------------------------; BOOL FNEXPORT AcmAppDlgProcChooser ( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { PAACONVERTDESC paacd; HWND hedit; HWND htxt; HWND hcb; HWND hsb; HFONT hfont; UINT uId; UINT uCmd; BOOL f; // // // if ((0 != guMsgHelp) && (uMsg == guMsgHelp)) { WinHelp(hwnd, gpszAcmAppHelp, HELP_CONTENTS, 0L); return (TRUE); } paacd = (PAACONVERTDESC)(UINT)GetWindowLong(hwnd, DWL_USER); // // // switch (uMsg) { case WM_INITDIALOG: paacd = (PAACONVERTDESC)(UINT)lParam; SetWindowLong(hwnd, DWL_USER, lParam); if (NULL == paacd->pwfxSrc) { AppMsgBox(hwnd, MB_OK | MB_ICONEXCLAMATION, TEXT("You must select a source file to convert.")); EndDialog(hwnd, FALSE); return (TRUE); } if (NULL == paacd->pwfxDst) { AcmAppChooserFormatSuggest(hwnd, paacd); } hfont = GetStockFont(ANSI_VAR_FONT); htxt = GetDlgItem(hwnd, IDD_AACHOOSER_TXT_FILE_INPUT); SetWindowFont(htxt, hfont, FALSE); htxt = GetDlgItem(hwnd, IDD_AACHOOSER_TXT_FORMAT_INPUT); SetWindowFont(htxt, hfont, FALSE); hedit = GetDlgItem(hwnd, IDD_AACHOOSER_EDIT_FILE_OUTPUT); SetWindowFont(hedit, hfont, FALSE); Edit_SetText(hedit, paacd->szFilePathDst); hcb = GetDlgItem(hwnd, IDD_AACHOOSER_COMBO_DRIVER); SetWindowFont(hcb, hfont, FALSE); htxt = GetDlgItem(hwnd, IDD_AACHOOSER_TXT_FORMAT); SetWindowFont(htxt, hfont, FALSE); htxt = GetDlgItem(hwnd, IDD_AACHOOSER_TXT_FILTER); SetWindowFont(htxt, hfont, FALSE); hfont = ghfontApp; htxt = GetDlgItem(hwnd, IDD_AACHOOSER_TXT_TIME); SetWindowFont(htxt, hfont, FALSE); hedit = GetDlgItem(hwnd, IDD_AACHOOSER_EDIT_DETAILS); SetWindowFont(hedit, hfont, FALSE); hsb = GetDlgItem(hwnd, IDD_AACHOOSER_SCROLL_TIME); SetScrollRange(hsb, SB_CTL, 0, 10000, FALSE); // // // CheckDlgButton(hwnd, IDD_AACHOOSER_CHECK_NONREALTIME, TRUE); SendMessage(hwnd, WM_ACMAPP_ACM_NOTIFY, 0, 0L); return (TRUE); case WM_ACMAPP_ACM_NOTIFY: AppHourGlass(TRUE); hcb = GetDlgItem(hwnd, IDD_AACHOOSER_COMBO_DRIVER); SetWindowRedraw(hcb, FALSE); ComboBox_ResetContent(hcb); ComboBox_AddString(hcb, TEXT("[ACM Driver Mapper]")); AcmAppDebugLog(NULL); acmDriverEnum(AcmAppChooserDriverEnumCallback, (DWORD)(UINT)hcb, 0L); ComboBox_SetCurSel(hcb, 0); SetWindowRedraw(hcb, TRUE); f = AcmAppChooserUpdateDisplay(hwnd, paacd); EnableWindow(GetDlgItem(hwnd, IDOK), f); EnableWindow(GetDlgItem(hwnd, IDD_AACHOOSER_BTN_PROPERTIES), f); AppHourGlass(FALSE); break; case WM_HSCROLL: f = (BOOL)HANDLE_WM_HSCROLL(hwnd, wParam, lParam, AcmAppChooserScrollConvertTime); f = TRUE; if (f) { AppHourGlass(TRUE); f = AcmAppChooserUpdateDisplay(hwnd, paacd); EnableWindow(GetDlgItem(hwnd, IDOK), f); EnableWindow(GetDlgItem(hwnd, IDD_AACHOOSER_BTN_PROPERTIES), f); AppHourGlass(FALSE); } return (TRUE); case WM_COMMAND: uId = GET_WM_COMMAND_ID(wParam, lParam); f = FALSE; switch (uId) { case IDD_AACHOOSER_BTN_BROWSE: f = AcmAppChooserSaveFile(hwnd, paacd); break; case IDD_AACHOOSER_BTN_PROPERTIES: f = AcmAppChooserProperties(hwnd, paacd); break; case IDD_AACHOOSER_BTN_FORMAT_OPTIONS: case IDD_AACHOOSER_BTN_FORMAT: f = (IDD_AACHOOSER_BTN_FORMAT_OPTIONS == uId); f = AcmAppChooserFormat(hwnd, paacd, f); break; case IDD_AACHOOSER_BTN_FILTER_OPTIONS: case IDD_AACHOOSER_BTN_FILTER: f = (IDD_AACHOOSER_BTN_FILTER_OPTIONS == uId); f = AcmAppChooserFilter(hwnd, paacd, f); break; case IDD_AACHOOSER_COMBO_DRIVER: uCmd = GET_WM_COMMAND_CMD(wParam, lParam); switch (uCmd) { case CBN_SELCHANGE: f = TRUE; break; } break; case IDD_AACHOOSER_CHECK_FILTER: case IDD_AACHOOSER_CHECK_NONREALTIME: case IDD_AACHOOSER_CHECK_ASYNC: f = TRUE; break; case IDOK: hedit = GetDlgItem(hwnd, IDD_AACHOOSER_EDIT_FILE_OUTPUT); Edit_GetText(hedit, paacd->szFilePathDst, SIZEOF(paacd->szFilePathDst)); case IDCANCEL: EndDialog(hwnd, (IDOK == uId)); break; } // // // if (f) { AppHourGlass(TRUE); f = AcmAppChooserUpdateDisplay(hwnd, paacd); EnableWindow(GetDlgItem(hwnd, IDOK), f); EnableWindow(GetDlgItem(hwnd, IDD_AACHOOSER_BTN_PROPERTIES), f); AppHourGlass(FALSE); } break; } return (FALSE); } // AcmAppDlgProcChooser()