IMFTimecodeTranslate::EndConvertHNSToTimecode 메서드(mfidl.h)

100나노초 단위의 시간을 SMPTE(영화 및 텔레비전 엔지니어 협회) 시간 코드로 변환하는 비동기 요청을 완료합니다.

구문

HRESULT EndConvertHNSToTimecode(
  [in]  IMFAsyncResult *pResult,
  [out] PROPVARIANT    *pPropVarTimecode
);

매개 변수

[in] pResult

IMFAsyncResult 인터페이스에 대한 포인터입니다. IMFAsyncCallback::Invoke 메서드에서 콜백 개체가 받은 것과 동일한 포인터를 전달합니다.

[out] pPropVarTimecode

변환된 시간을 수신하는 PROPVARIANT 에 대한 포인터입니다. PROPVARIANT 구조체의 vt 멤버는 VT_I8. hVal.QuadPart 멤버는 변환된 시간을 BCD(이진 코딩된 10진수) 형식으로 포함합니다. 설명 부분을 참조하세요.

반환 값

메서드가 성공하면 S_OK를 반환하고, 그러지 않으면 HRESULT 오류 코드를 반환합니다.

설명

IMFTimecodeTranslate::BeginConvertHNSToTimecode 메서드가 비동기적으로 완료된 후 이 메서드를 호출합니다.

pPropVarTimecode 값은 LONGLONG으로 입력된 64비트 부호 없는 값입니다. 위쪽 DWORD 에는 범위가 포함됩니다. (범위는 연속적인 일련의 시간 코드입니다.) 아래쪽 DWORD에는 각 2바이트 시퀀스가 10진수 값으로 읽혀지는 16진수 0xhhmmssff 형식의 시간 코드가 포함되어 있습니다.

HRESULT ParseTimeCode(
    const PROPVARIANT& var,
    DWORD *pdwRange,
    DWORD *pdwFrames,
    DWORD *pdwSeconds,
    DWORD *pdwMinutes,
    DWORD *pdwHours
    )
{
    if (var.vt != VT_I8)
    {
        return E_INVALIDARG;
    }

    ULONGLONG ullTimeCode = (ULONGLONG)var.hVal.QuadPart;
    DWORD dwTimecode = (DWORD)(ullTimeCode & 0xFFFFFFFF);

    *pdwRange   = (DWORD)(ullTimeCode >> 32);
    *pdwFrames  =     dwTimecode & 0x0000000F;
    *pdwFrames  += (( dwTimecode & 0x000000F0) >> 4 )  * 10;
    *pdwSeconds =   ( dwTimecode & 0x00000F00) >> 8;
    *pdwSeconds += (( dwTimecode & 0x0000F000) >> 12 ) * 10;
    *pdwMinutes =   ( dwTimecode & 0x000F0000) >> 16;
    *pdwMinutes += (( dwTimecode & 0x00F00000) >> 20 ) * 10;
    *pdwHours   =   ( dwTimecode & 0x0F000000) >> 24;
    *pdwHours   += (( dwTimecode & 0xF0000000) >> 28 ) * 10;

    return S_OK;
}

요구 사항

   
지원되는 최소 클라이언트 Windows 7 [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2008 R2 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 mfidl.h

참고 항목

비동기 메서드 호출

IMFTimecodeTranslate