//Ver 1.2 //Note : Because the program stores the state for only one compressor (in the pVideoCompressParams), //if the user chooses "Configure" for compressor A, then chooses another compressor B and presses "Configure" again //the previous state info for compressor A will be lost. void CVideoOptions::OnConfigure() { // TODO: Add your control notification handler code here int sel = ((CComboBox *) GetDlgItem(IDC_COMPRESSORS))->GetCurSel(); if (sel != CB_ERR) { //Still unable to handle DIVX state (results in error) //if (compressor_info[sel].fccHandler==mmioFOURCC('D', 'I', 'V', 'X')) return; HIC hic = ICOpen(compressor_info[sel].fccType, compressor_info[sel].fccHandler, ICMODE_QUERY); if (hic) { //Set our current Video Compress State Info into the hic, which will update the ICConfigure Dialog SetVideoCompressState (hic , compressor_info[sel].fccHandler); ICConfigure(hic,m_hWnd); //Get Video Compress State Info from the hic after adjustment with the ICConfigure dialog //This will set the external pVideoCompressParams variable which is used by AVICOMPRESSOPTIONS //(This means the external variable pVideoCompressParams will be changed even if user press "Cancel") GetVideoCompressState (hic , compressor_info[sel].fccHandler); ICClose(hic); } } }
//Ver 1.2 // Note : Because the program stores the state for only one compressor (in the // pVideoCompressParams), if the user chooses "Configure" for compressor A, then // chooses another compressor B and presses "Configure" again the previous state // info for compressor A will be lost. void CVideoOptionsDlg::OnConfigure() { int sel = m_ctrlCBCompressor.GetCurSel(); if (sel != CB_ERR) { // Still unable to handle DIVX state (results in error) //if (pCompressorInfo[sel].fccHandler == mmioFOURCC('D', 'I', 'V', 'X')) // return; //TODO, How long is this code stil experimental and soo in use ??? #define EXPERIMENTAL_CODE #ifdef EXPERIMENTAL_CODE CHIC chic; if (chic.Open(pCompressorInfo[sel].fccType, pCompressorInfo[sel].fccHandler, ICMODE_QUERY)) { // Set our current Video Compress State Info into the hic, // which will update the ICConfigure Dialog SetVideoCompressState(chic, chic.Handler()); chic.Configure(m_hWnd); // Get Video Compress State Info from the hic after adjustment with the // ICConfigure dialog. This will set the external pVideoCompressParams // variable which is used by AVICOMPRESSOPTIONS (This means the external // variable pVideoCompressParams will be changed even if user press "Cancel") DWORD dwSize = chic.GetStateSize(); LRESULT lResult = chic.GetState(m_cOpts.State(dwSize), dwSize); // if (lResult != dwSize) ==> C4244 Warning, type mismatch if ( lResult - dwSize != 0 ) // Save { m_cOpts.State(0L); } } #else HIC hic = ICOpen(pCompressorInfo[sel].fccType, pCompressorInfo[sel].fccHandler, ICMODE_QUERY); if (hic) { // Set our current Video Compress State Info into the hic, which will // update the ICConfigure Dialog SetVideoCompressState(hic, pCompressorInfo[sel].fccHandler); ICConfigure(hic, m_hWnd); // Get Video Compress State Info from the hic after adjustment with the // ICConfigure dialog. This will set the external pVideoCompressParams // variable which is used by AVICOMPRESSOPTIONS (This means the external // variable pVideoCompressParams will be changed even if user press "Cancel") GetVideoCompressState(hic, pCompressorInfo[sel].fccHandler); ICClose(hic); } #endif #undef EXPERIMENTAL_CODE } }
void AviCodecRestrictions::openConfiguration(const std::wstring &codecName, void *winId) { if (codecName == L"Uncompressed") return; //find the codec int bpp; HIC hic = getCodec(codecName, bpp); if (!hic) return; ICConfigure(hic, winId); ICClose(hic); }
void CPgPubExtra::OnSettings() { CReg *pReg = (CReg*)CDlgTabFrame::GetData( GetSafeHwnd() ); if ( pReg == NULL ) return; CRKey *pRk = pReg->FindKey( "PUBINFO" ); if ( pRk == NULL ) return; int sel = m_comboCodec.GetCurSel(); if ( sel == CB_ERR ) return; // Get data pointer LPCODECINFO pci = (LPCODECINFO)m_comboCodec.GetItemData( sel ); if ( pci == NULL || !m_codecs.VerifyPointer( pci ) ) return; // Attempt to open settings dialog HIC hIc = ICOpen( ICTYPE_VIDEO, pci->fourCC, ICMODE_QUERY ); if ( hIc != NULL ) { DWORD size = pRk->GetValueSize( "CodecData" ); LPBYTE buf = (LPBYTE)pRk->GetValuePtr( "CodecData" ); // Restore settings if ( size > 0 && buf != NULL ) ICSetState( hIc, buf, size ); // Configure the compressor if ( ICConfigure( hIc, GetSafeHwnd() ) != ICERR_OK ) return; size = ICGetStateSize( hIc ); if ( size > 0 ) { TMem< BYTE > mem; if ( mem.allocate( size ) ) if ( ICGetState( hIc, mem.ptr(), size ) == ICERR_OK ) pRk->Set( "CodecData", mem.ptr(), size ); } // end if ICClose( hIc ); } // end if }
static INT_PTR CALLBACK icm_choose_compressor_dlgproc(HWND hdlg, UINT msg, WPARAM wparam, LPARAM lparam) { switch (msg) { case WM_INITDIALOG: { struct codec_info *ic; WCHAR buf[128]; struct choose_compressor *choose_comp = (struct choose_compressor *)lparam; SetWindowLongPtrW(hdlg, DWLP_USER, lparam); /* FIXME */ choose_comp->flags &= ~(ICMF_CHOOSE_DATARATE | ICMF_CHOOSE_KEYFRAME); if (choose_comp->title) SetWindowTextA(hdlg, choose_comp->title); if (!(choose_comp->flags & ICMF_CHOOSE_DATARATE)) { ShowWindow(GetDlgItem(hdlg, IDC_DATARATE_CHECKBOX), SW_HIDE); ShowWindow(GetDlgItem(hdlg, IDC_DATARATE), SW_HIDE); ShowWindow(GetDlgItem(hdlg, IDC_DATARATE_KB), SW_HIDE); } if (!(choose_comp->flags & ICMF_CHOOSE_KEYFRAME)) { ShowWindow(GetDlgItem(hdlg, IDC_KEYFRAME_CHECKBOX), SW_HIDE); ShowWindow(GetDlgItem(hdlg, IDC_KEYFRAME), SW_HIDE); ShowWindow(GetDlgItem(hdlg, IDC_KEYFRAME_FRAMES), SW_HIDE); } /* FIXME */ EnableWindow(GetDlgItem(hdlg, IDC_QUALITY_SCROLL), FALSE); EnableWindow(GetDlgItem(hdlg, IDC_QUALITY_TXT), FALSE); /*if (!(choose_comp->flags & ICMF_CHOOSE_PREVIEW)) ShowWindow(GetDlgItem(hdlg, IDC_PREVIEW), SW_HIDE);*/ LoadStringW(MSVFW32_hModule, IDS_FULLFRAMES, buf, 128); SendDlgItemMessageW(hdlg, IDC_COMP_LIST, CB_ADDSTRING, 0, (LPARAM)buf); ic = HeapAlloc(GetProcessHeap(), 0, sizeof(struct codec_info)); ic->icinfo.fccType = streamtypeVIDEO; ic->icinfo.fccHandler = comptypeDIB; ic->hic = 0; SendDlgItemMessageW(hdlg, IDC_COMP_LIST, CB_SETITEMDATA, 0, (LPARAM)ic); enum_compressors(GetDlgItem(hdlg, IDC_COMP_LIST), &choose_comp->cv, choose_comp->flags & ICMF_CHOOSE_ALLCOMPRESSORS); SendDlgItemMessageW(hdlg, IDC_COMP_LIST, CB_SETCURSEL, 0, 0); SetFocus(GetDlgItem(hdlg, IDC_COMP_LIST)); SetWindowLongPtrW(hdlg, DWLP_USER, (ULONG_PTR)choose_comp); break; } case WM_COMMAND: switch (LOWORD(wparam)) { case IDC_COMP_LIST: { INT cur_sel; struct codec_info *ic; BOOL can_configure = FALSE, can_about = FALSE; struct choose_compressor *choose_comp; if (HIWORD(wparam) != CBN_SELCHANGE && HIWORD(wparam) != CBN_SETFOCUS) break; choose_comp = (struct choose_compressor *)GetWindowLongPtrW(hdlg, DWLP_USER); cur_sel = SendMessageW((HWND)lparam, CB_GETCURSEL, 0, 0); ic = (struct codec_info *)SendMessageW((HWND)lparam, CB_GETITEMDATA, cur_sel, 0); if (ic && ic->hic) { if (ICQueryConfigure(ic->hic) == DRVCNF_OK) can_configure = TRUE; if (ICQueryAbout(ic->hic) == DRVCNF_OK) can_about = TRUE; } EnableWindow(GetDlgItem(hdlg, IDC_CONFIGURE), can_configure); EnableWindow(GetDlgItem(hdlg, IDC_ABOUT), can_about); if (choose_comp->flags & ICMF_CHOOSE_DATARATE) { /* FIXME */ } if (choose_comp->flags & ICMF_CHOOSE_KEYFRAME) { /* FIXME */ } break; } case IDC_CONFIGURE: case IDC_ABOUT: { HWND list = GetDlgItem(hdlg, IDC_COMP_LIST); INT cur_sel; struct codec_info *ic; if (HIWORD(wparam) != BN_CLICKED) break; cur_sel = SendMessageW(list, CB_GETCURSEL, 0, 0); ic = (struct codec_info *)SendMessageW(list, CB_GETITEMDATA, cur_sel, 0); if (ic && ic->hic) { if (LOWORD(wparam) == IDC_CONFIGURE) ICConfigure(ic->hic, hdlg); else ICAbout(ic->hic, hdlg); } break; } case IDOK: { HWND list = GetDlgItem(hdlg, IDC_COMP_LIST); INT cur_sel; struct codec_info *ic; if (HIWORD(wparam) != BN_CLICKED) break; cur_sel = SendMessageW(list, CB_GETCURSEL, 0, 0); ic = (struct codec_info *)SendMessageW(list, CB_GETITEMDATA, cur_sel, 0); if (ic) { struct choose_compressor *choose_comp = (struct choose_compressor *)GetWindowLongPtrW(hdlg, DWLP_USER); choose_comp->cv.hic = ic->hic; choose_comp->cv.fccType = ic->icinfo.fccType; choose_comp->cv.fccHandler = ic->icinfo.fccHandler; /* FIXME: fill everything else */ /* prevent closing the codec handle below */ ic->hic = 0; } } /* fall through */ case IDCANCEL: { HWND list = GetDlgItem(hdlg, IDC_COMP_LIST); INT idx = 0; if (HIWORD(wparam) != BN_CLICKED) break; while (1) { struct codec_info *ic; ic = (struct codec_info *)SendMessageW(list, CB_GETITEMDATA, idx++, 0); if (!ic || (LONG_PTR)ic == CB_ERR) break; if (ic->hic) ICClose(ic->hic); HeapFree(GetProcessHeap(), 0, ic); } EndDialog(hdlg, LOWORD(wparam) == IDOK); break; } default: break; } break; default: break; } return FALSE; }