Giriş Biçimlerini Numaralandırmak için
[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 kodların mümkün olduğunda Windows Media Format 11 SDKyerine Kaynak Okuyucu ve Hedef Yazıcı 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.]
Windows Media codec'lerinin her biri sıkıştırma için bir veya daha fazla giriş medyası türünü kabul eder. Windows Media Format SDK'sı, codec'ler tarafından desteklenen biçimlerden daha geniş bir biçim türü girmenizi sağlar. SDK bunu, gerektiğinde girişlerde video karelerini yeniden boyutlandırma veya sesi yeniden örnekleme gibi ön işleme dönüştürmeleri gerçekleştirerek yapar. Her durumda, yazdığınız dosyaların giriş biçimlerinin yazıcıya gönderdiğiniz veriyle eşleştiğinden emin olmanız gerekir. Her codec bileşeni, profil yüklendiğinde yazıcıda ayarlanan varsayılan bir giriş medya biçimine sahiptir. IWMWriter::GetInputPropsçağırarak varsayılan giriş biçimini inceleyebilirsiniz.
Video codec'leri şu biçimleri destekler: IYUV, I420, YV12, YUY2, UYVY, YVYU, YVU9, RGB 32, RGB 24, RGB 565, RGB 555 ve RGB 8. Ses codec'leri PCM sesini destekler.
Bir codec tarafından desteklenen giriş biçimlerini numaralandırmak için aşağıdaki adımları uygulayın:
- Bir yazıcı nesnesi oluşturun ve kullanılacak profili ayarlayın. Yazıcıda profilleri ayarlama hakkında daha fazla bilgi için bkz. Yazıcıprofilleri kullanmak için .
- Biçimlerini denetlemek istediğiniz giriş numarasını belirleyin. Giriş numaralarını tanımlama hakkında daha fazla bilgi için bkz. Sayıya Göre Girişleri Tanımlamak için.
- IWMWriter::GetInputFormatCountçağırarak istenen giriş tarafından desteklenen toplam giriş biçimi sayısını alın.
- Desteklenen tüm giriş biçimleri üzerinde döngü oluşturun ve her biri için aşağıdaki adımları uygulayın.
- IWMWriter::GetInputFormatçağırarak giriş biçimi için IWMInputMediaProps arabirimini alın.
- Giriş biçimi için WM_MEDIA_TYPE yapısını alın. IWMMediaProps::GetMediaTypeçağrısı yaparak, pType parametresi için NULL geçirerek yapının boyutunu alın. Ardından, yapıyı tutmak için bellek ayırın ve yapıyı almak için getMediaType yeniden çağırın. IWMInputMediaProps, IWMMediaProps'i devralır, bu nedenle önceki adımda alınan IWMInputMediaProps örneğinden GetMediaType çağrılarını yapabilirsiniz.
- WM_MEDIA_TYPE yapısında açıklanan biçim, giriş biçimiyle ilgili tüm bilgileri içerir. Medyanın temel biçimi, WM_MEDIA_TYPE.subtype ile tanımlanır. Video akışları için pbFormat üyesi, dikdörtgen boyutu da dahil olmak üzere akış hakkında daha fazla ayrıntı içeren dinamik olarak ayrılmış WMVIDEOINFOHEADER yapısına işaret eder. Giriş çerçevelerinin boyutu, codec bileşeni tarafından desteklenen bir boyutla tam olarak eşleşecek şekilde gerekli değildir. Eşleşmiyorsa, SDK çalışma zamanı bileşenleri çoğu durumda giriş video çerçevelerini otomatik olarak codec'in kabul edeceği bir şekilde yeniden boyutlandıracaktır.
Aşağıdaki örnek kod, parametre olarak geçirilen alt türün giriş biçimini bulur. Bu kodu kullanma hakkında daha fazla bilgi için bkz. Kod Örneklerini Kullanma.
HRESULT FindInputFormat(IWMWriter* pWriter,
DWORD dwInput,
GUID guidSubType,
IWMInputMediaProps** ppProps)
{
DWORD cFormats = 0;
DWORD cbSize = 0;
WM_MEDIA_TYPE* pType = NULL;
IWMInputMediaProps* pProps = NULL;
// Set the ppProps parameter to point to NULL. This will
// be used to check the results of the function later.
*ppProps = NULL;
// Find the number of formats supported by this input.
HRESULT hr = pWriter->GetInputFormatCount(dwInput, &cFormats);
if (FAILED(hr))
{
goto Exit;
}
// Loop through all of the supported formats.
for (DWORD formatIndex = 0; formatIndex < cFormats; formatIndex++)
{
// Get the input media properties for the input format.
hr = pWriter->GetInputFormat(dwInput, formatIndex, &pProps);
if (FAILED(hr))
{
goto Exit;
}
// Get the size of the media type structure.
hr = pProps->GetMediaType(NULL, &cbSize);
if (FAILED(hr))
{
goto Exit;
}
// Allocate memory for the media type structure.
pType = (WM_MEDIA_TYPE*) new (std::nothrow) BYTE[cbSize];
if (pType == NULL)
{
hr = E_OUTOFMEMORY;
goto Exit;
}
// Get the media type structure.
hr = pProps->GetMediaType(pType, &cbSize);
if (FAILED(hr))
{
goto Exit;
}
if(pType->subtype == guidSubType)
{
*ppProps = pProps;
(*ppProps)->AddRef();
goto Exit;
}
// Clean up for next iteration.
delete [] pType;
pType = NULL;
SAFE_RELEASE(pProps);
} // End for formatIndex.
// If execution made it to this point, no matching format was found.
hr = NS_E_INVALID_INPUT_FORMAT;
Exit:
delete [] pType;
SAFE_RELEASE(pProps);
return hr;
}
İlgili konular