Blame dshow/PropPage.cpp

Packit 47f805
/*
Packit 47f805
 *  LAME MP3 encoder for DirectShow
Packit 47f805
 *  Basic property page
Packit 47f805
 *
Packit 47f805
 *  Copyright (c) 2000-2005 Marie Orlova, Peter Gubanov, Vitaly Ivanov, Elecard Ltd.
Packit 47f805
 *
Packit 47f805
 * This library is free software; you can redistribute it and/or
Packit 47f805
 * modify it under the terms of the GNU Library General Public
Packit 47f805
 * License as published by the Free Software Foundation; either
Packit 47f805
 * version 2 of the License, or (at your option) any later version.
Packit 47f805
 *
Packit 47f805
 * This library is distributed in the hope that it will be useful,
Packit 47f805
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 47f805
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Packit 47f805
 * Library General Public License for more details.
Packit 47f805
 *
Packit 47f805
 * You should have received a copy of the GNU Library General Public
Packit 47f805
 * License along with this library; if not, write to the
Packit 47f805
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Packit 47f805
 * Boston, MA 02111-1307, USA.
Packit 47f805
 */
Packit 47f805
Packit 47f805
#include <streams.h>
Packit 47f805
#include <olectl.h>
Packit 47f805
#include <commctrl.h>
Packit 47f805
#include "iaudioprops.h"
Packit 47f805
#include "mpegac.h"
Packit 47f805
#include "resource.h"
Packit 47f805
#include "PropPage.h"
Packit 47f805
#include "Reg.h"
Packit 47f805
Packit 47f805
// strings to appear in comboboxes
Packit 47f805
const char * szBitRateString[2][14] = {
Packit 47f805
    {
Packit 47f805
        "32 kbps","40 kbps","48 kbps","56 kbps",
Packit 47f805
        "64 kbps","80 kbps","96 kbps","112 kbps",
Packit 47f805
        "128 kbps","160 kbps","192 kbps","224 kbps",
Packit 47f805
        "256 kbps","320 kbps"
Packit 47f805
    },
Packit 47f805
    {
Packit 47f805
        "8 kbps","16 kbps","24 kbps","32 kbps",
Packit 47f805
        "40 kbps","48 kbps","56 kbps","64 kbps",
Packit 47f805
        "80 kbps","96 kbps","112 kbps","128 kbps",
Packit 47f805
        "144 kbps","160 kbps"
Packit 47f805
    }
Packit 47f805
};
Packit 47f805
Packit 47f805
LPCSTR szQualityDesc[10] = {
Packit 47f805
    "High", "High", "High", "High", "High",
Packit 47f805
    "Medium", "Medium",
Packit 47f805
    "Low", "Low",
Packit 47f805
    "Fast mode"
Packit 47f805
};
Packit 47f805
Packit 47f805
LPCSTR szVBRqDesc[10] = {
Packit 47f805
    "0 - ~1:4",
Packit 47f805
    "1 - ~1:5",
Packit 47f805
    "2 - ~1:6",
Packit 47f805
    "3 - ~1:7",
Packit 47f805
    "4 - ~1:9",
Packit 47f805
    "5 - ~1:9",
Packit 47f805
    "6 - ~1:10",
Packit 47f805
    "7 - ~1:11",
Packit 47f805
    "8 - ~1:12",
Packit 47f805
    "9 - ~1:14"
Packit 47f805
};
Packit 47f805
Packit 47f805
struct SSampleRate {
Packit 47f805
    DWORD dwSampleRate;
Packit 47f805
    LPCSTR lpSampleRate;
Packit 47f805
};
Packit 47f805
Packit 47f805
SSampleRate srRates[9] = {
Packit 47f805
    // MPEG-1
Packit 47f805
    {48000, "48 kHz"},
Packit 47f805
    {44100, "44.1 kHz"},
Packit 47f805
    {32000, "32 kHz"},
Packit 47f805
Packit 47f805
    // MPEG-2
Packit 47f805
    {24000, "24 kHz"},
Packit 47f805
    {22050, "22.05 kHz"},
Packit 47f805
    {16000, "16 kHz"},
Packit 47f805
Packit 47f805
    // MPEG-2.5
Packit 47f805
    {12000, "12 kHz"},
Packit 47f805
    {11025, "11.025 kHz"},
Packit 47f805
    { 8000, "8 kHz"}
Packit 47f805
};
Packit 47f805
Packit 47f805
////////////////////////////////////////////////////////////////
Packit 47f805
// CreateInstance
Packit 47f805
////////////////////////////////////////////////////////////////
Packit 47f805
CUnknown *CMpegAudEncPropertyPage::CreateInstance( LPUNKNOWN punk, HRESULT *phr )
Packit 47f805
{
Packit 47f805
    CMpegAudEncPropertyPage *pNewObject
Packit 47f805
        = new CMpegAudEncPropertyPage( punk, phr );
Packit 47f805
Packit 47f805
    if( pNewObject == NULL )
Packit 47f805
        *phr = E_OUTOFMEMORY;
Packit 47f805
Packit 47f805
    return pNewObject;
Packit 47f805
}
Packit 47f805
Packit 47f805
////////////////////////////////////////////////////////////////
Packit 47f805
// Constructor
Packit 47f805
////////////////////////////////////////////////////////////////
Packit 47f805
CMpegAudEncPropertyPage::CMpegAudEncPropertyPage(LPUNKNOWN punk, HRESULT *phr)
Packit 47f805
 : CBasePropertyPage(NAME("Encoder Property Page"), 
Packit 47f805
                      punk, IDD_AUDIOENCPROPS, IDS_AUDIO_PROPS_TITLE)                      
