Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
[Funkce přidružená k této stránce, Windows Media Format 11 SDK, je starší funkce. Byla nahrazena zdrojovým čtečem a zapisovačem do jímky. Čtečka zdroje a Zapisovač jímky jsou optimalizované pro Windows 10 a Windows 11. Microsoft důrazně doporučuje, aby nový kód používal Čtečka zdroje a Zapisovač média místo Windows Media Format 11 SDK, kdykoli je to možné. Microsoft navrhuje, aby se stávající kód, který používá starší rozhraní API, přepsal, aby se nová rozhraní API používala, pokud je to možné.]
Některé kodeky podporují kódování se dvěma průchody pro určité formáty. V některých případech kodek vyžaduje kódování zadaného formátu pomocí dvou průchodů. Při použití dvojprůchodového kódování se vzorky streamu odešlou do kodeku před samotným kódováním. Kodek analyzuje vzorky a nakonfiguruje průchod kódování na základě analýzy. Výsledkem je efektivnější zakódovaný soubor.
Chcete-li zjistit, zda kodek podporuje kódování s jedním průchodem, nebo dva průchody nebo obojí pro daný formát, zavolejte IWMCodecInfo3::SetCodecEnumerationSetting s g_wszNumPasses a příslušnou hodnotou a potom vytvořte výčet formátů, abyste zjistili, jestli se vrátí požadovaný formát. Další informace o kodekech Windows Media, které podporují kódování se dvěma průchody, naleznete v tématu Volba metody kódování.
Pomocí sady Windows Media Format SDK můžete použít kódování se dvěma průchody voláním metod rozhraní IWMWriterPreprocess.
V případech, kdy je pro určitý formát vyžadováno kódování se dvěma průchody, ale aplikace neprovede předzpracovací průchod, první volání WriteSample selže s NS_E_INVALID_NUM_PASSES.
Následující ukázková funkce ukazuje, jak provést dvou pass kódování. Tato funkce se volá po nastavení zapisovače s profilem a spuštěním. Další informace o použití tohoto kódu naleznete v tématu Použití příkladů kódu.
HRESULT PreProcess(IWMWriter* pWriter, DWORD dwInputNum)
{
HRESULT hr = S_OK;
DWORD dwMaxPass = 0;
IWMWriterPreprocess* pPreProc = NULL;
// Get the writer preprocessor interface.
hr = pWriter->QueryInterface(IID_IWMWriterPreprocess,
(void**) &pPreProc);
GOTO_EXIT_IF_FAILED(hr);
// Check that the input can be preprocessed.
hr = pPreProc->GetMaxPreprocessingPasses(dwInputNum,0, &dwMaxPass);
GOTO_EXIT_IF_FAILED(hr);
if(dwMaxPass == 0)
{
hr = NS_E_INVALID_REQUEST;
goto Exit;
}
// Set the number of preprocessing passes to the maximum.
hr = pPreProc->SetNumPreprocessingPasses(dwInputNum, 0, dwMaxPass);
GOTO_EXIT_IF_FAILED(hr);
// Call BeginWriting before calling BeginPreprocessingPass
hr = pWriter->BeginWriting();
// Start preprocessing the first pass.
hr = pPreProc->BeginPreprocessingPass(dwInputNum, 0);
GOTO_EXIT_IF_FAILED(hr);
// TODO: Make repeated calls to pPreProc->PreprocessSample to
// preprocess all the samples in the stream.
// End preprocessing.
hr = pPreProc->EndPreprocessingPass(dwInputNum, 0);
GOTO_EXIT_IF_FAILED(hr);
// TODO: If the maximum number of preprocessing passes is greater
// than one, repeat the preprocessing steps for each pass.
Exit:
SAFE_RELEASE(pPreProc);
Return hr;
}
Související témata