Så här identifierar du indata efter nummer
[Funktionen som är associerad med den här sidan, Windows Media Format 11 SDK, är en äldre funktion. Det har ersatts av Source Reader och Sink Writer. Source Reader och Sink Writer har optimerats för Windows 10 och Windows 11. Microsoft rekommenderar starkt att ny kod använder Source Reader och Sink Writer i stället för Windows Media Format 11 SDK, när det är möjligt. Microsoft föreslår att befintlig kod som använder äldre API:er skrivs om för att använda de nya API:erna om möjligt.]
Varje exempel som du skickar till skrivaren måste associeras med ett indatanummer. Varje indatanummer motsvarar en eller flera strömmar i profilen som skrivaren använder för att skriva filen. I en profil identifieras mediekällor med ett anslutningsnamn. Författaren associerar ett indatanummer med varje anslutningsnamn när du konfigurerar profilen för författaren. Innan du kan skicka exempel till skrivaren måste du bestämma vilka data varje indata förväntar sig. Du kan inte anta att indata kommer att vara i samma ordning som strömmarna i en profil, även om så ofta är fallet. Därför är det enda tillförlitliga sättet att matcha indata med strömmar att jämföra anslutningsnamnet för indata med strömmens anslutningsnamn.
Utför följande steg för att identifiera anslutningsnamn och motsvarande indatanummer för en inläst profil:
- Skapa ett skrivobjekt och ange en profil som ska användas. Mer information om hur du anger profiler i skrivprogrammet Writer finns i Att använda profiler med Writer. Du bör känna till anslutningsnamnen som används för strömmarna i profilen. Du kan hämta anslutningsnamnet inifrån profilen genom att hämta streamkonfigurationsobjektet för varje ström och anropa IWMStreamConfig::GetConnectionName. Mer information om profiler och strömkonfigurationsobjekt finns i Arbeta med profiler.
- Hämta det totala antalet indata genom att anropa IWMWriter::GetInputCount.
- Loopa igenom alla indata och utför följande steg för var och en.
- Hämta gränssnittet IWMInputMediaProps för indata genom att anropa IWMWriter::GetInputProps.
- Hämta anslutningsnamnet som motsvarar indatanumret genom att anropa IWMInputMediaProps::GetConnectionName. När du har anslutningsnamnet känner du till strömmarna som är associerade med de indatatal som tilldelats av författaren.
I följande exempelkod visas anslutningsnamnet för varje indata. Mer information om hur du använder den här koden finns i Använda kodexemplen.
HRESULT GetNamesForInputs(IWMWriter* pWriter)
{
DWORD cInputs = 0;
HRESULT hr = S_OK;
WCHAR* pwszName = NULL;
WORD cchName = 0;
IWMInputMediaProps* pProps = NULL;
// Get the total number of inputs for the file.
hr = pWriter->GetInputCount(&cInputs);
GOTO_EXIT_IF_FAILED(hr);
// Loop through all supported inputs.
for (DWORD inputIndex = 0; inputIndex < cInputs; inputIndex++)
{
// Get the input properties for the input.
hr = pWriter->GetInputProps(inputIndex, &pProps);
GOTO_EXIT_IF_FAILED(hr);
// Get the size of the connection name.
hr = pProps->GetConnectionName(0, &cchName);
GOTO_EXIT_IF_FAILED(hr);
if (cchName > 0)
{
// Allocate memory for the connection name.
pwszName = new WCHAR[cchName];
if (wszName == NULL)
{
hr = E_OUTOFMEMORY;
goto Exit;
}
// Get the connection name.
hr = pProps->GetConnectionName(pwszName, &cchName);
GOTO_EXIT_IF_FAILED(hr);
// Display the name.
printf("Input # %d = %S\n", pwszName);
} // end if
// Clean up for next iteration.
SAFE_ARRAY_DELETE(pwszName);
SAFE_RELEASE(pProps);
} // end for inputIndex
Exit:
SAFE_ARRAY_DELETE(pwszName);
SAFE_RELEASE(pProps);
return hr;
}
Relaterade ämnen