Packit 47f805
    , m_pAEProps(NULL)
Packit 47f805
{
Packit 47f805
    ASSERT(phr);
Packit 47f805
Packit 47f805
    m_srIdx = 0;
Packit 47f805
Packit 47f805
    InitCommonControls();
Packit 47f805
}
Packit 47f805
Packit 47f805
//
Packit 47f805
// OnConnect
Packit 47f805
//
Packit 47f805
// Give us the filter to communicate with
Packit 47f805
HRESULT CMpegAudEncPropertyPage::OnConnect(IUnknown *pUnknown)
Packit 47f805
{
Packit 47f805
    ASSERT(m_pAEProps == NULL);
Packit 47f805
Packit 47f805
    // Ask the filter for it's control interface
Packit 47f805
Packit 47f805
    HRESULT hr = pUnknown->QueryInterface(IID_IAudioEncoderProperties,(void **)&m_pAEProps);
Packit 47f805
    if (FAILED(hr))
Packit 47f805
        return E_NOINTERFACE;
Packit 47f805
Packit 47f805
    ASSERT(m_pAEProps);
Packit 47f805
Packit 47f805
    // Get current filter state
Packit 47f805
    m_pAEProps->get_Bitrate(&m_dwBitrate);
Packit 47f805
    m_pAEProps->get_Variable(&m_dwVariable);
Packit 47f805
    m_pAEProps->get_VariableMin(&m_dwMin);
Packit 47f805
    m_pAEProps->get_VariableMax(&m_dwMax);
Packit 47f805
    m_pAEProps->get_Quality(&m_dwQuality);
Packit 47f805
    m_pAEProps->get_VariableQ(&m_dwVBRq);
Packit 47f805
    m_pAEProps->get_SampleRate(&m_dwSampleRate);
Packit 47f805
    m_pAEProps->get_CRCFlag(&m_dwCRC);
Packit 47f805
    m_pAEProps->get_ForceMono(&m_dwForceMono);
Packit 47f805
    m_pAEProps->get_CopyrightFlag(&m_dwCopyright);
Packit 47f805
    m_pAEProps->get_OriginalFlag(&m_dwOriginal);
Packit 47f805
Packit 47f805
    return NOERROR;
Packit 47f805
}
Packit 47f805
Packit 47f805
//
Packit 47f805
// OnDisconnect
Packit 47f805
//
Packit 47f805
// Release the interface
Packit 47f805
Packit 47f805
HRESULT CMpegAudEncPropertyPage::OnDisconnect()
Packit 47f805
{
Packit 47f805
    // Release the interface
Packit 47f805
    if (m_pAEProps == NULL)
Packit 47f805
        return E_UNEXPECTED;
Packit 47f805
Packit 47f805
    m_pAEProps->set_Bitrate(m_dwBitrate);
Packit 47f805
    m_pAEProps->set_Variable(m_dwVariable);
Packit 47f805
    m_pAEProps->set_VariableMin(m_dwMin);
Packit 47f805
    m_pAEProps->set_VariableMax(m_dwMax);
Packit 47f805
    m_pAEProps->set_Quality(m_dwQuality);
Packit 47f805
    m_pAEProps->set_VariableQ(m_dwVBRq);
Packit 47f805
    m_pAEProps->set_SampleRate(m_dwSampleRate);
Packit 47f805
    m_pAEProps->set_CRCFlag(m_dwCRC);
Packit 47f805
    m_pAEProps->set_ForceMono(m_dwForceMono);
Packit 47f805
    m_pAEProps->set_CopyrightFlag(m_dwCopyright);
Packit 47f805
    m_pAEProps->set_OriginalFlag(m_dwOriginal);
Packit 47f805
    m_pAEProps->SaveAudioEncoderPropertiesToRegistry();
Packit 47f805
Packit 47f805
    m_pAEProps->Release();
Packit 47f805
    m_pAEProps = NULL;
Packit 47f805
Packit 47f805
    return NOERROR;
Packit 47f805
}
Packit 47f805
Packit 47f805
//
Packit 47f805
// OnActivate
Packit 47f805
//
Packit 47f805
// Called on dialog creation
Packit 47f805
Packit 47f805
HRESULT CMpegAudEncPropertyPage::OnActivate(void)
Packit 47f805
{
Packit 47f805
    InitPropertiesDialog(m_hwnd);
Packit 47f805
Packit 47f805
    return NOERROR;
Packit 47f805
}
Packit 47f805
Packit 47f805
//
Packit 47f805
// OnDeactivate
Packit 47f805
//
Packit 47f805
// Called on dialog destruction
Packit 47f805
Packit 47f805
HRESULT CMpegAudEncPropertyPage::OnDeactivate(void)
Packit 47f805
{
Packit 47f805
    return NOERROR;
Packit 47f805
}
Packit 47f805
Packit 47f805
////////////////////////////////////////////////////////////////
Packit 47f805
// OnReceiveMessage - message handler function
Packit 47f805
////////////////////////////////////////////////////////////////
Packit 47f805
BOOL CMpegAudEncPropertyPage::OnReceiveMessage(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
Packit 47f805
{
Packit 47f805
    switch (uMsg)
Packit 47f805
    {
Packit 47f805
    case WM_HSCROLL:
Packit 47f805
        if ((HWND)lParam == m_hwndQuality)
Packit 47f805
        {
Packit 47f805
            int pos = SendMessage(m_hwndQuality, TBM_GETPOS, 0, 0);
Packit 47f805
            if (pos >= 0 && pos < 10)
Packit 47f805
            {
Packit 47f805
                SetDlgItemText(hwnd,IDC_TEXT_QUALITY,szQualityDesc[pos]);
Packit 47f805
                m_pAEProps->set_Quality(pos);
Packit 47f805
                SetDirty();
Packit 47f805
            }
Packit 47f805
        }
Packit 47f805
        break;
Packit 47f805
Packit 47f805
    case WM_COMMAND:
Packit 47f805
        switch (LOWORD(wParam))
Packit 47f805
        {
Packit 47f805
        case IDC_COMBO_CBR:
Packit 47f805
            if (HIWORD(wParam) == CBN_SELCHANGE)
Packit 47f805
            {
Packit 47f805
                int nBitrate = SendDlgItemMessage(hwnd, IDC_COMBO_CBR, CB_GETCURSEL, 0, 0L);
Packit 47f805
                DWORD dwSampleRate;
Packit 47f805
                m_pAEProps->get_SampleRate(&dwSampleRate);
Packit 47f805
                DWORD dwBitrate;
Packit 47f805
Packit 47f805
                if (dwSampleRate >= 32000)
Packit 47f805
                {
Packit 47f805
                    // Consider MPEG-1
Packit 47f805
                    dwBitrate = dwBitRateValue[0][nBitrate];
Packit 47f805
                }
Packit 47f805
                else
Packit 47f805
                {
Packit 47f805
                    // Consider MPEG-2/2.5
Packit 47f805
                    dwBitrate = dwBitRateValue[1][nBitrate];
Packit 47f805
                }
Packit 47f805
Packit 47f805
                m_pAEProps->set_Bitrate(dwBitrate);
Packit 47f805
Packit 47f805
                SetDirty();
Packit 47f805
            }
Packit 47f805
            break;
Packit 47f805
Packit 47f805
        case IDC_COMBO_VBRMIN:
Packit 47f805
            if (HIWORD(wParam) == CBN_SELCHANGE)
Packit 47f805
            {
Packit 47f805
                int nVariableMin = SendDlgItemMessage(hwnd, IDC_COMBO_VBRMIN, CB_GETCURSEL, 0, 0L);
Packit 47f805
                DWORD dwSampleRate;
Packit 47f805
                m_pAEProps->get_SampleRate(&dwSampleRate);
Packit 47f805
                DWORD dwMin;
Packit 47f805
Packit 47f805
                if (dwSampleRate >= 32000)
Packit 47f805
                {
Packit 47f805
                    // Consider MPEG-1
Packit 47f805
                    dwMin = dwBitRateValue[0][nVariableMin];
Packit 47f805
                }
Packit 47f805
                else
Packit 47f805
                {
Packit 47f805
                    // Consider MPEG-2/2.5
Packit 47f805
                    dwMin = dwBitRateValue[1][nVariableMin];
Packit 47f805
                }
Packit 47f805
Packit 47f805
                m_pAEProps->set_VariableMin(dwMin);
Packit 47f805
Packit 47f805
                SetDirty();
Packit 47f805
            }
Packit 47f805
            break;
Packit 47f805
Packit 47f805
        case IDC_COMBO_VBRMAX:
Packit 47f805
            if (HIWORD(wParam) == CBN_SELCHANGE)
Packit 47f805
            {
Packit 47f805
                int nVariableMax = SendDlgItemMessage(hwnd, IDC_COMBO_VBRMAX, CB_GETCURSEL, 0, 0L);
Packit 47f805
                DWORD dwSampleRate;
Packit 47f805
                m_pAEProps->get_SampleRate(&dwSampleRate);
Packit 47f805
                DWORD dwMax;
Packit 47f805
Packit 47f805
                if (dwSampleRate >= 32000)
Packit 47f805
                {
Packit 47f805
                    // Consider MPEG-1
Packit 47f805
                    dwMax = dwBitRateValue[0][nVariableMax];
Packit 47f805
                }
Packit 47f805
                else
Packit 47f805
                {
Packit 47f805
                    // Consider MPEG-2/2.5
Packit 47f805
                    dwMax = dwBitRateValue[1][nVariableMax];
Packit 47f805
                }
Packit 47f805
Packit 47f805
                m_pAEProps->set_VariableMax(dwMax);
Packit 47f805
Packit 47f805
                SetDirty();
Packit 47f805
            }
Packit 47f805
            break;
Packit 47f805
Packit 47f805
        case IDC_COMBO_SAMPLE_RATE:
Packit 47f805
            if (HIWORD(wParam) == CBN_SELCHANGE)
Packit 47f805
            {
Packit 47f805
                int nSampleRate = SendDlgItemMessage(hwnd, IDC_COMBO_SAMPLE_RATE, CB_GETCURSEL, 0, 0L);
Packit 47f805
Packit 47f805
                if (nSampleRate < 0)
Packit 47f805
                    nSampleRate = 0;
Packit 47f805
                else if (nSampleRate > 2)
Packit 47f805
                    nSampleRate = 2;
Packit 47f805
Packit 47f805
                DWORD dwSampleRate = srRates[nSampleRate * 3 + m_srIdx].dwSampleRate;
Packit 47f805
Packit 47f805
                m_pAEProps->set_SampleRate(dwSampleRate);
Packit 47f805
                InitPropertiesDialog(hwnd);
Packit 47f805
                SetDirty();
Packit 47f805
            }
Packit 47f805
            break;
Packit 47f805
Packit 47f805
        case IDC_COMBO_VBRq:
Packit 47f805
            if (HIWORD(wParam) == CBN_SELCHANGE)
Packit 47f805
            {
Packit 47f805
                int nVBRq = SendDlgItemMessage(hwnd, IDC_COMBO_VBRq, CB_GETCURSEL, 0, 0L);
Packit 47f805
                if (nVBRq >=0 && nVBRq <=9) 
Packit 47f805
                    m_pAEProps->set_VariableQ(nVBRq);
Packit 47f805
                SetDirty();
Packit 47f805
            }
Packit 47f805
            break;
Packit 47f805
Packit 47f805
        case IDC_RADIO_CBR:
Packit 47f805
        case IDC_RADIO_VBR:
Packit 47f805
            m_pAEProps->set_Variable(LOWORD(wParam)-IDC_RADIO_CBR);
Packit 47f805
            SetDirty();
Packit 47f805
            break;
Packit 47f805
Packit 47f805
        case IDC_CHECK_PES:
Packit 47f805
            m_pAEProps->set_PESOutputEnabled(IsDlgButtonChecked(hwnd, IDC_CHECK_PES));
Packit 47f805
            SetDirty();
Packit 47f805
            break;
Packit 47f805
Packit 47f805
        case IDC_CHECK_COPYRIGHT:
Packit 47f805
            m_pAEProps->set_CopyrightFlag(IsDlgButtonChecked(hwnd, IDC_CHECK_COPYRIGHT));
Packit 47f805
            SetDirty();
Packit 47f805
            break;
Packit 47f805
Packit 47f805
        case IDC_CHECK_ORIGINAL:
Packit 47f805
            m_pAEProps->set_OriginalFlag(IsDlgButtonChecked(hwnd, IDC_CHECK_ORIGINAL));
Packit 47f805
            SetDirty();
Packit 47f805
            break;
Packit 47f805
Packit 47f805
        case IDC_CHECK_CRC:
Packit 47f805
            m_pAEProps->set_CRCFlag(IsDlgButtonChecked(hwnd, IDC_CHECK_CRC));
Packit 47f805
            SetDirty();
Packit 47f805
            break;
Packit 47f805
Packit 47f805
        case IDC_FORCE_MONO:
Packit 47f805
            m_pAEProps->set_ForceMono(IsDlgButtonChecked(hwnd, IDC_FORCE_MONO));
Packit 47f805
            SetDirty();
Packit 47f805
            break;
Packit 47f805
        }
Packit 47f805
        return TRUE;
Packit 47f805
Packit 47f805
    case WM_DESTROY:
Packit 47f805
        return TRUE;
Packit 47f805
Packit 47f805
    default:
Packit 47f805
        return FALSE;
Packit 47f805
    }
Packit 47f805
Packit 47f805
    return TRUE;
Packit 47f805
}
Packit 47f805
Packit 47f805
//
Packit 47f805
// OnApplyChanges
Packit 47f805
//
Packit 47f805
HRESULT CMpegAudEncPropertyPage::OnApplyChanges()
Packit 47f805
{
Packit 47f805
    m_pAEProps->get_Bitrate(&m_dwBitrate);
Packit 47f805
    m_pAEProps->get_Variable(&m_dwVariable);
Packit 47f805
    m_pAEProps->get_VariableMin(&m_dwMin);
Packit 47f805
    m_pAEProps->get_VariableMax(&m_dwMax);
Packit 47f805
    m_pAEProps->get_Quality(&m_dwQuality);
Packit 47f805
    m_pAEProps->get_VariableQ(&m_dwVBRq);
Packit 47f805
    m_pAEProps->get_SampleRate(&m_dwSampleRate);
Packit 47f805
    m_pAEProps->get_CRCFlag(&m_dwCRC);
Packit 47f805
    m_pAEProps->get_ForceMono(&m_dwForceMono);
Packit 47f805
    m_pAEProps->get_CopyrightFlag(&m_dwCopyright);
Packit 47f805
    m_pAEProps->get_OriginalFlag(&m_dwOriginal);
Packit 47f805
    m_pAEProps->SaveAudioEncoderPropertiesToRegistry();
Packit 47f805
Packit 47f805
    m_pAEProps->ApplyChanges();
Packit 47f805
Packit 47f805
    return S_OK;
Packit 47f805
}
Packit 47f805
Packit 47f805
//
Packit 47f805
// Initialize dialogbox controls with proper values
Packit 47f805
//
Packit 47f805
void CMpegAudEncPropertyPage::InitPropertiesDialog(HWND hwndParent)
Packit 47f805
{
Packit 47f805
    EnableControls(hwndParent, TRUE);
Packit 47f805
Packit 47f805
    m_hwndQuality = GetDlgItem(hwndParent,IDC_SLIDER_QUALITY);
Packit 47f805
    DWORD dwQuality;
Packit 47f805
    m_pAEProps->get_Quality(&dwQuality);
Packit 47f805
    SendDlgItemMessage(hwndParent, IDC_SLIDER_QUALITY, TBM_SETRANGE, 1, MAKELONG (2,9));
Packit 47f805
    SendDlgItemMessage(hwndParent, IDC_SLIDER_QUALITY, TBM_SETPOS, 1, dwQuality);
Packit 47f805
    if (dwQuality>=0 && dwQuality<10)
Packit 47f805
        SetDlgItemText(hwndParent,IDC_TEXT_QUALITY,szQualityDesc[dwQuality]);
Packit 47f805
Packit 47f805
    //
Packit 47f805
    // initialize sample rate selection
Packit 47f805
    //
Packit 47f805
    DWORD dwSourceSampleRate;
Packit 47f805
    m_pAEProps->get_SourceSampleRate(&dwSourceSampleRate);
Packit 47f805
Packit 47f805
    SendDlgItemMessage(hwndParent, IDC_COMBO_SAMPLE_RATE, CB_RESETCONTENT, 0, 0L);
Packit 47f805
Packit 47f805
    switch (dwSourceSampleRate)
Packit 47f805
    {
Packit 47f805
    case 48000:
Packit 47f805
    case 24000:
Packit 47f805
    case 12000:
Packit 47f805
        m_srIdx = 0;
Packit 47f805
        break;
Packit 47f805
Packit 47f805
    case 32000:
Packit 47f805
    case 16000:
Packit 47f805
    case  8000:
Packit 47f805
        m_srIdx = 2;
Packit 47f805
        break;
Packit 47f805
Packit 47f805
    case 44100:
Packit 47f805
    case 22050:
Packit 47f805
    case 11025:
Packit 47f805
    default:
Packit 47f805
        m_srIdx = 1;
Packit 47f805
    }
Packit 47f805
Packit 47f805
    for (int i = 0; i < 3; i++)
Packit 47f805
        SendDlgItemMessage(hwndParent, IDC_COMBO_SAMPLE_RATE, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)srRates[i * 3 + m_srIdx].lpSampleRate);
Packit 47f805
Packit 47f805
    DWORD dwSampleRate;
Packit 47f805
    m_pAEProps->get_SampleRate(&dwSampleRate);
Packit 47f805
    m_pAEProps->set_SampleRate(dwSampleRate);
Packit 47f805
Packit 47f805
    int nSR = 0;
Packit 47f805
    while (dwSampleRate != srRates[nSR * 3 + m_srIdx].dwSampleRate && nSR < 3)
Packit 47f805
    {
Packit 47f805
        nSR++;
Packit 47f805
    }
Packit 47f805
Packit 47f805
    if (nSR >= 3)
Packit 47f805
        nSR = 0;
Packit 47f805
Packit 47f805
    SendDlgItemMessage(hwndParent, IDC_COMBO_SAMPLE_RATE, CB_SETCURSEL, nSR, 0);
Packit 47f805
Packit 47f805
    DWORD dwChannels;
Packit 47f805
    m_pAEProps->get_SourceChannels(&dwChannels);
Packit 47f805
Packit 47f805
    //
Packit 47f805
    //initialize VBRq combo box
Packit 47f805
    //
Packit 47f805
    int k;
Packit 47f805
    SendDlgItemMessage(hwndParent, IDC_COMBO_VBRq, CB_RESETCONTENT, 0, 0);
Packit 47f805
    for (k = 0; k < 10; k++)
Packit 47f805
        SendDlgItemMessage(hwndParent, IDC_COMBO_VBRq, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)szVBRqDesc[k]);
