Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngineи захват аудио и видео в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и Audio/Video Capture в Media Foundation вместо DirectShowпо возможности. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]
Хотя лента DV воспроизводится или находится в режиме приостановки записи, вы можете получить SMPTE код времени или абсолютный номер трека. Для этого вызовите метод IAMTimecodeReader::GetTimecode. Этот метод принимает указатель на структуру TIMECODE_SAMPLE, которая описывает код времени. Перед вызовом метода инициализировать dwFlags член структуры. Используйте значение ED_DEVCAP_TIMECODE_READ для получения кода времени или значение ED_DEVCAP_ATN_READ для получения абсолютного номера дорожки.
Элемент кода времени структуры TIMECODE_SAMPLE является структурой TIMECODE. При возврате метода элемент dwFrames структуры TIMECODE содержит код времени или номер дорожки. Для кода времени часы, минуты, секунды и кадры упаковываются в DWORD в виде двоичных закодированных десятичных значений (BCD) с форматом hhmmssff. Используйте битовые маски для извлечения отдельных значений.
В следующем примере извлекается код времени и номер отслеживания.
if (MyDevCap.bHasTimecode)
{
TIMECODE_SAMPLE TimecodeSample;
TimecodeSample.timecode.dwFrames = 0;
char szBuf[32];
TimecodeSample.dwFlags = ED_DEVCAP_TIMECODE_READ;
if (hr = MyDevCap.pTimecode->GetTimecode(&TimecodeSample), SUCCEEDED(hr))
{
DWORD dwTime = TimecodeSample.timecode.dwFrames; // Packed BCD value.
int hour = ((dwTime & 0x0F000000) >> 24) +
(10 * ((dwTime & 0xF0000000) >> 28));
int min = ((dwTime & 0x0F0000) >> 16) +
(10 * ((dwTime & 0xF00000) >> 20));
int sec = ((dwTime & 0x0F00) >> 8) +
(10 * ((dwTime & 0xF000) >> 12));
int frame = (dwTime & 0x0F) +
(10 * ((dwTime & 0xF0) >> 4));
}
TimecodeSample.dwFlags = ED_DEVCAP_ATN_READ;
if (hr = MyDevCap.pTimecode->GetTimecode(&TimecodeSample), SUCCEEDED(hr))
{
DWORD dwTrackNumber = TimecodeSample.timecode.dwFrames;
}
}
Связанные разделы