Формат потока
[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngineи аудио и видеозахват в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать новый код MediaPlayer, IMFMediaEngine и аудио-видеозахват в Media Foundation вместо DirectShowпо возможности. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]
Как MSDV, так и драйвер UVC могут выводить два формата DV: чередование аудио-видео или только видео. Межличенное аудио-видео — это исходный формат с устройства. Формат только для видео содержит те же данные, но примеры помечены как не имеющие звуковых данных. Формат только для видео существует в основном для совместимости с приложениями, используюющими Видео для Windows. Дополнительные сведения см. в разделе Type-1 и Type-2 DV AVI Files.
драйвер MSDV
Драйвер MSDV имеет два выходных пина. Первый пин-код вывода отправляет перекрестивые данные, а второй выходной пин-код отправляет данные только для видео. Одновременно можно подключить только один выходной пин-код. Чтобы выбрать формат, подключите соответствующий выходной пин-код. Для поиска формата можно использовать интерфейс IAMStreamConfig на выходном закреплении.
драйвер UVC
В отличие от драйвера MSDV драйвер UVC предоставляет оба формата из одного пин-кода. Формат по умолчанию — только видео. Чтобы выбрать формат, используйте интерфейс IAMStreamConfig на выходном закреплении. Вызовите метод GetStreamCaps, чтобы перечислить типы носителей на выходном закреплении. Для каждого типа носителя, если основной тип соответствует требуемому формату, вызовите SetFormat и передайте этот тип носителя.
Формат | Основной тип |
---|---|
Чередование звука и видео | MEDIATYPE_Interleaved |
Только видео | MEDIATYPE_Video |
Следующая функция задает формат на основе GUID основного типа.
HRESULT SetStreamFormat(IAMStreamConfig *pConfig, const GUID& majorType)
{
if (pConfig == NULL)
{
return E_POINTER;
}
// Get the number of stream capabilities.
int count = 0, size = 0;
HRESULT hr = pConfig->GetNumberOfCapabilities(&count, &size);
if (FAILED(hr))
{
return hr;
}
// Allocate memory for the stream capabilities structure.
BYTE *pCaps = new BYTE[size];
if (pCaps == NULL)
{
return E_OUTOFMEMORY;
}
// Enumerate the stream capabilities.
bool bFoundType = false;
for (int ix = 0; ix < count; ix++)
{
AM_MEDIA_TYPE *pmt;
hr = pConfig->GetStreamCaps(ix, &pmt, pCaps);
if (FAILED(hr))
{
break;
}
else if (pmt->majortype == majorType)
{
// This is the media type we want.
bFoundType = true;
hr = pConfig->SetFormat(pmt);
DeleteMediaType(pmt);
break;
}
DeleteMediaType(pmt);
}
delete [] pCaps;
if (FAILED(hr))
{
return hr;
}
return bFoundType ? S_OK : E_FAIL;
}
Драйвер MSDV также поддерживает IAMStreamConfig, чтобы можно было написать код, который работает для обоих типов устройств.
Связанные разделы
-
управление DV Camcorder