Packit 47f805
    DWORD dwVBRq;
Packit 47f805
    m_pAEProps->get_VariableQ(&dwVBRq);
Packit 47f805
    if (dwVBRq<0)
Packit 47f805
        dwVBRq = 0;
Packit 47f805
    if (dwVBRq>9)
Packit 47f805
        dwVBRq = 9;
Packit 47f805
    m_pAEProps->set_VariableQ(dwVBRq);
Packit 47f805
    SendDlgItemMessage(hwndParent, IDC_COMBO_VBRq, CB_SETCURSEL, dwVBRq, 0);
Packit 47f805
Packit 47f805
//////////////////////////////////////
Packit 47f805
// initialize CBR selection
Packit 47f805
//////////////////////////////////////
Packit 47f805
    int nSt;
Packit 47f805
Packit 47f805
    SendDlgItemMessage(hwndParent, IDC_COMBO_CBR, CB_RESETCONTENT, 0, 0);
Packit 47f805
    if (dwSampleRate >= 32000)
Packit 47f805
    {
Packit 47f805
        // If target sampling rate is less than 32000, consider
Packit 47f805
        // MPEG 1 audio
Packit 47f805
        nSt = 0;
Packit 47f805
        for (int i = 0; i < 14; i++)
Packit 47f805
            SendDlgItemMessage(hwndParent, IDC_COMBO_CBR, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)szBitRateString[0][i]);
