📄 mpegac.cpp
字号:
mec.dwForceMS = dwFlag; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_ForceMS(%d)"), dwFlag)); return S_OK;}STDMETHODIMP CMpegAudEnc::get_CRCFlag(DWORD *dwFlag){ MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwFlag = mec.bCRCProtect; DbgLog((LOG_TRACE, 1, TEXT("get_CRCFlag -> %d"), *dwFlag)); return S_OK;}STDMETHODIMP CMpegAudEnc::get_ForceMono(DWORD *dwFlag){ MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwFlag = mec.bForceMono; DbgLog((LOG_TRACE, 1, TEXT("get_ForceMono -> %d"), *dwFlag)); return S_OK;}STDMETHODIMP CMpegAudEnc::get_SetDuration(DWORD *dwFlag){ MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwFlag = mec.bSetDuration; DbgLog((LOG_TRACE, 1, TEXT("get_SetDuration -> %d"), *dwFlag)); return S_OK;}STDMETHODIMP CMpegAudEnc::set_CRCFlag(DWORD dwFlag){ MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.bCRCProtect = dwFlag; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_CRCFlag(%d)"), dwFlag)); return S_OK;}STDMETHODIMP CMpegAudEnc::set_ForceMono(DWORD dwFlag){ MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.bForceMono = dwFlag; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_ForceMono(%d)"), dwFlag)); return S_OK;}STDMETHODIMP CMpegAudEnc::set_SetDuration(DWORD dwFlag){ MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.bSetDuration = dwFlag; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_SetDuration(%d)"), dwFlag)); return S_OK;}STDMETHODIMP CMpegAudEnc::get_EnforceVBRmin(DWORD *dwFlag){ MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwFlag = mec.dwEnforceVBRmin; DbgLog((LOG_TRACE, 1, TEXT("get_EnforceVBRmin -> %d"), *dwFlag)); return S_OK;}STDMETHODIMP CMpegAudEnc::set_EnforceVBRmin(DWORD dwFlag){ MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.dwEnforceVBRmin = dwFlag; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_EnforceVBRmin(%d)"), dwFlag)); return S_OK;}STDMETHODIMP CMpegAudEnc::get_VoiceMode(DWORD *dwFlag){ MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwFlag = mec.dwVoiceMode; DbgLog((LOG_TRACE, 1, TEXT("get_VoiceMode -> %d"), *dwFlag)); return S_OK;}STDMETHODIMP CMpegAudEnc::set_VoiceMode(DWORD dwFlag){ MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.dwVoiceMode = dwFlag; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_VoiceMode(%d)"), dwFlag)); return S_OK;}STDMETHODIMP CMpegAudEnc::get_KeepAllFreq(DWORD *dwFlag){ MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwFlag = mec.dwKeepAllFreq; DbgLog((LOG_TRACE, 1, TEXT("get_KeepAllFreq -> %d"), *dwFlag)); return S_OK;}STDMETHODIMP CMpegAudEnc::set_KeepAllFreq(DWORD dwFlag){ MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.dwKeepAllFreq = dwFlag; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_KeepAllFreq(%d)"), dwFlag)); return S_OK;}STDMETHODIMP CMpegAudEnc::get_StrictISO(DWORD *dwFlag){ MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwFlag = mec.dwStrictISO; DbgLog((LOG_TRACE, 1, TEXT("get_StrictISO -> %d"), *dwFlag)); return S_OK;}STDMETHODIMP CMpegAudEnc::set_StrictISO(DWORD dwFlag){ MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.dwStrictISO = dwFlag; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_StrictISO(%d)"), dwFlag)); return S_OK;}STDMETHODIMP CMpegAudEnc::get_NoShortBlock(DWORD *dwNoShortBlock){ MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwNoShortBlock = mec.dwNoShortBlock; DbgLog((LOG_TRACE, 1, TEXT("get_NoShortBlock -> %d"), *dwNoShortBlock)); return S_OK;}STDMETHODIMP CMpegAudEnc::set_NoShortBlock(DWORD dwNoShortBlock){ MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.dwNoShortBlock = dwNoShortBlock; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_NoShortBlock(%d)"), dwNoShortBlock)); return S_OK;}STDMETHODIMP CMpegAudEnc::get_XingTag(DWORD *dwXingTag){ MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwXingTag = mec.dwXingTag; DbgLog((LOG_TRACE, 1, TEXT("get_XingTag -> %d"), *dwXingTag)); return S_OK;}STDMETHODIMP CMpegAudEnc::set_XingTag(DWORD dwXingTag){ MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.dwXingTag = dwXingTag; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_XingTag(%d)"), dwXingTag)); return S_OK;}STDMETHODIMP CMpegAudEnc::get_OriginalFlag(DWORD *dwFlag){ MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwFlag = mec.bOriginal; DbgLog((LOG_TRACE, 1, TEXT("get_OriginalFlag -> %d"), *dwFlag)); return S_OK;}STDMETHODIMP CMpegAudEnc::set_OriginalFlag(DWORD dwFlag){ MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.bOriginal = dwFlag; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_OriginalFlag(%d)"), dwFlag)); return S_OK;}STDMETHODIMP CMpegAudEnc::get_CopyrightFlag(DWORD *dwFlag){ MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwFlag = mec.bCopyright; DbgLog((LOG_TRACE, 1, TEXT("get_CopyrightFlag -> %d"), *dwFlag)); return S_OK;}STDMETHODIMP CMpegAudEnc::set_CopyrightFlag(DWORD dwFlag){ MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.bCopyright = dwFlag; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_CopyrightFlag(%d)"), dwFlag)); return S_OK;}STDMETHODIMP CMpegAudEnc::get_ModeFixed(DWORD *dwModeFixed){ MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwModeFixed = mec.dwModeFixed; DbgLog((LOG_TRACE, 1, TEXT("get_ModeFixed -> %d"), *dwModeFixed)); return S_OK;}STDMETHODIMP CMpegAudEnc::set_ModeFixed(DWORD dwModeFixed){ MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.dwModeFixed = dwModeFixed; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_ModeFixed(%d)"), dwModeFixed)); return S_OK;}STDMETHODIMP CMpegAudEnc::get_ParameterBlockSize(BYTE *pcBlock, DWORD *pdwSize){ DbgLog((LOG_TRACE, 1, TEXT("get_ParameterBlockSize -> %d%d"), *pcBlock, *pdwSize)); if (pcBlock != NULL) { if (*pdwSize >= sizeof(MPEG_ENCODER_CONFIG)) { m_Encoder.GetOutputType((MPEG_ENCODER_CONFIG*)pcBlock); return S_OK; } else { *pdwSize = sizeof(MPEG_ENCODER_CONFIG); return E_FAIL; } } else if (pdwSize != NULL) { *pdwSize = sizeof(MPEG_ENCODER_CONFIG); return S_OK; } return E_FAIL;}STDMETHODIMP CMpegAudEnc::set_ParameterBlockSize(BYTE *pcBlock, DWORD dwSize){ DbgLog((LOG_TRACE, 1, TEXT("get_ParameterBlockSize(%d, %d)"), *pcBlock, dwSize)); if (sizeof(MPEG_ENCODER_CONFIG) == dwSize){ m_Encoder.SetOutputType(*(MPEG_ENCODER_CONFIG*)pcBlock); return S_OK; } else return E_FAIL; }STDMETHODIMP CMpegAudEnc::DefaultAudioEncoderProperties(){ DbgLog((LOG_TRACE, 1, TEXT("DefaultAudioEncoderProperties()"))); HRESULT hr = InputTypeDefined(); if (FAILED(hr)) return hr; DWORD dwSourceSampleRate; get_SourceSampleRate(&dwSourceSampleRate); set_PESOutputEnabled(DEFAULT_PES); set_MPEGLayer(DEFAULT_LAYER); set_Bitrate(DEFAULT_BITRATE); set_Variable(FALSE); set_VariableMin(DEFAULT_VARIABLEMIN); set_VariableMax(DEFAULT_VARIABLEMAX); set_Quality(DEFAULT_ENCODING_QUALITY); set_VariableQ(DEFAULT_VBR_QUALITY); set_SampleRate(dwSourceSampleRate); set_CRCFlag(FALSE); set_ForceMono(FALSE); set_SetDuration(FALSE); set_OriginalFlag(FALSE); set_CopyrightFlag(FALSE); set_EnforceVBRmin(DEFAULT_ENFORCE_MIN); set_VoiceMode(DEFAULT_VOICE); set_KeepAllFreq(DEFAULT_KEEP_ALL_FREQ); set_StrictISO(DEFAULT_STRICT_ISO); set_NoShortBlock(DEFAULT_DISABLE_SHORT_BLOCK); set_XingTag(DEFAULT_XING_TAG); set_ForceMS(DEFAULT_FORCE_MS); set_ChannelMode(DEFAULT_STEREO_MODE); set_ModeFixed(DEFAULT_MODE_FIXED); return S_OK;}STDMETHODIMP CMpegAudEnc::LoadAudioEncoderPropertiesFromRegistry(){ DbgLog((LOG_TRACE, 1, TEXT("LoadAudioEncoderPropertiesFromRegistry()"))); MPEG_ENCODER_CONFIG mec; ReadPresetSettings(&mec); if(m_Encoder.SetOutputType(mec) == S_FALSE) return S_FALSE; return S_OK;}STDMETHODIMP CMpegAudEnc::SaveAudioEncoderPropertiesToRegistry(){ DbgLog((LOG_TRACE, 1, TEXT("SaveAudioEncoderPropertiesToRegistry()"))); CRegKey rk; MPEG_ENCODER_CONFIG mec; if(m_Encoder.GetOutputType(&mec) == S_FALSE) return E_FAIL; if(rk.Create(HKEY_CURRENT_USER, KEY_LAME_ENCODER)) { rk.setDWORD(VALUE_BITRATE, mec.dwBitrate); rk.setDWORD(VALUE_VARIABLE, mec.vmVariable); rk.setDWORD(VALUE_VARIABLEMIN, mec.dwVariableMin); rk.setDWORD(VALUE_VARIABLEMAX, mec.dwVariableMax); rk.setDWORD(VALUE_QUALITY, mec.dwQuality); rk.setDWORD(VALUE_VBR_QUALITY, mec.dwVBRq); rk.setDWORD(VALUE_CRC, mec.bCRCProtect); rk.setDWORD(VALUE_FORCE_MONO, mec.bForceMono); rk.setDWORD(VALUE_SET_DURATION, mec.bSetDuration); rk.setDWORD(VALUE_PES, mec.dwPES); rk.setDWORD(VALUE_COPYRIGHT, mec.bCopyright); rk.setDWORD(VALUE_ORIGINAL, mec.bOriginal); rk.setDWORD(VALUE_SAMPLE_RATE, mec.dwSampleRate); rk.setDWORD(VALUE_STEREO_MODE, mec.ChMode); rk.setDWORD(VALUE_FORCE_MS, mec.dwForceMS); rk.setDWORD(VALUE_XING_TAG, mec.dwXingTag); rk.setDWORD(VALUE_DISABLE_SHORT_BLOCK, mec.dwNoShortBlock); rk.setDWORD(VALUE_STRICT_ISO, mec.dwStrictISO); rk.setDWORD(VALUE_KEEP_ALL_FREQ, mec.dwKeepAllFreq); rk.setDWORD(VALUE_VOICE, mec.dwVoiceMode); rk.setDWORD(VALUE_ENFORCE_MIN, mec.dwEnforceVBRmin); rk.setDWORD(VALUE_MODE_FIXED, mec.dwModeFixed); rk.Close(); } // Reconnect filter graph Reconnect(); return S_OK;}STDMETHODIMP CMpegAudEnc::InputTypeDefined(){ WAVEFORMATEX wf; if(FAILED(m_Encoder.GetInputType(&wf))) { DbgLog((LOG_TRACE, 1, TEXT("!InputTypeDefined()"))); return E_FAIL; } DbgLog((LOG_TRACE, 1, TEXT("InputTypeDefined()"))); return S_OK;}STDMETHODIMP CMpegAudEnc::ApplyChanges(){ return Reconnect();}//// CPersistStream stuff//// what is our class ID?STDMETHODIMP CMpegAudEnc::GetClassID(CLSID *pClsid){ CheckPointer(pClsid, E_POINTER); *pClsid = CLSID_LAMEDShowFilter; return S_OK;}HRESULT CMpegAudEnc::WriteToStream(IStream *pStream){ DbgLog((LOG_TRACE,1,TEXT("WriteToStream()"))); MPEG_ENCODER_CONFIG mec; if(m_Encoder.GetOutputType(&mec) == S_FALSE) return E_FAIL; return pStream->Write(&mec, sizeof(mec), 0);}// what device should we use? Used to re-create a .GRF file that we// are inHRESULT CMpegAudEnc::ReadFromStream(IStream *pStream){ MPEG_ENCODER_CONFIG mec; HRESULT hr = pStream->Read(&mec, sizeof(mec), 0); if(FAILED(hr)) return hr; if(m_Encoder.SetOutputType(mec) == S_FALSE) return S_FALSE; DbgLog((LOG_TRACE,1,TEXT("ReadFromStream() succeeded"))); hr = S_OK; return hr;}// How long is our data?int CMpegAudEnc::SizeMax(){ return sizeof(MPEG_ENCODER_CONFIG);}////////////////////////////////////////////STDAPI DllRegisterServer(){ // Create entry in HKEY_CLASSES_ROOT\Filter OLECHAR szCLSID[CHARS_IN_GUID]; TCHAR achTemp[MAX_PATH]; HKEY hKey; HRESULT hr = StringFromGUID2(*g_Templates[0].m_ClsID, szCLSID, CHARS_IN_GUID); wsprintf(achTemp, TEXT("Filter\\%ls"), szCLSID); // create key RegCreateKey(HKEY_CLASSES_ROOT, (LPCTSTR)achTemp, &hKey); RegCloseKey(hKey); return AMovieDllRegisterServer2(TRUE);}STDAPI DllUnregisterServer(){ // Delete entry in HKEY_CLASSES_ROOT\Filter OLECHAR szCLSID[CHARS_IN_GUID]; TCHAR achTemp[MAX_PATH]; HRESULT hr = StringFromGUID2(*g_Templates[0].m_ClsID, szCLSID, CHARS_IN_GUID); wsprintf(achTemp, TEXT("Filter\\%ls"), szCLSID); // create key RegDeleteKey(HKEY_CLASSES_ROOT, (LPCTSTR)achTemp); return AMovieDllRegisterServer2(FALSE);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -