287 |
HRESULT |
HRESULT |
288 |
RecompressGraph::CreateGraph(HWND in_ProgressWnd, int in_Pass) |
RecompressGraph::CreateGraph(HWND in_ProgressWnd, int in_Pass) |
289 |
{ |
{ |
290 |
|
int remux_only = 0; |
291 |
|
|
292 |
m_FpsNom = m_FpsDen = 0; |
m_FpsNom = m_FpsDen = 0; |
293 |
m_ProgressWnd = in_ProgressWnd; |
m_ProgressWnd = in_ProgressWnd; |
294 |
|
|
373 |
IBaseFilter *pCompressedVideoFilter = 0; |
IBaseFilter *pCompressedVideoFilter = 0; |
374 |
int m_bRecompress = 1; |
int m_bRecompress = 1; |
375 |
GUID gSubtype; |
GUID gSubtype; |
376 |
|
CUnknown *pChgUnk = NULL; |
377 |
|
|
378 |
if (hr == S_OK) { |
if (hr == S_OK) { |
379 |
m_TotalFrames = 0; |
m_TotalFrames = 0; |
411 |
|| gSubtype == FOURCCMap('4PMS') || gSubtype == FOURCCMap('4pms')) |
|| gSubtype == FOURCCMap('4PMS') || gSubtype == FOURCCMap('4pms')) |
412 |
{ |
{ |
413 |
pCompressedVideoFilter = m_pVideoMeter ? m_pVideoMeter : (m_pSplitter ? m_pSplitter : m_pSrcFilter); |
pCompressedVideoFilter = m_pVideoMeter ? m_pVideoMeter : (m_pSplitter ? m_pSplitter : m_pSrcFilter); |
414 |
|
remux_only = 1; |
415 |
} |
} |
416 |
else { |
else |
417 |
|
full_recompress: |
418 |
|
{ |
419 |
m_bFileCopy = 0; |
m_bFileCopy = 0; |
420 |
|
if (remux_only==1) remux_only = 2; |
421 |
|
|
422 |
if (hr == S_OK) hr = AddDirectXFilterByMoniker(CLSID_VideoCompressorCategory, "xvid", &m_pXvidEncoder, 1); |
if (hr == S_OK) hr = AddDirectXFilterByMoniker(CLSID_VideoCompressorCategory, "xvid", &m_pXvidEncoder, 1); |
423 |
if (hr == S_OK) hr = m_pGraph->AddFilter(m_pXvidEncoder, L"Encoder"); |
if (hr == S_OK) hr = m_pGraph->AddFilter(m_pXvidEncoder, L"Encoder"); |
493 |
} |
} |
494 |
} |
} |
495 |
|
|
496 |
CUnknown *pChgUnk = ChangeSubtypeT::CreateInstance(0, &hr); |
if (remux_only != 2) { |
497 |
|
pChgUnk = ChangeSubtypeT::CreateInstance(0, &hr); |
498 |
if (hr == S_OK) hr = pChgUnk->NonDelegatingQueryInterface(IID_IBaseFilter, (void **)&m_pChgType); |
if (hr == S_OK) hr = pChgUnk->NonDelegatingQueryInterface(IID_IBaseFilter, (void **)&m_pChgType); |
499 |
if (hr == S_OK) hr = m_pGraph->AddFilter(m_pChgType, L"ChgToxvid"); |
if (hr == S_OK) hr = m_pGraph->AddFilter(m_pChgType, L"ChgToxvid"); |
500 |
|
} |
501 |
if (hr == S_OK) hr = ConnectFilters(m_pGraph, pCompressedVideoFilter, m_pChgType, GUID_NULL, GUID_NULL, 1); |
if (hr == S_OK) hr = ConnectFilters(m_pGraph, pCompressedVideoFilter, m_pChgType, GUID_NULL, GUID_NULL, 1); |
502 |
|
if (hr != S_OK && remux_only==1) { hr = S_OK; goto full_recompress; } // retry with full recompress |
503 |
if (hr == S_OK) hr = AddFilterByCLSID((GUID *)&CLSID_AviDest, &m_pMuxer); |
if (hr == S_OK) hr = AddFilterByCLSID((GUID *)&CLSID_AviDest, &m_pMuxer); |
504 |
|
|
505 |
#if 0 |
#if 0 |