Packit 47f805
    }
Packit 47f805
    else
Packit 47f805
    {
Packit 47f805
        // Consider MPEG 2 / 2.5 audio
Packit 47f805
        nSt = 1;
Packit 47f805
        for (int i = 0; i < 14 ; i++)
Packit 47f805
            SendDlgItemMessage(hwndParent, IDC_COMBO_CBR, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)szBitRateString[1][i]);
Packit 47f805
    }
Packit 47f805
Packit 47f805
    DWORD dwBitrate;
Packit 47f805
    m_pAEProps->get_Bitrate(&dwBitrate);
Packit 47f805
Packit 47f805
    int nBitrateSel = 0;
Packit 47f805
    // BitRateValue[][i] is in ascending order
Packit 47f805
    // We use this fact. We also know there are 14 bitrate values available.
Packit 47f805
    // We are going to use the closest possible, so we can limit loop with 13
Packit 47f805
    while (nBitrateSel < 13 && dwBitRateValue[nSt][nBitrateSel] < dwBitrate)
Packit 47f805
        nBitrateSel++;
Packit 47f805
    SendDlgItemMessage(hwndParent, IDC_COMBO_CBR, CB_SETCURSEL, nBitrateSel, 0);
Packit 47f805
Packit 47f805
    // check if the specified bitrate is found exactly and correct if not
