Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
[Funkcja skojarzona z tą stroną, DirectShow, jest starszą funkcją. Został zastąpiony przez MediaPlayer, IMFMediaEnginei Audio/Video Capture w Media Foundation. Te funkcje zostały zoptymalizowane pod kątem systemów Windows 10 i Windows 11. Firma Microsoft zdecydowanie zaleca, aby nowy kod używał MediaPlayer, IMFMediaEngine i Audio/Video Capture w programie Media Foundation zamiast DirectShow, jeśli to możliwe. Firma Microsoft sugeruje, że istniejący kod, który używa starszych interfejsów API, należy przepisać go do korzystania z nowych interfejsów API, jeśli to możliwe.]
Gdy taśma DV jest odtwarzana lub jest w trybie wstrzymania nagrywania, można pobrać kod czasu SMPTE lub bezwzględny numer ścieżki. W tym celu wywołaj metodę IAMTimecodeReader::GetTimecode. Ta metoda przyjmuje wskaźnik do struktury TIMECODE_SAMPLE, która opisuje kod czasu. Przed wywołaniem metody zainicjuj element dwFlags w strukturze. Użyj wartości ED_DEVCAP_TIMECODE_READ, aby pobrać kod czasu lub wartość ED_DEVCAP_ATN_READ, aby pobrać bezwzględną liczbę ścieżki.
Członek kodu czasu struktury TIMECODE_SAMPLE jest strukturą TIMECODE. Gdy metoda zwraca, dwFrames w składowej struktury TIMECODE zawiera kod czasu lub numer ścieżki. W przypadku kodu czasu godziny, minuty, sekundy i ramki są pakowane do DWORD jako wartości binarne zakodowane dziesiętnie (BCD), z formatem hhmmssff. Użyj mask bitowych, aby wyodrębnić poszczególne wartości.
Poniższy przykład pobiera kod czasu i numer ścieżki.
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;
}
}
Tematy pokrewne