www.pudn.com > mediator15src.zip > OptionsDlg.cpp
/* * OptionsDlg.cpp * Copyright (C) 2002 Arno Hornberger* * This file is part of MPEG Mediator, a free MPEG stream converter. * * MPEG Mediator is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * MPEG Mediator is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "stdafx.h" #include "OpenDMLAVIOutput.h" #include "OptionsDlg.h" #include "vfw.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // COptionsDlg dialog COptionsDlg::COptionsDlg(CWnd* pParent /*=NULL*/) : CDialog(COptionsDlg::IDD, pParent) { //{{AFX_DATA_INIT(COptionsDlg) //}}AFX_DATA_INIT } void COptionsDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(COptionsDlg) DDX_Control(pDX, IDC_QUALITYSLIDER, m_QualitySlider); DDX_Control(pDX, IDC_CONFIGURE, m_Configure); DDX_Control(pDX, IDC_HQAUDIO, m_hqAudio); DDX_Control(pDX, IDC_AUDIOCODECCOMBO, m_AudioCombo); DDX_Control(pDX, IDC_VIDEOCODECCOMBO, m_VideoCombo); DDX_Control(pDX, IDC_AUDIOFORMATLIST, m_lAudioFormatListBox); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(COptionsDlg, CDialog) //{{AFX_MSG_MAP(COptionsDlg) ON_LBN_SELCHANGE(IDC_AUDIOFORMATLIST, OnSelchangeAudioformatlist) ON_CBN_SELCHANGE(IDC_VIDEOCODECCOMBO, OnSelchangeVideocodeccombo) ON_CBN_SELCHANGE(IDC_AUDIOCODECCOMBO, OnSelchangeAudiocodeccombo) ON_BN_CLICKED(IDC_CONFIGURE, OnConfigure) ON_WM_HSCROLL() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // COptionsDlg message handlers int COptionsDlg::DoModal() { // TODO: Add your specialized code here and/or call the base class return CDialog::DoModal(); } BOOL COptionsDlg::OnInitDialog() { int tabs[1]; char buf[8]; int i; CDialog::OnInitDialog(); // video codecs for (i = 0; i < m_vVideoCodecList.GetSize(); i++) m_VideoCombo.AddString(CString(m_vVideoCodecList[i].szDescription)); if (m_sResult.status & VIDEO_ALLOWRGB) m_VideoCombo.AddString(CString("Uncompressed (RGB)")); if (m_sResult.status & VIDEO_DEFAULT) m_VideoCombo.SetCurSel(m_VideoCombo.GetCount() - 1); else m_VideoCombo.SetCurSel(m_sResult.videoSelected); m_QualitySlider.SetRange(0, 100, TRUE); m_QualitySlider.SetPos((int)m_sResult.lQuality); sprintf(buf, "%d%%", (int)m_sResult.lQuality); SetDlgItemText(IDC_QUALITY, buf); if (m_sResult.lKeyRate) { CheckDlgButton(IDC_FORCEKEYFRAMES, BST_CHECKED); SetDlgItemInt(IDC_KEYRATE, m_sResult.lKeyRate, FALSE); } else CheckDlgButton(IDC_FORCEKEYFRAMES, BST_UNCHECKED); if (m_sResult.lDataRate) { CheckDlgButton(IDC_USEDATARATE, BST_CHECKED); SetDlgItemInt(IDC_DATARATE, m_sResult.lDataRate, FALSE); } else CheckDlgButton(IDC_USEDATARATE, BST_UNCHECKED); OnSelchangeVideocodeccombo(); // audio codecs if (m_sResult.status & AUDIO_DISABLE) { m_AudioCombo.EnableWindow(FALSE); m_lAudioFormatListBox.EnableWindow(FALSE); m_hqAudio.EnableWindow(FALSE); } else { for (i = 0; i < m_vAudioCodecList.GetSize(); i++) m_AudioCombo.AddString(CString(m_vAudioCodecList[i].szFormatTag)); m_AudioCombo.AddString(CString("Uncompressed (PCM)")); if (m_sResult.status & AUDIO_DEFAULT) m_AudioCombo.SetCurSel(m_vAudioCodecList.GetSize()); else { m_AudioCombo.SetCurSel(m_sResult.audioTagSelected); m_lAudioFormatListBox.SetCurSel(m_sResult.audioFormatSelected); } if (m_sResult.status & AUDIO_HQ) m_hqAudio.SetCheck(1); else m_hqAudio.SetCheck(0); tabs[0] = 160; m_lAudioFormatListBox.SetTabStops(1, tabs); OnSelchangeAudiocodeccombo(); OnSelchangeAudioformatlist(); } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void COptionsDlg::OnOK() { int idx; bool disable_audio = !!(m_sResult.status & AUDIO_DISABLE); m_sResult.status = 0; idx = m_VideoCombo.GetCurSel(); if ((idx != CB_ERR) && (idx < m_vVideoCodecList.GetSize())) m_sResult.videoSelected = idx; else m_sResult.status |= VIDEO_UNCOMPRESSED; m_sResult.lQuality = (long)m_QualitySlider.GetPos(); if (GetDlgItem(IDC_FORCEKEYFRAMES)->IsWindowEnabled() && IsDlgButtonChecked(IDC_FORCEKEYFRAMES)) m_sResult.lKeyRate = GetDlgItemInt(IDC_KEYRATE, NULL, FALSE); else m_sResult.lKeyRate = 0; if (GetDlgItem(IDC_USEDATARATE)->IsWindowEnabled() && IsDlgButtonChecked(IDC_USEDATARATE)) m_sResult.lDataRate = GetDlgItemInt(IDC_DATARATE, NULL, FALSE); else m_sResult.lDataRate = 0; if (!disable_audio) { idx = m_AudioCombo.GetCurSel(); if ((idx != CB_ERR) && (idx < m_vAudioCodecList.GetSize())) { m_sResult.audioTagSelected = idx; m_sResult.audioFormatSelected = m_lAudioFormatListBox.GetCurSel(); } else m_sResult.status |= AUDIO_UNCOMPRESSED; if (m_hqAudio.GetCheck()) m_sResult.status |= AUDIO_HQ; } CDialog::OnOK(); } void COptionsDlg::OnSelchangeAudioformatlist() { m_sResult.audioFormatSelected = m_lAudioFormatListBox.GetCurSel(); // redundant } void COptionsDlg::OnSelchangeVideocodeccombo() { int idx = m_VideoCombo.GetCurSel(); HIC hic = 0; if ((idx != CB_ERR) && (idx < m_vVideoCodecList.GetSize())) hic = m_vVideoCodecList[idx].hic; ReenableOptions(hic); return; } void COptionsDlg::OnSelchangeAudiocodeccombo() { char buf[280]; int band; int idx = m_AudioCombo.GetCurSel(); m_lAudioFormatListBox.ResetContent(); // pcm was selected? if ((idx == CB_ERR) || (idx >= m_vAudioCodecList.GetSize())) return; int formatSize = m_vAudioCodecList[idx].m_vFormatDetailsList.GetSize(); for (int i = 0; i < formatSize; i++) { band = (m_vAudioCodecList[idx].m_vWaveFormatExList[i].Get()->nAvgBytesPerSec + 1023) / 1024; sprintf(buf, "%s\t(%d KB/s)", m_vAudioCodecList[idx].m_vFormatDetailsList[i].szFormat, band); m_lAudioFormatListBox.AddString(buf); } if (m_lAudioFormatListBox.SetCurSel(m_sResult.audioFormatSelected) == LB_ERR) m_lAudioFormatListBox.SetCurSel(0); // UpdateData(FALSE); } void COptionsDlg::ReenableOptions(HIC hic) { BOOL fSupports; ICINFO ici; DWORD dwFlags; if (hic) { ICGetInfo(hic, &ici, sizeof(ICINFO)); dwFlags = ici.dwFlags; fSupports = !!(dwFlags & VIDCF_CRUNCH); GetDlgItem(IDC_USEDATARATE)->EnableWindow(fSupports); GetDlgItem(IDC_DATARATE)->EnableWindow(fSupports); GetDlgItem(IDC_DATARATESTATIC)->EnableWindow(fSupports); fSupports = !!(dwFlags & VIDCF_TEMPORAL); GetDlgItem(IDC_FORCEKEYFRAMES)->EnableWindow(fSupports); GetDlgItem(IDC_KEYRATE)->EnableWindow(fSupports); GetDlgItem(IDC_KEYFRAMESSTATIC)->EnableWindow(fSupports); fSupports = !!(dwFlags & VIDCF_QUALITY); GetDlgItem(IDC_QUALITYSTATIC)->EnableWindow(fSupports); GetDlgItem(IDC_QUALITYSLIDER)->EnableWindow(fSupports); GetDlgItem(IDC_QUALITY)->EnableWindow(fSupports); m_Configure.EnableWindow(!!ICQueryConfigure(hic)); } else { GetDlgItem(IDC_USEDATARATE)->EnableWindow(FALSE); GetDlgItem(IDC_DATARATE)->EnableWindow(FALSE); GetDlgItem(IDC_DATARATESTATIC)->EnableWindow(FALSE); GetDlgItem(IDC_FORCEKEYFRAMES)->EnableWindow(FALSE); GetDlgItem(IDC_KEYRATE)->EnableWindow(FALSE); GetDlgItem(IDC_KEYFRAMESSTATIC)->EnableWindow(FALSE); GetDlgItem(IDC_QUALITYSTATIC)->EnableWindow(FALSE); GetDlgItem(IDC_QUALITYSLIDER)->EnableWindow(FALSE); GetDlgItem(IDC_QUALITY)->EnableWindow(FALSE); m_Configure.EnableWindow(FALSE); } } void COptionsDlg::OnConfigure() { HIC hic; int idx = m_VideoCombo.GetCurSel(); if (idx < m_vVideoCodecList.GetSize()) if (hic = m_vVideoCodecList[idx].hic) ICConfigure(hic, m_hWnd); } void COptionsDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { char buf[8]; sprintf(buf, "%d%%", m_QualitySlider.GetPos()); SetDlgItemText(IDC_QUALITY, buf); CDialog::OnHScroll(nSBCode, nPos, pScrollBar); }