Packit 47f805
    if (dwBitRateValue[nSt][nBitrateSel] != dwBitrate)
Packit 47f805
    {
Packit 47f805
        dwBitrate = dwBitRateValue[nSt][nBitrateSel];
Packit 47f805
        // we can change it, because it is independent of any other parameters
Packit 47f805
        // (but depends on some of them!)
Packit 47f805
        m_pAEProps->set_Bitrate(dwBitrate);
Packit 47f805
    }
Packit 47f805
Packit 47f805
    //
Packit 47f805
    // Check VBR/CBR radio button
Packit 47f805
    //
Packit 47f805
    DWORD dwVariable;
Packit 47f805
    m_pAEProps->get_Variable(&dwVariable);
Packit 47f805
    CheckRadioButton(hwndParent, IDC_RADIO_CBR, IDC_RADIO_VBR, IDC_RADIO_CBR + dwVariable);
Packit 47f805
Packit 47f805
//////////////////////////////////////////////////
Packit 47f805
// initialize VBR selection
Packit 47f805
//////////////////////////////////////////////////
Packit 47f805
    //VBRMIN, VBRMAX
Packit 47f805
    int j, nST;
Packit 47f805
Packit 47f805
    SendDlgItemMessage(hwndParent, IDC_COMBO_VBRMIN, CB_RESETCONTENT, 0, 0);
