Определение входных данных по числу
Функция, связанная с этой страницей, Windows Media Format 11 SDK, является устаревшей возможностью. Он был заменен устройством для считывания источника и устройством для записи в приемник . Source Reader и Sink Writer оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать новый код Источник Чтения и Запись Приемника вместо Windows Media Format 11 SDK, где это возможно. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]
Каждый пример, передаваемый в модуль записи, должен быть связан с номером входа. Каждый вводимый номер соответствует одному или нескольким потокам в профиле, который записывающее устройство использует для записи файла. В профиле источники мультимедиа определяются по имени подключения. Модуль записи связывает входной номер с каждым именем подключения при настройке профиля для модуля записи. Прежде чем передавать примеры автору, необходимо определить, какие данные ожидает каждый ввод. Нельзя предположить, что входные данные будут находиться в том же порядке, что и потоки в профиле, даже если это часто происходит. Поэтому единственным надежным способом сопоставления входных данных с потоками является сравнение имени подключения входных данных с именем подключения потока.
Чтобы определить имена подключений и соответствующие входные номера для загруженного профиля, выполните следующие действия:
- Создайте объект записи данных и задайте для него профиль для использования. Дополнительные сведения о настройке профилей в Writer см. в разделе «Использование профилей с Writer». Вам следует знать названия подключений, используемые для потоков в профиле. Имя подключения можно получить из профиля, получив объект конфигурации потока для каждого потока и вызвав IWMStreamConfig::GetConnectionName. Дополнительные сведения о профилях и объектах конфигурации потоков см. в разделе Работа с профилями.
- Получение общего количества входных данных путем вызова IWMWriter::GetInputCount.
- Прокрутите все входные данные, выполнив следующие действия для каждого из них.
- Получите интерфейс IWMInputMediaProps для входных данных путем вызова IWMWriter::GetInputProps.
- Получите имя подключения, соответствующее входной номеру, вызвав IWMInputMediaProps::GetConnectionName. После получения имени подключения, вы знаете потоки, связанные с входными номерами, назначенными автором.
В следующем примере кода отображается имя подключения для каждого входного ввода. Дополнительные сведения об использовании этого кода см. в разделе Использование примеров кода.
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;
}
Связанные разделы