Abrufen von Timecode vom Gerät

Während ein DV-Band wiedergegeben wird oder sich im Aufzeichnungspausenmodus befindet, können Sie den SMPTE-Zeitcode oder die absolute Tracknummer abrufen. Rufen Sie hierzu die IAMTimecodeReader::GetTimecode-Methode auf. Diese Methode verwendet einen Zeiger auf eine TIMECODE _ SAMPLE-Struktur, die den Zeitcode beschreibt. Initialisieren Sie vor dem Aufrufen der -Methode den dwFlags-Member der -Struktur. Verwenden Sie den Wert ED _ DEVCAP _ TIMECODE _ READ, um den Timecode abzurufen, oder den Wert ED _ DEVCAP _ ATN _ READ, um die absolute Tracknummer abzurufen.

Der Timecodemember der TIMECODE _ SAMPLE-Struktur ist eine TIMECODE-Struktur. Wenn die Methode zurückgegeben wird, enthält der dwFrames-Member der TIMECODE-Struktur den Timecode oder die Tracknummer. Für timecode werden die Stunden, Minuten, Sekunden und Frames als binär codierte Dezimalwerte (Binary Coded Decimal, BCD) mit dem Format hhmmssff in ein DWORD gepackt. Verwenden Sie Bitmasken, um die einzelnen Werte zu extrahieren.

Im folgenden Beispiel werden der Zeitcode und die Nachverfolgungsnummer abgerufen.

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;
    }
}

Steuern eines DV-Dvds