Packit 47f805
    SendDlgItemMessage(hwndParent, IDC_COMBO_VBRMAX, CB_RESETCONTENT, 0, 0);
Packit 47f805
Packit 47f805
    if (dwSampleRate >= 32000)
Packit 47f805
    {
Packit 47f805
            nST = 0;
Packit 47f805
            for (j=0; j<14 ;j++) {
Packit 47f805
                SendDlgItemMessage(hwndParent, IDC_COMBO_VBRMIN, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)szBitRateString[0][j]);
Packit 47f805
                SendDlgItemMessage(hwndParent, IDC_COMBO_VBRMAX, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)szBitRateString[0][j]);
Packit 47f805
            }
Packit 47f805
    }
Packit 47f805
    else
Packit 47f805
    {
Packit 47f805
            nST = 1;
Packit 47f805
            for (j = 0; j < 14; j++)
Packit 47f805
            {
Packit 47f805
                SendDlgItemMessage(hwndParent, IDC_COMBO_VBRMIN, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)szBitRateString[1][j]);
Packit 47f805
                SendDlgItemMessage(hwndParent, IDC_COMBO_VBRMAX, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)szBitRateString[1][j]);
Packit 47f805
            }
Packit 47f805
    }
Packit 47f805
Packit 47f805
    DWORD dwMin,dwMax;
