Rémi Bernon (@rbernon) commented about dlls/winegstreamer/video_decoder.c:
if (decoder->provide_timestamps)
{ if (FAILED(IMFMediaType_GetUINT64(decoder->input_type, &MF_MT_FRAME_RATE, &frame_rate))) frame_rate = (UINT64)30000 << 32 | 1001;
duration = (UINT64)10000000 * (UINT32)frame_rate / (frame_rate >> 32);
if (FAILED(IMFSample_SetSampleTime(sample, decoder->sample_time)))
duration = ((UINT64)10000000 * (UINT32)frame_rate + (frame_rate >> 32)/2) / (frame_rate >> 32);
}
if (SUCCEEDED(IMFSample_GetUINT32(sample, &MFSampleExtension_WG_Timestamp, &value)) && value)
{
if (FAILED(IMFSample_GetSampleTime(sample, (LONGLONG*)&decoder->sample_time)))
WARN("Failed to get sample time\n");
if (FAILED(IMFSample_GetSampleDuration(sample, &duration)) && FAILED(IMFSample_SetSampleDuration(sample, duration)))
WARN("Failed to get and set sample duration\n");
I don't understand what this does?