Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
[Windows Media Format 11 SDK bu sayfayla ilişkilendirilmiş özellik eski bir özelliktir. Kaynak Okuyucu ve Havuz Yazıcısıtarafından değiştirildi. Kaynak Okuyucu ve Havuz Yazıcısı Windows 10 ve Windows 11 için iyileştirilmiştir. Microsoft, yeni kodun mümkün olduğunda Windows Media Format 11 SDKyerine Source Reader ve Sink Writer kullanmasını kesinlikle önerir. Microsoft, mümkünse yeni API'leri kullanmak için eski API'leri kullanan mevcut kodun yeniden yazılmasını önerir.]
Bazı codec'ler belirli biçimler için iki geçişli kodlamayı destekler. Bazı durumlarda bir codec bileşeni, belirtilen biçimin iki geçiş kullanılarak kodlanması gerekir. İki geçişli kodlama kullanıldığında, kodlama geçişi öncesinde akışın örneklerini codec'e gönderirsiniz. Codec, örnekleri analiz eder ve çözümlemeye göre kodlama geçişini yapılandırmaktadır. Bu, daha verimli bir şekilde kodlanmış bir dosyayla sonuçlanır.
Codec bileşeninin belirli bir biçim için tek geçişli kodlamayı mı, iki geçişli mi yoksa her ikisini birden mi desteklediğini belirlemek için, g_wszNumPasses ve uygun değerle IWMCodecInfo3::SetCodecEnumerationSettingçağırın ve sonra istediğiniz kodun döndürülüp döndürülmediğini görmek için biçimleri numaralandırın. İki geçişli kodlamayı destekleyen Windows Media codec'leri hakkında daha fazla bilgi için bkz. Kodlama Yöntemi Seçme.
IWMWriterPreprocess arabiriminin yöntemlerini çağırarak Windows Media Format SDK'sı ile iki geçişli kodlama kullanabilirsiniz.
Belirli bir biçim için iki geçişli kodlamanın gerekli olduğu ancak uygulamanın ön işlem geçişi gerçekleştiremediği durumlarda, WriteSample ilk çağrı NS_E_INVALID_NUM_PASSES ile başarısız olur.
Aşağıdaki örnek işlev, iki geçişli kodlamanın nasıl gerçekleştirileceklerini gösterir. Bu işlev, yazıcı bir profille ayarlandıktan ve başlatıldıktan sonra çağrılır. Bu kodu kullanma hakkında daha fazla bilgi için bkz. Kod Örneklerini Kullanma.
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;
}
İlgili konular