Packit 47f805
    m_pAEProps->get_VariableMin(&dwMin);
Packit 47f805
    m_pAEProps->get_VariableMax(&dwMax);
Packit 47f805
Packit 47f805
    int nVariableMinSel = 0;
Packit 47f805
    int nVariableMaxSel = 0;
Packit 47f805
    
Packit 47f805
    // BitRateValue[][i] is in ascending order
Packit 47f805
    // We use this fact. We also know there are 14 bitrate values available.
Packit 47f805
    // We are going to use the closest possible, so we can limit loop with 13
Packit 47f805
    while (nVariableMinSel<13 && dwBitRateValue[nST][nVariableMinSel] < dwMin)
Packit 47f805
        nVariableMinSel++;
Packit 47f805
    SendDlgItemMessage(hwndParent, IDC_COMBO_VBRMIN, CB_SETCURSEL, nVariableMinSel, 0);
Packit 47f805
Packit 47f805
    while (nVariableMaxSel<13 && dwBitRateValue[nST][nVariableMaxSel] < dwMax)
Packit 47f805
        nVariableMaxSel++;
Packit 47f805
    SendDlgItemMessage(hwndParent, IDC_COMBO_VBRMAX, CB_SETCURSEL, nVariableMaxSel, 0);
Packit 47f805
Packit 47f805
    
Packit 47f805
    // check if the specified bitrate is found exactly and correct if not
Packit 47f805
    if (dwBitRateValue[nST][nVariableMinSel] != dwMin)
Packit 47f805
    {
Packit 47f805
        dwMin = dwBitRateValue[nST][nVariableMinSel];
Packit 47f805
        // we can change it, because it is independent of any other parameters
Packit 47f805
        // (but depends on some of them!)
Packit 47f805
        m_pAEProps->set_VariableMin(dwMin);
Packit 47f805
    }
Packit 47f805
Packit 47f805
    // check if the specified bitrate is found exactly and correct if not
Packit 47f805
    if (dwBitRateValue[nST][nVariableMaxSel] != dwMax)
Packit 47f805
    {
Packit 47f805
        dwMax = dwBitRateValue[nST][nVariableMaxSel];
Packit 47f805
        // we can change it, because it is independent of any other parameters
Packit 47f805
        // (but depends on some of them!)
Packit 47f805
        m_pAEProps->set_VariableMax(dwMax);
Packit 47f805
    }
Packit 47f805
Packit 47f805
    //
Packit 47f805
    // initialize checkboxes
Packit 47f805
    //
Packit 47f805
    DWORD dwPES;
Packit 47f805
    m_pAEProps->get_PESOutputEnabled(&dwPES);
Packit 47f805
Packit 47f805
    dwPES = 0;
Packit 47f805
    CheckDlgButton(hwndParent, IDC_CHECK_PES, dwPES ? BST_CHECKED : BST_UNCHECKED);
Packit 47f805
Packit 47f805
    DWORD dwCRC;
Packit 47f805
    m_pAEProps->get_CRCFlag(&dwCRC);
Packit 47f805
    CheckDlgButton(hwndParent, IDC_CHECK_CRC, dwCRC ? BST_CHECKED : BST_UNCHECKED);
Packit 47f805
Packit 47f805
    DWORD dwForceMono;
Packit 47f805
    m_pAEProps->get_ForceMono(&dwForceMono);
Packit 47f805
    CheckDlgButton(hwndParent, IDC_FORCE_MONO, dwForceMono ? BST_CHECKED : BST_UNCHECKED);
Packit 47f805
Packit 47f805
    DWORD dwCopyright;
Packit 47f805
    m_pAEProps->get_CopyrightFlag(&dwCopyright);
Packit 47f805
    CheckDlgButton(hwndParent, IDC_CHECK_COPYRIGHT, dwCopyright ? BST_CHECKED : BST_UNCHECKED);
Packit 47f805
Packit 47f805
    DWORD dwOriginal;
Packit 47f805
    m_pAEProps->get_OriginalFlag(&dwOriginal);
Packit 47f805
    CheckDlgButton(hwndParent, IDC_CHECK_ORIGINAL, dwOriginal ? BST_CHECKED : BST_UNCHECKED);
Packit 47f805
}
Packit 47f805
Packit 47f805
Packit 47f805
////////////////////////////////////////////////////////////////
Packit 47f805
// EnableControls
Packit 47f805
////////////////////////////////////////////////////////////////
Packit 47f805
void CMpegAudEncPropertyPage::EnableControls(HWND hwndParent, bool bEnable)
Packit 47f805
{
Packit 47f805
    EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_PES), false);//bEnable);
Packit 47f805
    EnableWindow(GetDlgItem(hwndParent, IDC_RADIO_CBR), bEnable);
Packit 47f805
    EnableWindow(GetDlgItem(hwndParent, IDC_COMBO_CBR), bEnable);
Packit 47f805
    EnableWindow(GetDlgItem(hwndParent, IDC_RADIO_VBR), bEnable);
Packit 47f805
    EnableWindow(GetDlgItem(hwndParent, IDC_COMBO_VBRMIN), bEnable);
Packit 47f805
    EnableWindow(GetDlgItem(hwndParent, IDC_COMBO_VBRMAX), bEnable);
Packit 47f805
    EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_COPYRIGHT), bEnable);
Packit 47f805
    EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_ORIGINAL), bEnable);
Packit 47f805
    EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_CRC), bEnable);
Packit 47f805
    EnableWindow(GetDlgItem(hwndParent, IDC_FORCE_MONO), bEnable);
Packit 47f805
    EnableWindow(GetDlgItem(hwndParent, IDC_SLIDER_QUALITY), bEnable);
Packit 47f805
    EnableWindow(GetDlgItem(hwndParent, IDC_COMBO_SAMPLE_RATE), bEnable);
Packit 47f805
}
Packit 47f805
Packit 47f805
//
Packit 47f805
// SetDirty
Packit 47f805
//
Packit 47f805
// notifies the property page site of changes
Packit 47f805
Packit 47f805
void CMpegAudEncPropertyPage::SetDirty()
Packit 47f805
{
Packit 47f805
    m_bDirty = TRUE;
Packit 47f805
    if (m_pPageSite)
Packit 47f805
        m_pPageSite->OnStatusChange(PROPPAGESTATUS_DIRTY);
Packit 47f805
}
Packit 47f805